Docker部署、镜像推送至Docker Hub、拉取、运行
Docker部署
1、首先需要通过Maven将项目打包可在本地运行的jar包
2、新建Dockerfile文件【直接New File–》输入DockerFile便能建立】,为了方便后续操作,本文将Dockerfile文件建立target文件夹下
Dockerfile文件内容
# Docker image for springboot file run
# VERSION 0.0.1
# Author: silentwu
# 基础镜像使用java
#### 打包代码
FROM java:8
# 作者
MAINTAINER silentwu <silentwbz@163.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为vorcsbine.jar
ADD vorcsbine.jar /vorcsbine.jar
# 运行jar包
# RUN bash -c 'touch /vorcsbine.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/vorcsbine.jar"]
文件内容解释
VOLUME /tmp
可选项,VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。如若设计到文件相关操作,需要设置本配置项,/tmp目录用于存储Docker数据文件。
ADD vorcsbine.jar /vorcsbine.jar
将jar包添加到容器中并更名为vorcsbine.jar,根据你当前jar包路径设置即可。
ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/vorcsbine.jar"]
因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录,项目的 jar 文件作为“vorcsbine.jar” 添加到容器的ENTRYPOINT 执行项目 vorcsbine.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source。如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了
制作镜像
wubaozhangdeMacBook-Pro:target wubaozhang$ docker build -t vorcsbine .
Sending build context to Docker daemon 1.528GB
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER silentwu <silentwbz@163.com>
---> Running in 757cd8cf3511
Removing intermediate container 757cd8cf3511
---> a260f535e5e6
Step 3/5 : VOLUME /tmp
---> Running in 6338f383b1b7
Removing intermediate container 6338f383b1b7
---> de97b5525493
Step 4/5 : ADD vorcsbine.jar /vorcsbine.jar
---> 6fe2feaa8aba
Step 5/5 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/vorcsbine.jar"]
---> Running in b5337a432769
Removing intermediate container b5337a432769
---> 90f6886714ad
Successfully built 90f6886714ad
Successfully tagged vorcsbine:latest
设置镜像名为vorcsbine,默认的镜像版本为latest
查看镜像
wubaozhangdeMacBook-Pro:target wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad 2 minutes ago 1.17GB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
本地运行镜像
wubaozhangdeMacBook-Pro:target wubaozhang$ docker run -d -p 8090:8090 vorcsbine
4c0aaf6a919f21163b7794eb6af699991f4e7d7d50523c2ed765dad724ed40f2
-d 表示后台运行,-p 用于映射端口 vorcsbine是镜像名
使用docker run 命令每次会创建一个新的容器实例,一个镜像可对应多个容器实例,我们可以通过设置不同端口来实现(这里再创建两个容器实例进行运行)
wubaozhangdeMacBook-Pro:target wubaozhang$ docker run -d -p 8091:8090 vorcsbine
e2c349054bc5ed9a87111e9d24f86bc40ac74d6325b82c93dcb092a546365dea
wubaozhangdeMacBook-Pro:target wubaozhang$ docker run -d -p 8092:8090 vorcsbine
78212d6e55ec4776f0b58e51153604576527de346f7807b02da43a5dc17d9f45
使用docker ps命令来查看运行中的容器 使用docker ps -a命令来查看所有容器,包含没运行的容器实例
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78212d6e55ec vorcsbine "java -Djava.securit…" 5 minutes ago Up 5 minutes 0.0.0.0:8092->8090/tcp nifty_fermi
e2c349054bc5 vorcsbine "java -Djava.securit…" 5 minutes ago Up 5 minutes 0.0.0.0:8091->8090/tcp reverent_heyrovsky
4c0aaf6a919f vorcsbine "java -Djava.securit…" 9 minutes ago Up 9 minutes 0.0.0.0:8090->8090/tcp inspiring_bassi
本地有三个端口映射到了Docker的8090端口,这也意味着我们可以使用这三个端口去访问应用。
http://localhost:8090/vorcsbine/
http://localhost:8091/vorcsbine/
http://localhost:8092/vorcsbine/
镜像推送、拉取、运行
镜像制作完毕之后,为了方便日后使用,可以将镜像推送至Docker Hub上
镜像推送
1、使用镜像推送前需要登录Docker Hub账户,没注册的小伙伴们点击此处去注册
2、注册完毕之后,使用docker login登录
wubaozhangdeMacBook-Pro:target wubaozhang$ docker login
Authenticating with existing credentials...
Login Succeeded
我之前由于登录过了,就不用重新输入账户密码。
3、使用docker tag命令给镜像定制版本,为了方便以后查看项目版本,我们需要改动镜像的tag版本,由于我之前上传了0.0.1版本至Docker Hub,为了避免重复,我们这里改成0.0.2版本
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker tag vorcsbine silentwu/vorcsbine:0.0.2
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad 29 minutes ago 1.17GB
silentwu/vorcsbine 0.0.2 90f6886714ad 29 minutes ago 1.17GB
需要主要的是,由于docker官方镜像仓库默认是以用户名为仓库的,silentwu/vorcsbine:0.0.2的含义便是将vorcsbine:0.0.2镜像推送至silentwu仓库中
4、使用docker push命令进行镜像推送
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker push silentwu/vorcsbine:0.0.2
The push refers to repository [docker.io/silentwu/vorcsbine]
8a9d72a73ec7: Layer already exists
35c20f26d188: Mounted from silentwu/demo
c3fe59dd9556: Layer already exists
6ed1a81ba5b6: Layer already exists
a3483ce177ce: Layer already exists
ce6c8756685b: Layer already exists
30339f20ced0: Layer already exists
0eb22bfb707d: Layer already exists
a2ae92ffcd29: Layer already exists
0.0.2: digest: sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc size: 2213
5、镜像推送结果
推送后的镜像默认是public view
镜像拉取
小伙伴后可以安装好Docker后,使用docker pull 命令进行拉取
为了方便测试,我这里先把本地的删除掉,使用docker image rm REPOSITORY:TAG或IMAGE ID
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad 44 minutes ago 1.17GB
silentwu/vorcsbine 0.0.2 90f6886714ad 44 minutes ago 1.17GB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker image rm silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine@sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad About an hour ago 1.17GB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
我们发现silentwu/vorcsbine:0.0.2 镜像已经在本地删除
使用docker pull命令开始拉取镜像
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker pull silentwu/vorcsbine:0.0.2
0.0.2: Pulling from silentwu/vorcsbine
Digest: sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc
Status: Downloaded newer image for silentwu/vorcsbine:0.0.2
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad About an hour ago 1.17GB
silentwu/vorcsbine 0.0.2 90f6886714ad About an hour ago 1.17GB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
发现已成功拉取
镜像运行
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker run -d -p 8094:8090 silentwu/vorcsbine:0.0.2
569e8a0d1a0cfb11e8b7598b2d3cbcbe9c9909aedd29eba3967ecafc97e55571
删除镜像需要注意的问题
如果镜像存在正在运行的容器实例,需要先停止容器实例的运行
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
569e8a0d1a0c silentwu/vorcsbine:0.0.2 "java -Djava.securit…" 9 minutes ago Up 9 minutes 0.0.0.0:8094->8090/tcp heuristic_shirley
78212d6e55ec vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8092->8090/tcp nifty_fermi
e2c349054bc5 vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8091->8090/tcp reverent_heyrovsky
4c0aaf6a919f vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8090->8090/tcp inspiring_bassi
5bdad1c46b6b zookeeper
可以看到有四个容器实例正在运行,由于镜像vorcsbine对应三个容器实例,为了方便,我们这里删除silentwu/vorcsbine:0.0.2镜像实例
我们这里先不关闭容器直接删除
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad About an hour ago 1.17GB
silentwu/vorcsbine 0.0.2 90f6886714ad About an hour ago 1.17GB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker image rm 90f6886714ad
Error response from daemon: conflict: unable to delete 90f6886714ad (cannot be forced) - image is being used by running container 569e8a0d1a0c
可以发现报错无法删除,它的意思说我们要删除的镜像存在运行中的容器实例
所以,我们需要先停止容器实例,使用docker stop CONTAINERID命令停止,再进行删除
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
569e8a0d1a0c silentwu/vorcsbine:0.0.2 "java -Djava.securit…" 15 minutes ago Up 15 minutes 0.0.0.0:8094->8090/tcp heuristic_shirley
78212d6e55ec vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8092->8090/tcp nifty_fermi
e2c349054bc5 vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8091->8090/tcp reverent_heyrovsky
4c0aaf6a919f vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8090->8090/tcp inspiring_bassi
5bdad1c46b6b zookeeper "/docker-entrypoint.…" 15 months ago Up 3 days 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp myzk
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker stop 569e8a0d1a0c
569e8a0d1a0c
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78212d6e55ec vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8092->8090/tcp nifty_fermi
e2c349054bc5 vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8091->8090/tcp reverent_heyrovsky
4c0aaf6a919f vorcsbine "java -Djava.securit…" About an hour ago Up About an hour 0.0.0.0:8090->8090/tcp inspiring_bassi
5bdad1c46b6b zookeeper "/docker-entrypoint.…" 15 months ago Up 3 days 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp myzk
最后再进行删除
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad About an hour ago 1.17GB
silentwu/vorcsbine 0.0.2 90f6886714ad About an hour ago 1.17GB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker image rm silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine@sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vorcsbine latest 90f6886714ad About an hour ago 1.17GB
silentwu/demo 1.0.0 0f98c6499f7e 4 days ago 660MB
silentwu/silentwu 1.0.0 0f98c6499f7e 4 days ago 660MB
appbaseio/dejavu latest fc2748827cf7 10 months ago 230MB
mysql 5.7 1e4405fe1ea9 13 months ago 437MB
tomcat latest 8973f493aa0a 16 months ago 508MB
zookeeper latest eb0a01329223 16 months ago 225MB
hello-world latest fce289e99eb9 2 years ago 1.84kB
containerize/elastichd latest c2202f76db37 3 years ago 28.1MB
java 8 d23bdf5b1b1b 3 years ago 643MB
最后成功删除
引用
Docker部署SpringBoot项目
Docker书籍《深入浅出Docker》
Docker快速入门教程Click me