IDEA快速部署Spring Boot 项目到Docker的实现方法
作者:结构化思维wz
一、IDEA 连接 Docker
我们通常使用TCP的方式连接Docker,所以我们需要配置Docker并开放端口,如果是本地虚拟机,可以简单使用http的方式进行连接(不建议),如果你是远程服务器,请务必采用安全的连接方式(https);
自己的虚拟机
如果是自己的虚拟机,可以不需要创建CA证书。可以使用http://ip:端口号
的形式连接。
:one: 编辑docker.service文件
vim /usr/lib/systemd/system/docker.service
找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375
这样相当于对外开放的是 2375 端口,当然也可以根据自己情况修改成其他的。
:two: 重新加载Docker配置生效
systemctl daemon-reload systemctl restart docker
:three: 测试是否能访问
#浏览器访问 ip:2375/vsersion
如果访问成功证明已配置成功。
如果无妨访问,请检查防火墙是否开放2375端口:
#查看防火墙开放列表 firewall-cmd --list-ports #增加2375端口 firewall-cmd --zone=public --add-port=2375/tcp --permanent #重启防火墙 firewall-cmd --reload
:four: 通过IDEA连接
远程服务器
**如果是远程服务器,一定要创建CA证书。**使用https://ip:端口号
的形式连接。(否则你的Docekr任何人都可以推送镜像,分分钟取挖矿)
下面我将命令都抽离出来,方便运行。[ip]
替换为你的服务器ip
(如果想看更详细的分步骤运行,请看[这篇文章](Docker开启远程安全访问),但是注意其中5.2章节的一个错误:extfile.cnf 这里不能用官方给的,不要DNS)
#1、创建CA私钥和CA公钥 mkdir -p /usr/local/ca cd /usr/local/ca #2.然后在Docker守护程序的主机上,生成CA私钥和公钥:执行完后,这里会要我们输入密码,请牢记,例如我这里输入wang123 openssl genrsa -aes256 -out ca-key.pem 4096 #3.补全CA证书信息,执行后需要输入,访问密码、国家、省、市、组织名称、单位名称、CommonName、邮箱等 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem #4.生成server-key.pem openssl genrsa -out server-key.pem 4096 #5.用CA签署公钥: openssl req -subj "/CN=[ip]" -sha256 -new -key server-key.pem -out server.csr #6.匹配白名单,允许指定的ip可以连接到服务器中的docker,这里允许所有携带ca的ip echo subjectAltName = IP:[ip],IP:0.0.0.0 >> extfile.cnf #7.将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证: echo extendedKeyUsage = serverAuth >> extfile.cnf #8.生成签名证书,执行完后需要输入密码,上面我们设置的密码(wang123) openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -extfile extfile.cnf #9. 生成客户端的key.pem openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr #10.使秘钥适合客户端身份验证 echo extendedKeyUsage = clientAuth >> extfile.cnf echo extendedKeyUsage = clientAuth > extfile-client.cnf #11.生成签名证书,执行完后需要输入密码 openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile-client.cnf #12.删除不需要的文件 rm -v client.csr server.csr extfile.cnf extfile-client.cnf #13.设置权限 chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem #14.归集服务器证书 cp server-*.pem /etc/docker/ cp ca.pem /etc/docker/
创建完证书之后,我们需要修改Docker配置:
#使Docker守护程序仅接收来自提供CA信任的证书的客户端的链接 vim /lib/systemd/system/docker.service
将 ExecStart
属性值进行替换:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock复制代码
重新加载daemon并重启docker
systemctl daemon-reload systemctl restart docker
注意,请检查防火墙和安全组是否都开放了此端口:2375
然后将ca证书下载到本地:
配置完就可以取IDEA的Docker中进行配置:
二、Maven插件与Dockerfile
docker-maven-plugin
我们IDEA已经可以连接Docker,我们想在package的时候,把打包镜像推送到Docker当中,我们需要配置Maven插件:
<plugin><!--制作docker镜像的maven插件--> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>${project.artifactId}</imageName><!--镜像名--> <imageTags> <imageTag>latest</imageTag> </imageTags> <dockerCertPath>./ca</dockerCertPath><!--证书所在的目录--> <dockerDirectory>${project.basedir}</dockerDirectory><!--Dockerfile所在的目录--> <dockerHost>https://ip:2375</dockerHost><!--docker所在的宿主机地址--> <resources> <resource><!--这里配置的就是打包后jar所在的位置--> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
Dockerfile
FROM java:8 #作者 MAINTAINER wangze #挂在 VOLUME /tmp #将jar包添加到容器中并更名 ADD project-manage-service-0.0.1-SNAPSHOT.jar pms.jar #运行jar RUN bash -c 'touch /pms.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/pms.jar"]
三、项目打包上传镜像
当我们执行package
操作后,会自动将jar包作为image上传到Docker中:
可以在IDEA右下角的服务中,找到Docker连接,查看镜像
四、容器的创建与运行
容器的创建
先找到刚才打包的镜像:
然后右键创建一个容器:
这里端口格式为:主机端口:容器端口
例如你的项目在容器中是8080端口,你主机的8080已经被占用,你可以这样写:
#访问的时候 http://ip:8090/ 8090:8080
运行容器,我们可以看到对应的日志:
环境的检查
首先检查服务器的防火墙:
firewall-cmd --list-ports
如果主机端口没有开放,则开放防火墙:
firewall-cmd --zone=public --add-port=8090/tcp --permanent #重启防火墙 firewall-cmd --reload
PS: 如果是远程服务器,记得配置安全组
访问项目检验
访问项目的地址,可以正常访问,即为成功发布
参考文章:
到此这篇关于IDEA快速部署Spring Boot 项目到Docker的实现方法的文章就介绍到这了,更多相关IDEA部署Spring Boot到Docker内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- 在Idea中使用Docker部署SpringBoot项目的详细步骤
- java通过Idea远程一键部署springboot到Docker详解
- 浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)
- idea快速实现将SpringBoot项目打包Docker镜像并部署
- 基于idea把springboot项目部署到docker
- IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
- IDEA 通过docker插件发布springboot项目的详细教程
- idea整合docker快速部署springboot应用的详细过程
- IDEA通过Docker插件部署SpringBoot项目的过程详解
- IDEA集成docker部署springboot项目的全过程