小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像( 三 )


EXPOSE
仅仅只是声明端口 。
作用:

  • 帮助镜像使用者理解这个镜像服务的守护端口 , 以方便配置映射 。
  • 在运行时使用随机端口映射时 , 也就是 docker run -P 时 , 会自动随机映射 EXPOSE 的端口 。
格式:
EXPOSE <端口1> [<端口2>...]WORKDIR
指定工作目录 。 用 WORKDIR 指定的工作目录 , 会在构建镜像的每一层中都存在 。 (WORKDIR 指定的工作目录 , 必须是提前创建好的) 。
docker build 构建镜像过程中的 , 每一个 RUN 命令都是新建的一层 。 只有通过 WORKDIR 创建的目录才会一直存在 。 格式:
WORKDIR <工作目录路径>USER
用于指定执行后续命令的用户和用户组 , 这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在) 。 格式:
USER <用户名>[:<用户组>]我们自定义的Dockerfile内容结构大致如下:
FROM openjdk:8MAINTAINER xiaobaoqiang # Add the service itselfARG JAR_FILEADD ${JAR_FILE} "/root/nacos-discovery-provider.jar"ENTRYPOINT ["java", "-jar", "/root/nacos-discovery-provider.jar"]EXPOSE 8081
  • FROM是指从哪个基础镜像开始构建我们自己的镜像 , 这里我们使用openjdk版本1.8;
  • MAINTAINER是指制作该镜像的作者;
  • ARG构建参数 , 这里我们使用了JAR_FILE , 该参数是从Maven的dockerfile-maven-plugin插件传递过来的;
  • ADD将Mavne打包后的jar文件复制到Docker容器中;
  • ENTRYPOINT是指容器启动时需要运行的程序指令;
  • EXPOSE是指容器启动后需要暴露的端口 , 该参数一般情况下与springboot配置文件中的server.port保持一致;
验证所有的准备工作和配置文件已经完成 , 下面通过maven打包的形式来验证下:
mvn clean package
小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像验证结果
看到如上日志信息 , 则表示我们打包构建Docker镜像成功 。
[root@instance01 ~]# docker images | grep nacos-discovery-provider10.0.0.10:5000/nacos-discovery-provider0.0.165dcbdd919212 minutes ago554MB通过docker命令可以查看我们刚构建的容器镜像 。
通过这种Mavne插件和Dockerfile再结合jenkins就可以完全实现CI/CD持续集成持续发布功能 , 大大缩短我们在敏捷项目中的发布时间 , 提升我们的工作效率 。
【小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像】不积跬步 , 无以至千里;不积小流 , 无以成江海!