linux可以使用find / -name settings.xml)加入以下配置<servers>
<server>
<id>192.168.0.157</id>
<username>admin</username>
<password>Harbor12345</password>
<configuration>
<email>smallchill@163.com</email>
</configuration>
</server>
</servers>
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
如果没有远程访问,会报 Connect to 192.168.0.157:2375 [/192.168.0.157] failed: Connection refused: connect
在/usr/lib/systemd/system/docker.service,配置远程访问。主要是在[Service]这个部分,加上下面两个参数:
cd /usr/lib/systemd/system
vi docker.service
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
因为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"]
}
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
修改镜像仓库的地址和连接的用户名密码及镜像仓库的命名空间
<!-- 推荐使用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>
<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>
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来帮助解压构建。
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"]
# 指定基础镜像,这是分阶段构建的前期阶段
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"]
执行 mvn clean package 会镜像镜像的打包
执行 mvn dockerfile:push 会将当前打包的镜像推送到镜像仓库
最终执行:mvn clean package && mvn dockerfile:push
blade-gateway:
image: "${REGISTER}/blade-gateway:${TAG}"
ports:
- 80:80
networks:
blade_net:
ipv4_address: 192.168.2.1