(14)Docker之部署SpringBoot应用几点说明

  本文重点记录一下Docker部署SpringBoot应用时需要注意的地方。构建jar包及Docker基础知识不在范围内。

  假如SpringBoot应用使用内置的tomcat,且配置文件中不修改端口,即默认的8080

  1、构建启动

  DockerFile文件名称是demoFile,内容如下:

FROM java:8
VOLUME /tmp
COPY demo.jar demo.jar
RUN bash -c "touch /demo.jar"
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "demo.jar", "--server.port=8080"]

  目录结构如下:

  构建镜像:

docker build -f demoFile -t demoimage .

  生成并启动容器:

docker run -d -p xxxx:8080 --name demo demoimage

  访问地址为:http://192.168.7.151:xxxx/user

  2、替换jar包

  现在的jar包在构建镜像的时候已经放入容器了,见DockerFile中语句:copy demo.jar demo.jar。

  假如修改了jar包,要重新放到容器中该怎么办呢?使用如下命令:

docker cp demo.jar e304979b7b3c:/demo.jar
  e304979b7b3c:指容器ID。直接覆盖替换掉,重启容器生效。容器启动或停止时都可以执行该命令。

  3、关于端口:

  1)生成并启动容器,必须指定外部、内部端口,错误示例如下:

[root@localhost demo]# docker run -d --name demo demoimage

  2)DockerFile中server.port优先级高于SpringBoot中指定的端口,此例中EXPOSE端口无效,如下

  2.1)SpringBoot中7777,不指定EXPOSE,不指定server.port,则生成并启动容器方式为:

docker run -d -p xxxx:7777 --name demo demoimage

  2.2)SpringBoot中7777,EXPOSE中8080,不指定server.port,则生成并启动容器方式为:

docker run -d -p xxxx:7777 --name demo demoimage

  2.3)SpringBoot中7777,不指定EXPOSE,server.port中8081,则生成并启动容器方式为:

docker run -d -p xxxx:8081 --name demo demoimage

  2.4)SpringBoot中7777,EXPOSE中8080,server.port中8081,则生成并启动容器方式为:

docker run -d -p xxxx:8081 --name demo demoimage

  2.5)Windows中SpringBoot中配置了端口7777,在cmd中启动运行:

D:\temp>java -jar demo2.jar --server.port=8080,外部访问8080生效(优先级高)

  3)同一个镜像可以生成并启动多个容器(指定的外部端口和容器名不能一样)

  4、关于VOLUME

  VOLUME /tmp:会自动(好像有问题?测试不行)在宿主机/var/lib/docker下创建一个tmp的目录,网上说是连接到容器的/tmp

  对于这块不是很明白,做些记录,希望以后有时间可以研究一下:

  1)在demoFile中不设置VOLUME /tmp,手动创建/var/lib/docker/tmp,可以成功创建镜像,并运行。

  2)在demoFile中设置VOLUME /aaaa,删除宿主机的/var/lib/docker/tmp路径,不能创建镜像,且不会自动创建/var/lib/docker/aaaa。

  3)在demoFile中设置VOLUME /aaaa,手动创建/var/lib/docker/tmp,可以成功创建镜像,并运行。不会自动创建/var/lib/docker/aaaa。

  4)只要有/var/lib/docker/tmp路径,就可以创建、运行镜像。Spring Boot使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录。

  

 

posted @ 2020-07-18 22:14  雷雨客  阅读(838)  评论(0编辑  收藏  举报