如下所示,建议使用 Dockerfile Maven 插件,但该插件也停止维护更新了。因此先暂时使用docker-maven-plugin插件。
默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问
# 首先查看docker配置文件所在位置
systemctl status docker
# 会输出如下内容:
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-12-17 14:22:23 CST; 18min ago
Docs: http://docs.docker.com
Main PID: 25113 (dockerd)
确定docker配置文件位置在:/etc/systemd/system/docker.service
然后编辑修改docker配置文件:
vi /lib/systemd/system/docker.service
找到包含ExecStart的这行,添加如下内容:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
其中,2375端口为docker远程服务端口,包含了docker可视化工具portainer,以及远程上传镜像的功能。
编辑docker的配置文件:
vi /etc/docker/daemon.json
# 添加harbor镜像地址
{
"insecure-registries": ["192.168.0.20:81"]
}
# 后台配置重新加载
systemctl daemon-reload
# 重启docker服务
systemctl restart docker.service
# 此处可能会出现docker无法启动情况,可能是由于docker.service配置文件修改错误,重新修改一次然后重新执行上述命令即可
#查看配置的端口号(2375)是否开启(非必要)
netstat -nlpt
查看端口是否开启
#如果找不到netstat命令,使用yum install net-tools安装
[root@administrator ~]# netstat -antp | grep dockerd
tcp6 0 0 :::2375 :::* LISTEN 4514/dockerd
直接curl看是否生效,测试通过localhost是否能使用Docker Engine API
curl http://127.0.0.1:2375/info
curl http://localhost:2375/version
访问:http://ip:2375/version测试远程能否通过主机IP使用Docker Engine API
在maven的配置文件中,添加harbor私服的用户名及密码:
harbor
harbor
123456
[email protected]
添加属性配置,属性配置,在后面的插件配置里有引用这个:
192.168.10.11:81
test
org.apache.maven.plugins
maven-resources-plugin
UTF-8
org.apache.maven.plugins
maven-source-plugin
attach-sources
jar
maven-compiler-plugin
11
UTF-8
org.apache.maven.plugins
maven-dependency-plugin
copy-dependencies
package
copy-dependencies
${project.build.directory}/lib
false
false
true
org.apache.maven.plugins
maven-jar-plugin
true
lib/
org.fiend.SpringBootDockerApp
false
com.spotify
docker-maven-plugin
1.2.2
build-image
package
build
harbor
http://${docker.repostory}
http://192.168.31.133:2375
k8s-harbor:10001/my-project/openjdk11:jre-11.0.12_7-alpine
${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}
${project.version}
/home
["java", "-version"]
["java", "-jar", "-Xms896m", "-Xmx896m", "${project.build.finalName}.jar"]
/home
${project.build.directory}
${project.build.finalName}.jar
/home/lib
${project.build.directory}/lib
接下来只要先点击clean清除之前的所有打包的文件,然后再点击package打包文件即可完成镜像的构建,真正的一键部署
由于将
如果要将镜像推送至Harbor仓库,执行docker:push命令:
删除docker镜像命令(不是删除Harbor中的镜像), docker:removeImage:
重新构建镜像时,记得先执行此命令,删除原来的镜像。
到此镜像构建成功,接下来使用Idea的Docker插件,创建容器跑起来(或者去Docker机器执行命令行)
通过ip访问
此种方式,直接通过Maven的package命令,即可实现镜像的制作,但是要推送镜像到harbor私服,还需执行docker:push,即:
点击push,将镜像推送到harbor私服中
com.spotify
docker-maven-plugin
1.0.0
my-hub
http://${docker.repostory}
http://192.168.10.11:2375
${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}
${basedir}/
/ROOT
${project.build.directory}
${pack-name}
那么Dockerfile文件中的jar包名相应需要修改:
FROM java:8
WORKDIR /ROOT
ADD /ROOT/demo1-2.jar /ROOT/
ENTRYPOINT ["java", "-jar", "demo1-2.jar"]
点击pakage打包,target 上生成了springboot工程的jar包
完了之后,点击docker bulid 构建工程镜像
然后点击push,将镜像推送到harbor私服中
此部分内容参考:
docker-maven-plugin
不仅可以操作镜像,还可以操作容器,比如我们以前需要使用如下Docker命令来运行容器;docker run -p 8080:8080 —name mall-tiny-fabric \
—link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-fabric/logs:/var/logs \
-d 192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT
节点下添加
节点可以定义容器启动的行为:
${project.artifactId}
8600:8600
docker:start
命令即可启动了;# mvn docker:start
[root@linux-local mydata]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ce77c0394b 192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT “java -jar /mall-tin…” 32 seconds ago Up 31 seconds 0.0.0.0:8080->8080/tcp mall-tiny-fabric
docker:stop
命令即可;mvn docker:stop
docker:remove
命令,是不是很方便!mvn docker:remove