| | |
| | | ## 版权声明 |
| | | * BladeX是一个商业化软件,系列产品知识产权归**上海布雷德科技有限公司**独立所有 |
| | | * 您一旦开始复制、下载、安装或者使用本产品,即被视为完全理解并接受本协议的各项条款 |
| | | * 更多详情请看:[BladeX商业授权许可协议](/LICENSE) |
| | | #idea使用docker构建工程步骤 |
| | | ### 1. 使用harbor作为私有库,需要配置maven,找到setting.xml( `linux可以使用find / -name settings.xml`)加入以下配置 |
| | | |
| | | ## 答疑流程 |
| | | >1. 遇到问题或Bug |
| | | >2. 业务型问题打断点调试尝试找出问题所在 |
| | | >3. 系统型问题通过百度、谷歌、社区查找解决方案 |
| | | >4. 未解决问题则进入技术社区进行发帖提问:[https://sns.bladex.vip/](https://sns.bladex.vip/) |
| | | >5. 将帖子地址发至商业群,特别简单三言两语就能描述清楚的也可在答疑时间内发至商业群提问 |
| | | >6. 发帖的时候一定要描述清楚,详细描述遇到问题的**重现步骤**、**报错详细信息**、**相关代码与逻辑**、**使用软件版本**以及**操作系统版本**,否则随意发帖提问将会提高我们的答疑难度。 |
| | | ``` |
| | | <servers> |
| | | <server> |
| | | <id>192.168.0.157</id> |
| | | <username>admin</username> |
| | | <password>Harbor12345</password> |
| | | <configuration> |
| | | <email>smallchill@163.com</email> |
| | | </configuration> |
| | | </server> |
| | | </servers> |
| | | |
| | | ## 答疑时间 |
| | | * 工作日:9:00 ~ 17:00 提供答疑,周末、节假日休息,暂停答疑 |
| | | * 请勿**私聊提问**,以免被其他用户的消息覆盖从而无法获得答疑 |
| | | * 答疑时间外遇到问题可以将问题发帖至[技术社区](https://sns.bladex.vip/),我们后续会逐个回复 |
| | | <pluginGroups> |
| | | <pluginGroup>com.spotify</pluginGroup> |
| | | </pluginGroups> |
| | | ``` |
| | | |
| | | ## 授权范围 |
| | | * 专业版:只可用于**个人学习**及**个人私活**项目,不可用于公司或团队,不可泄露给任何第三方 |
| | | * 企业版:可用于**企业名下**的任何项目,企业版员工在**未购买**专业版授权前,只授权开发**所在授权企业名下**的项目,**不得将BladeX用于个人私活** |
| | | * 共同遵守:若甲方需要您提供项目源码,则需代为甲方购买BladeX企业授权,甲方购买后续的所有项目都无需再次购买授权 |
| | | ### 2. docker开启远程访问和配置http访问 |
| | | #### 2.1 docker开启远程访问 |
| | | 如果没有远程访问,会报 `Connect to 192.168.0.157:2375 [/192.168.0.157] failed: Connection refused: connect` |
| | | |
| | | ## 商用权益 |
| | | * ✔️ 遵守[商业协议](/LICENSE)的前提下,将BladeX系列产品用于授权范围内的商用项目,并上线运营 |
| | | * ✔️ 遵守[商业协议](/LICENSE)的前提下,不限制项目数,不限制服务器数 |
| | | * ✔️ 遵守[商业协议](/LICENSE)的前提下,将自行编写的业务代码申请软件著作权 |
| | | 在`/usr/lib/systemd/system/docker.service`,配置远程访问。主要是在[Service]这个部分,加上下面两个参数: |
| | | |
| | | ## 何为侵权 |
| | | * ❌ 不遵守商业协议,私自销售商业源码 |
| | | * ❌ 以任何理由将BladeX源码用于申请软件著作权 |
| | | * ❌ 将商业源码以任何途径任何理由泄露给未授权的单位或个人 |
| | | * ❌ 开发完毕项目,没有为甲方购买企业授权,向甲方提供了BladeX代码 |
| | | * ❌ 基于BladeX拓展研发与BladeX有竞争关系的衍生框架,并将其开源或销售 |
| | | ``` |
| | | cd /usr/lib/systemd/system |
| | | |
| | | ## 侵权后果 |
| | | * 情节较轻:第一次发现警告处理 |
| | | * 情节较重:封禁账号,踢出商业群,并保留追究法律责任的权利 |
| | | * 情节严重:与本地律师事务所合作,以公司名义起诉侵犯计算机软件著作权 |
| | | vi docker.service |
| | | |
| | | ## 举报有奖 |
| | | * 向官方提供有用线索并成功捣毁盗版个人或窝点,将会看成果给予 500~10000 不等的现金奖励 |
| | | * 官方唯一指定QQ:1272154962 |
| | | ExecStart= |
| | | ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock |
| | | ``` |
| | | |
| | | #### 2.2 配置http访问 |
| | | 因为docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的时就会报错。 |
| | | 解决办法:配置`/etc/docker/daemon.json` |
| | | |
| | | ``` |
| | | [root@localhost harbor]# vi /etc/docker/daemon.json |
| | | { |
| | | "registry-mirrors": ["https://3dse7md.mirror.aliyuncs.com"] |
| | | } |
| | | ``` |
| | | |
| | | 将其修改为: |
| | | |
| | | ``` |
| | | { |
| | | "registry-mirrors": ["https://3dse7md.mirror.aliyuncs.com"], |
| | | "insecure-registries":["192.168.0.157"] |
| | | } |
| | | ``` |
| | | |
| | | ### 3. idea 连接远程 docker |
| | | ``` |
| | | 1. idea 安装 docker 插件,新版 idea 自带了 docker 插件 |
| | | 2. 配置 远程 docker 连接 |
| | | idea --->file---> 打开设置 ----> 找到build,execution,deployment 下的 docker---> |
| | | 找到 tcp socket ---> 填写连接 tcp://10.42.6.112:2375 显示连接成功即可 |
| | | 3. 配置系统 环境变量 DOCKER_HOST/tcp://10.42.6.112:2375 (有第二步可以不配) |
| | | ``` |
| | | |
| | | ### 4. 修改pom配置 |
| | | #### 4.1 修改父工程 pom |
| | | 修改镜像仓库的地址和连接的用户名密码及镜像仓库的命名空间 |
| | | |
| | | ``` |
| | | <!-- 推荐使用Harbor --> |
| | | <docker.registry.url>192.168.0.157</docker.registry.url> |
| | | <!-- docker 和镜像仓库不在一台服务器时,docker.registry.host 可以注释 --> |
| | | <docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host> |
| | | <docker.username>admin</docker.username> |
| | | <docker.password>Harbor12345</docker.password> |
| | | <docker.namespace>blade</docker.namespace> |
| | | <docker.plugin.version>1.4.13</docker.plugin.version> |
| | | ``` |
| | | |
| | | #### 4.2 在每个需要构建子项目的pom.xml下加入配置dockerfile-maven-plugin,内容可参考如下 |
| | | |
| | | ``` |
| | | <build> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>com.spotify</groupId> |
| | | <artifactId>dockerfile-maven-plugin</artifactId> |
| | | <configuration> |
| | | <username>${docker.username}</username> |
| | | <password>${docker.password}</password> |
| | | <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository> |
| | | <tag>${project.version}</tag> |
| | | <useMavenSettingsForAuth>true</useMavenSettingsForAuth> |
| | | <buildArgs> |
| | | <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> |
| | | </buildArgs> |
| | | <skip>false</skip> |
| | | </configuration> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | ``` |
| | | |
| | | ### 5. 在每个需要构建子项目的根目录下加入Dockerfile,内容可参考如下 |
| | | |
| | | #### 5.1 普通打包 |
| | | ``` |
| | | FROM bladex/alpine-java:openjdk8-openj9_cn_slim |
| | | |
| | | MAINTAINER bladejava@qq.com |
| | | |
| | | RUN mkdir -p /blade/gateway |
| | | |
| | | WORKDIR /blade/gateway |
| | | |
| | | EXPOSE 80 |
| | | |
| | | ADD ./target/blade-gateway.jar ./app.jar |
| | | |
| | | ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] |
| | | |
| | | CMD ["--spring.profiles.active=test"] |
| | | ``` |
| | | ``` |
| | | 这种方法有缺点: |
| | | |
| | | 1.镜像中的jar包是压缩文件,在容器环境中运行需要解压,造成比较大的开销 |
| | | 2.将依赖和程序都放在一个层中,更新程序后编译新的镜像效率低。一般来说,依赖是基本不变的,只需要更新程序代码。 |
| | | spring官方推荐,构建镜像时,不要直接使用压缩的jar,而应该解压后构建镜像。 |
| | | |
| | | 解压方式打包的dockerFile的编写有版本分界线:springboot-2.3,在2.3以后的版本中,可以使用spring-boot-jarmode-layertools来帮助解压构建。 |
| | | ``` |
| | | |
| | | #### 5.2 分层打包(需要springboot 版本 2.3 之后,之前也可以分层打包) |
| | | |
| | | ##### 5.2.1 springboot 版本在 2.3 之前(需先将 jar 手动解压到 target/dependency) |
| | | ``` |
| | | linux 环境解压操作 |
| | | mkdir -p target/dependency && (unzip blade-api.jar -d ./target/dependency) |
| | | ``` |
| | | |
| | | ``` |
| | | FROM dockerhub.kubekey.local/openjdk/openjdk:11 |
| | | |
| | | ARG DEPENDENCY=target/dependency |
| | | |
| | | COPY ${DEPENDENCY}/BOOT-INF/lib /opt/jar/app/lib |
| | | COPY ${DEPENDENCY}/META-INF /opt/jar/app/META-INF |
| | | COPY ${DEPENDENCY}/BOOT-INF/classes /opt/jar/app |
| | | |
| | | WORKDIR /opt/jar |
| | | |
| | | EXPOSE 82 |
| | | |
| | | ENTRYPOINT ["java", "-server", "-Xms1024m", "-Xmx1024m", "-XX:MetaspaceSize=256m", "-XX:MaxMetaspaceSize=256m", "-Xss1024k", "-Dspring.backgroundpreinitializer.ignore=true", "-Djava.security.egd=file:/dev/./urandom", "-cp", "app:app/lib/*", "org.springblade.Application"] |
| | | |
| | | ``` |
| | | |
| | | ##### 5.2.2 springboot 版本在 2.3 之后(无需手动解压) |
| | | ``` |
| | | # 指定基础镜像,这是分阶段构建的前期阶段 |
| | | FROM dockerhub.kubekey.local/openjdk/openjdk:11 as builder |
| | | # 执行工作目录 |
| | | WORKDIR application |
| | | # 配置参数 |
| | | ARG JAR_FILE=target/*.jar |
| | | # 将编译构建得到的jar文件复制到镜像空间中 |
| | | COPY ${JAR_FILE} application.jar |
| | | # 通过工具spring-boot-jarmode-layertools 从application.jar 中提取拆分后的构建结果 |
| | | RUN java -Djarmode=layertools -jar application.jar extract |
| | | |
| | | # 正式构建镜像 |
| | | FROM dockerhub.kubekey.local/openjdk/openjdk:11 |
| | | WORKDIR application |
| | | COPY --from=builder application/dependencies/ ./ |
| | | COPY --from=builder application/spring-boot-loader/ ./ |
| | | COPY --from=builder application/snapshot-dependencies/ ./ |
| | | COPY --from=builder application/application/ ./ |
| | | |
| | | EXPOSE 82 |
| | | |
| | | ENTRYPOINT ["java","-server","-Dfile.encoding=utf-8","-Xms1024m", "-Xmx1024m", "-XX:MetaspaceSize=256m", "-XX:MaxMetaspaceSize=256m", "-Xss1024k", "-Djava.security.egd=file:/dev/./urandom", "org.springframework.boot.loader.JarLauncher","--spring.profiles.active=test"] |
| | | ``` |
| | | |
| | | |
| | | ### 6. 打包和推送到镜像仓库 |
| | | ``` |
| | | 执行 mvn clean package 会镜像镜像的打包 |
| | | 执行 mvn dockerfile:push 会将当前打包的镜像推送到镜像仓库 |
| | | |
| | | 最终执行:mvn clean package && mvn dockerfile:push |
| | | ``` |
| | | |
| | | ### 7. 在工程根目录的docker-compose.yml下加入配置,内容可参考如下 |
| | | ``` |
| | | blade-gateway: |
| | | image: "${REGISTER}/blade-gateway:${TAG}" |
| | | ports: |
| | | - 80:80 |
| | | networks: |
| | | blade_net: |
| | | ipv4_address: 192.168.2.1 |
| | | ``` |
| | | |