idea配置docker打包Springboot项目
第一步:Docker 开放远程 API 接口
编辑docker守护进程的配置文件/lib/systemd/system/docker.service,找到运行主命令的那一行,其内容大致为"ExecStart=/usr/bin/dockerd -H fd:// … "的那一行,添加
-H tcp://0.0.0.0:2375,意思是在 2375 端口开放 API 访问。
然后运行下面命令重新加载运行:
sudo systemctl daemon-reload # 重新加载守护进程配置
sudo systemctl restart docker.service # 重启 docker 服务
这样就直接可以访问了 http://{ip}:2375/version
第二步:POM中配置maven插件
<!--使用docker-maven-plugin插件--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <!--将插件绑定在某个phase执行--> <executions> <execution> <id>build-image</id> <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build--> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--指定生成的镜像名,这里任意起,我这里是仓库地址+项目名,便于后面push到镜像仓库--> <imageName>124.220.1.37:5000/${project.artifactId}</imageName> <!--指定标签 这里指定的是镜像的版本,我们默认版本是latest--> <imageTags> <imageTag>latest</imageTag> </imageTags> <!-- 指定我们项目中Dockerfile文件的路径--> <dockerDirectory>${project.basedir}</dockerDirectory> <!--指定远程docker 地址,这里需要开启docker的tcp远程访问--> <dockerHost>http://192.168.12.223:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar包所在的路径 此处配置的即对应项目中target目录--> <directory>${project.build.directory}</directory> <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
第三步:maven打包
如果成功,docker中就会有该镜像。万事大吉,忽略后面操作。
不出意外会报错:An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates
异常的意思是:pom配置中指定的<dockerHost>得是https的。并且要指定证书地址
第四步:给第一步中docker开放接口配置证书
找个文件夹,依次执行下面的命令生成证书文件,我这里放在/root/.docker/cert下面的,途中需要设置些证书密码、基本信息什么的,证书密码请谨慎填写,后续命令需要用到
openssl genrsa -aes256 -out ca-key.pem 4096 openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem openssl genrsa -out server-key.pem 4096 openssl req -sha256 -new -key server-key.pem -out server.csr openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem openssl genrsa -out key.pem 4096 openssl req -new -key key.pem -out client.csr openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem rm -v client.csr server.csr chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem
接着编辑/lib/systemd/system/docker.service文件
在相同的位置添加:
--tlsverify --tlscacert=/root/.docker/cert/ca.pem --tlscert=/root/.docker/cert/server-cert.pem --tlskey=/root/.docker/cert/server-key.pem
最终为这样:
注意下这里的证书的文件夹是否正确
保存然后重启docker
sudo systemctl daemon-reload # 重新加载守护进程配置
sudo systemctl restart docker.service # 重启 docker 服务
第五步:再次修改POM文件
<!--指定远程docker 地址,--> <dockerHost>https://192.168.12.223:2375</dockerHost> <!--指定docker的证书文件路径--> <dockerCertPath>C:\Users\yaohy\Desktop\fsdownload\dockercert</dockerCertPath>
注意 dockerHost 改为https;dockerCertPath为证书文件路径,就是刚刚生成的证书,从服务器上下载下来即可。
到这里再执行maven打包,不出意外就成功了,反正我是成功了。
如果再报错请自行解决(°▽°)