最近又发现了一款好用的Maven插件,fabric8io出品的
docker-maven-plugin
,可以把SpringBoot应用方便的部署到Docker容器中去。该插件可以实现打包镜像、推送到镜像仓库、运行应用等一系列操作,本文将对其用法进行详细介绍,希望对大家有所帮助!
安装私有镜像仓库
由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。
-
下载Registry的Docker镜像;
docker pull registry:2
-
使用Docker容器运行Registry服务,需要添加环境变量
REGISTRY_STORAGE_DELETE_ENABLED=true
开启删除镜像的功能;docker run -p 5000:5000 --name registry2 \ --restart=always \ -e REGISTRY_STORAGE_DELETE_ENABLED="true" \ -d registry:2
修改Docker Daemon的配置文件,文件位置为
/etc/docker/daemon.json
{ "insecure-registries": ["192.168.85.128:5000"] }
打开docker 2375端口
vi /usr/lib/systemd/system/docker.service 在ExecStart=/usr/bin/dockerd 后插入 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重启Docker服务
systemctl daemon-reload && systemctl restart docker
镜像仓库可视化
由于私有镜像仓库管理比较麻烦,而
docker-registry-ui
有专门的页面可以方便地管理镜像,所以我们安装它来管理私有镜像仓库。
-
下载
docker-registry-ui
的Docker镜像;docker pull joxit/docker-registry-ui:static
-
使用Docker容器运行
docker-registry-ui
服务;docker run -p 8280:80 --name registry-ui \ --link registry2:registry2 \ -e REGISTRY_URL="http://registry2:5000" \ -e DELETE_IMAGES="true" \ -e REGISTRY_TITLE="Registry2" \ -d joxit/docker-registry-ui:static
我们先来试试私有镜像仓库是否可用,首先下载一个测试用的镜像
busybox
docker pull busybox
给镜像
busybox
打上私有仓库的标签,并设置版本为v1.0
docker tag busybox 192.168.3.101:5000/busybox:v1.0
之后推送到私有镜像仓库去;
docker push 192.168.3.101:5000/busybox:v1.0
-
访问
docker-registry-ui
管理界面,即可查看到busybox
镜像,地址:http://192.168.3.101:8280idea中使用maven插件进行打包
<build> <plugins> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.33.0</version> <configuration> <!-- Docker 远程管理地址--> <dockerHost>http://192.168.85.128:2375</dockerHost> <!-- Docker 推送镜像仓库地址--> <pushRegistry>http://192.168.85.128:5000</pushRegistry> <images> <image> <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址--> <name>192.168.85.128:5000/mall/${project.name}:${project.version}</name> <!--定义镜像构建行为--> <build> <!--定义基础镜像--> <from>java:8</from> <args> <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </args> <!--定义哪些文件拷贝到容器中--> <assembly> <!--定义拷贝到容器的目录--> <targetDir>/</targetDir> <!--只拷贝生成的jar包--> <descriptorRef>artifact</descriptorRef> </assembly> <!--定义容器启动命令--> <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint> <!--定义维护者--> <maintainer>macrozheng</maintainer> </build> </image> </images> </configuration> </plugin> </plugins> </build>
-
首先mvn clean package
-
mvn package docker:build