本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程。
Docker安装及常用命令参考: https://blog.csdn.net/sinat_42327690/article/details/93160233
1.搭建私有仓库
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
如果遇到镜像下载不下来的情况,需要修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值,然后重启docker服务:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
2.Docker开启远程API(配置远程访问)
修改配置文件/usr/lib/systemd/system/docker.service,配置远程访问
用vim编辑器修改docker.service文件
vi /usr/lib/systemd/system/docker.service
需要修改的部分:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改后的部分:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
docker重新读取配置文件,重新启动docker服务
systemctl daemon-reload
systemctl restart docker
查看是否开起docker守护线程监听
[root@localhost ~]# ps -ef|grep docker
root 4022 1 0 14:46 ? 00:00:26 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
3.maven中添加插件
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<dockerHost>http://192.168.31.203:2375</dockerHost>
<imageName>192.168.31.203:5000/${project.build.finalName}:${project.version}</imageName>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<exposes>1111</exposes>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<forceTags> true</forceTags>
</configuration>
</plugin>
</plugins>
相关配置说明:
executions.execution.phase:此处配置了在maven打包应用时构建docker镜像;
imageName:用于指定镜像名称,192.168.31.203:5000是仓库名称,{project.build.finalName}为镜像名称,${project.version}为镜像版本号;
dockerHost:打包后上传到的docker服务器地址;
baseImage:该应用所依赖的基础镜像,此处为java;
entryPoint:docker容器启动时执行的命令;
resources.resource.targetPath:将打包后的资源文件复制到该目录;
resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
resources.resource.include:需要复制的文件,打包好的应用jar包。
注意:
1.必须配置dockerHost标签
(除非配置系统环境变量DOCKER_HOST=tcp://192.168.5.129:2375)否则默认访问的是127.0.0.1:2375
2.imageName标签中不能以http或者其他网络协议开头,如果设置maven打包时会报错!
3…使用下面配置后imageName标签中可以以http开头
让Docker支持http上传镜像(配置后重启docker)
echo '{ "insecure-registries":["192.168.3.101:5000"] }' >/etc/docker/daemon.json
3.端口2375是docker守护线程的端口,编译时必须要获取该docker一些版本信息
4.端口5000是registry私有仓库的访问端口
4.构建docker并推送到私有仓库
执行以下命令
mvn clean package docker:buid
或者双击package
构建成功后查看docker中的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:5000/aisino-admin latest af8650dc2d22 28 hours ago 800MB
registry 2 f32a97de94e1 3 months ago 25.8MB
最后新建并启动容器
docker run -p 8080:8080 -d 127.0.0.1:5000/aisino-admin:latest