From 2cba01a6b6f67cfa97d0c4e0cc589302fab817ba Mon Sep 17 00:00:00 2001
From: aix <vip_xiaobin810@163.com>
Date: Wed, 24 Jul 2024 11:41:37 +0800
Subject: [PATCH] 查询有变形水库
---
skjcmanager/doc/docker/README.md | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 107 insertions(+), 6 deletions(-)
diff --git a/skjcmanager/doc/docker/README.md b/skjcmanager/doc/docker/README.md
index fca904c..638afaa 100644
--- a/skjcmanager/doc/docker/README.md
+++ b/skjcmanager/doc/docker/README.md
@@ -1,4 +1,4 @@
-#使用docker构建工程步骤
+#idea使用docker构建工程步骤
### 1. 使用harbor作为私有库,需要配置maven,找到setting.xml( `linux可以使用find / -name settings.xml`)加入以下配置
```
@@ -18,8 +18,8 @@
</pluginGroups>
```
-### 2. docker开启远程访问
-
+### 2. docker开启远程访问和配置http访问
+#### 2.1 docker开启远程访问
如果没有远程访问,会报 `Connect to 192.168.0.157:2375 [/192.168.0.157] failed: Connection refused: connect`
在`/usr/lib/systemd/system/docker.service`,配置远程访问。主要是在[Service]这个部分,加上下面两个参数:
@@ -31,9 +31,13 @@
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
+
+注意: 该处可能会导致 idea 一直向远程 docker 发起请求(非常密集,攻击服务器),服务器会发出告警,如非必要,不要去开启
+Docker API 未授权访问漏洞
+解决方法可以查看:https://blog.51cto.com/u_16099228/6326954
```
-### 3. 配置http访问
+#### 2.2 配置http访问
因为docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的时就会报错。
解决办法:配置`/etc/docker/daemon.json`
@@ -53,7 +57,33 @@
}
```
-### 4. 在每个需要构建子项目的pom.xml下加入配置,内容可参考如下
+### 3. idea 连接远程 docker
+```
+1. idea 安装 docker 插件,新版 idea 自带了 docker 插件
+2. 配置 远程 docker 连接
+idea --->file---> 打开设置 ----> 找到build,execution,deployment 下的 docker--->
+找到 tcp socket ---> 填写连接 tcp://10.42.6.112:2375 显示连接成功即可
+注意: 该处可能会导致 idea 一直向远程 docker 发起请求(非常密集,攻击服务器),服务器会发出告警
+Docker API 未授权访问漏洞
+解决方法可以查看:https://blog.51cto.com/u_16099228/6326954
+```
+
+### 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>
@@ -79,6 +109,7 @@
### 5. 在每个需要构建子项目的根目录下加入Dockerfile,内容可参考如下
+#### 5.1 普通打包
```
FROM bladex/alpine-java:openjdk8-openj9_cn_slim
@@ -96,8 +127,77 @@
CMD ["--spring.profiles.active=test"]
```
+```
+这种方法有缺点:
-### 6. 在工程根目录的docker-compose.yml下加入配置,内容可参考如下
+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}"
@@ -107,3 +207,4 @@
blade_net:
ipv4_address: 192.168.2.1
```
+
--
Gitblit v1.9.3