概述
Docker系列:
Docker系列(一): docker介绍&&安装(含离线安装)
Docker系列(二): 搭建docker镜像仓库-Nexus、Harbor
Docker系列(三):Idea使用docker打包和发布springboot项目
目录
一、配置Docker Remote Api
(一)、设置hostname
(二)、生成TLS证书
①创建生成证书脚本
②执行脚本生成整数
(三)、配置docker启用TLS
(四)、测试docker remote api
①不指定证书访问
②指定证书访问
二、Idea集成docker
(一)、下载证书
(二)、idea连接docker配置
①修改windows的hosts文件
②修改idea配置
三、打包和发布springboot项目
(一)、打包springboot项目
①定义一个简单的springboot项目
②添加打包插件
③编写Dockerfile
④打包
(二)、发布springboot项目
一、配置Docker Remote Api
Docker Remote Api允许使用者远程调用docker服务,所以想要idea集成docker环境,必须首先配置 Docker Remote Api
(一)、设置hostname
hostnamectl set-hostname dockerremoteapi
(二)、生成TLS证书
①创建生成证书脚本
mkdir -p /script /data/cert/docker && vi /script/cert.sh
其中cert.sh脚本文件的内容为
#!/bin/bash
set -e
if [ -z $1 ];then
echo "请输入Docker服务器主机名"
exit 0
fi
HOST=$1
mkdir -p /data/cert/docker
cd /data/cert/docker
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
# 配置白名单,推荐配置0.0.0.0,允许所有IP连接但只有证书才可以连接成功
echo subjectAltName = DNS:$HOST,IP:0.0.0.0 > extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
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
②执行脚本生成整数
# dockerremoteapi是主机的hostname
sh /script/cert.sh dockerremoteapi
如下图所示几处红框中都填写同样的密码即可,其他可不填
(三)、配置docker启用TLS
vi /usr/lib/systemd/system/docker.service
下图中红色框部分为修改后的最后效果,其他地方不用改
红色框中的配置为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
--tlsverify --tlscacert=/data/cert/docker/ca.pem
--tlscert=/data/cert/docker/server-cert.pem
--tlskey=/data/cert/docker/server-key.pem
重启docker服务
systemctl daemon-reload && systemctl restart docker
(四)、测试docker remote api
①不指定证书访问
# dockerremoteapi为主机hostname
curl https://dockerremoteapi:2375/info
②指定证书访问
# dockerremoteapi为主机hostname
curl https://dockerremoteapi:2375/info --cert /data/cert/docker/cert.pem --key /data/cert/docker/key.pem --cacert /data/cert/docker/ca.pem
可以看到可以调用docker remote api了
二、Idea集成docker
(一)、下载证书
将客户端所需的ca.pem、cert.pem、key.pem 这3个密钥文件从服务器下载到本地
(二)、idea连接docker配置
①修改windows的hosts文件
位于C:WindowsSystem32driversetc目录下的hosts文件
追加一条: 192.168.1.119 dockerremoteapi
②修改idea配置
成功之后即可在service栏中看到刚添加docker remote api服务
三、打包和发布springboot项目
(一)、打包springboot项目
①定义一个简单的springboot项目
添加了swagger页面,测试调用没有问题
②添加打包插件
springboot的pom文件添加打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--加入下面两项配置 否则jar包提示无主属性清单-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!--docker-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<!--当执行mvn deploy的时候自动执行 mvn docker:push-image,也就是docker 推动镜像操作,注意这里前提是已经docker已经打好tag,参考上面注释部分-->
<execution>
<id>push-image</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>192.168.1.119:8082/${project.artifactId}:${project.version}</imageName>
</configuration>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名-->
<imageName>192.168.1.119:8082/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!--指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>https://dockerremoteapi:2375</dockerHost>
<!-- 指定tls证书的目录 -->
<dockerCertPath>D:datacertdocker</dockerCertPath>
<!--这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!--需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!--docker登录nexus秘钥配置(在maven的配置文件中的server标签内)-->
<serverId>nexus-docker</serverId>
</configuration>
</plugin>
</plugins>
</build>
上面配置中注意不要写错仓库的地址,以及还需要在maven中配置登录到仓库的秘钥
<!-- docker push nexus认证 -->
<server>
<id>nexus-docker</id>
<username>admin</username>
<password>qq245700</password>
</server>
③编写Dockerfile
在编写Dockerfile之前,先给idea装上docker插件,必须要装
在springboot的resources目录下新建docker目录,并新建Dockerfile文件,文件内容为
FROM java:8
VOLUME /tmp
# simple-test-1.0.0.jar为项目打包为jar包的名字,simple-test.jar为别名
ADD simple-test-1.0.0.jar simple-test.jar
#运行的时候对外提供的端口默认是8081
EXPOSE 8080
ENTRYPOINT ["java","-jar","/simple-test.jar"]
关于Dockerfile可以参考:Docker Dockerfile|菜鸟教程
④打包
根据pom文件中的配置,只要执行mvn install命令即可自动打包成镜像并上传nexus仓库中
(二)、发布springboot项目
我们的springboot项目打包的镜像已经打包并上传到了nexus,同时docker remote api所在主机上也已经有了我们的springboot镜像,这里我们就在此主机上运行我们的镜像
打开service栏,并打开docker remote api所在主机
可以看到我们的springboot项目镜像在存在上面
要运行镜像我们需要一个容器,所以先创建一个容器
详细参数按照下图中填写即可
配置完成之后我们点击Run按钮即可开始运行容器并启动springboot服务
容器build日志
springboot服务启动日志
访问测试
写在最后:
这里我们的应用打包好了,也上传到仓库了,那么以后我们就可以在任意docker环境下启动,甚至是在部署了Kubernetes(k8s)环境后,通过k8s来分布式部署我们的应用服务,这个我们后面再讲
最后
以上就是能干手链为你收集整理的Docker系列(三):Idea使用docker打包和发布springboot项目一、配置Docker Remote Api二、Idea集成docker三、打包和发布springboot项目的全部内容,希望文章能够帮你解决Docker系列(三):Idea使用docker打包和发布springboot项目一、配置Docker Remote Api二、Idea集成docker三、打包和发布springboot项目所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复