本教程需要一台已安装了openjdk:8的docker的服务器,安装方法可以查看上一篇教程《天宫使用教程1 - docker安装与基础镜像下载》
springboot项目有3种打包方式,分别是:
- Linux系统下的打包
- idea的插件docker integration进行打包
- 使用docker官方的maven插件进行打包
1. Dockerfile编写
打包docker镜像之前,先准备好springboot的部署包tiangongdemo.jar和Dockerfile文件。dockerfile文件内容如下:
#在上一篇教程下载的openjdk:8-alpine镜像基础上,进行打包
FROM openjdk:8-alpine
#将tiangong-demo-0.0.1.jar放到基础镜像的根目录,并命名为hello.jar
ADD tiangong-demo-0.0.1.jar /hello.jar
#设置容器的时区,基础镜像的时区是GMT
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#启动容器之后,执行java -jar /hello.jar 命令
ENTRYPOINT ["java","-jar","/hello.jar"]
2. Centos下docker镜像打包
Centos环境打包docker镜像是最基础的操作,所有开发都应该掌握这个知识。
将准备好的tiangong-demo-0.0.1.jar和Dockerfile上传到服务器的同一目录下,这里我们将文件上传到了/docker-build 文件夹
[root@local docker-build]# ll
-rw-r--r--. 1 root root 18684063 May 22 14:46 tiangong-demo-0.0.1-SNAPSHOT.jar
-rw-r--r--. 1 root root 109 May 21 15:05 tiangong-demo-dockerfile
#用docker build命令对docker镜像进行打包
[root@local docker-build]# docker build -t tiangongdemo:0.0.1 . -f tiangong-demo-dockerfile
Sending build context to Docker daemon 18.69 MB
Step 1/3 : FROM openjdk:8-alpine
---> a3562aa0b991
Step 2/3 : ADD tiangong-demo-0.0.1-SNAPSHOT.jar hello.jar
---> 0e7c6948b3f0
Removing intermediate container 8e2bcdd301db
Step 3/3 : ENTRYPOINT java -jar /hello.jar
---> Running in 682bdb19b809
---> c67dc7dcdc94
Removing intermediate container 682bdb19b809
Successfully built c67dc7dcdc94
docker build 命令解释:
-t 输入镜像的tag
-f 指定使用哪个Dockerfile文件
注意 tiangongdemo:0.0.1后面有个符号 . 代表当前目录
#查看docker镜像,此时已经多了一个新的镜像
[root@local docker-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tiangongdemo 0.0.1 c67dc7dcdc94 4 seconds ago 124 MB
docker.io/openjdk 8-alpine a3562aa0b991 12 months ago 105 MB
引申知识点:如果此时再次执行docker build命令,images里面会出现相同id的image
#修改tag,但是jar包和Dockerfile不变,再次执行docker build
[root@local docker-build]# docker build -t tiangongdemo:0.0.2 . -f tiangong-demo-dockerfile
Sending build context to Docker daemon 18.69 MB
Step 1/3 : FROM openjdk:8-alpine
---> a3562aa0b991
Step 2/3 : ADD tiangong-demo-0.0.1-SNAPSHOT.jar hello.jar
---> Using cache
---> 0e7c6948b3f0
Step 3/3 : ENTRYPOINT java -jar /hello.jar
---> Using cache
---> c67dc7dcdc94
Successfully built c67dc7dcdc94
#此时出现了2个id=c67dc7dcdc94的docker镜像,感兴趣的话可以自己去了解image id生成原理
[root@local docker-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
taingongdemo 0.0.1 c67dc7dcdc94 About a minute ago 124 MB
tiangongdemo 0.0.2 c67dc7dcdc94 About a minute ago 124 MB
docker.io/openjdk 8-alpine a3562aa0b991 12 months ago 105 MB
3. idea插件或者maven插件打包镜像,需要开启Docker Remote API
docker remote api提供了与Docker守护进程进行集成的功能。开启remote api之后,用户可以远程进行docker镜像打包。
增加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \ 重启docker
[root@local ~]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES
#重启docker
#重新加载配置文件
[root@local ~]# systemctl daemon-reload
#重启服务
[root@local ~]# systemctl restart docker.service
#查看端口是否开启
[root@local ~]# netstat -nlpt
#curl看是否生效
[root@local ~]# curl http://127.0.0.1:2375/info
开启api之后,记得打开防火墙
#在防火墙打开docker api端口:
[root@local ~]# firewall-cmd --zone=public --add-port=2375/tcp --permanent
#reaload 防火墙规则:
[root@local ~]# firewall-cmd --reload
4.idea的插件docker integration进行打包
打开idea的File->Settings->Plugins,如下图顺序搜索docker,安装idea的docker插件。
安装好之后,在Settings里面搜索docker,可以看到以下界面,按照顺序配置docker的api地址。如果网络通,可以看到Connection successful的提示。
配置好api之后,可以在左下角找到docker控制台,点击绿色的运行键之后,看到刚才创建的两个tiangongdemo镜像。
在springboot的项目根目录下(可以任意路径),创建文件夹docker(可以任意命名)。将打包好的jar包和Dockerfile文件放置在该目录下。Dockerfile文件内容和上文一致。
此时可以利用idea的docker插件打包镜像,首先编写docker插件的运行配置,实际上就是配置docker build的参数。
注意不要配置容器运行参数,因为在idea插件运行容器,没有在Linux上运行容器好,也看不到容器出错日志。
配置好docker build参数后,点击运行按钮,开始创建docker镜像。
创建docker镜像的执行日志在控制台输出,日志和centos执行docker build是一样的。左侧可以看到刚刚创建的tiangongdemo:0.0.4镜像。
如果细心点会发现,右侧有properties按钮,点击按钮发现看到image id其实是一串很长的sha256的id,看到这里可以为大致猜到为什么0.0.1和0.0.2的镜像id一致了。
右键点击镜像,可以对镜像进行删除等操作。
5.maven的插件镜像打包
目前可以搜索到的docker maven插件有以下3个,大家可以去官网看看如何使用,或者参考网上教程。建议优先使用idea的插件。
插件名称 | 官方地址 |
docker-maven-plugin | |
docker-maven-plugin | |
docker-maven-plugin |