docker部署springboot项目分为以下2步
- springboot项目的JAR包生成镜像文件。
- 将镜像文件生成容器,并完成部署。
一、springboot项目的JAR包生成镜像文件
- 编写Dockerfile文件。
执行以下命令:
Dockerfile 中 输入以下代码,然后点击Esc键退出编辑后 输入wq保存文件:mkdir docker #创建docker文件夹 cd docker vim Dockerfile #采用Dockerfile来创建images
# Docker image for springboot file run # VERSION 0.0.1 # Author: goodboby # 基础镜像使用java FROM java:8 # 作者 MAINTAINER goodboby <[email protected]> # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD demo-0.0.1-SNAPSHOT.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录 项目的 jar 文件作为 “app.jar” 添加到容器的
Dockerfile文件结构解释如下:一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行。(详见Dockerfile文件体系结构,以下只例举了部分说明)
FROM:指定基础镜像,要在哪个镜像建立。
MAINTAINER:指定维护者信息。
WORKDIR:指定当前工作目录。
EXPOSE:指定容器要打开的端口。
ENV:定义环境变量。
COPY :复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的。
ADD:相当于 COPY,但是比 COPY 功能更强大,格式为ADD <src> <dest>,
该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件,复制进容器会自动解压。
VOLUME:挂载目录,创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
ENTRYPOINT:配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。
CMD:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
ENTRYPOINT 和 CMD 的区别:ENTRYPOINT 指定了该镜像启动时的入口,CMD 则指定了容器启动时的命令,当两者共用时,完整的启动命令像是 ENTRYPOINT + CMD 这样。使用 ENTRYPOINT 的好处是在我们启动镜像就像是启动了一个可执行程序,在 CMD 上仅需要指定参数;另外在我们需要自定义 CMD 时不容易出错。
-
将springboot的jar包上传到docker目录(Dockerfile文件和jar包必需放在同一个目录),如下图所示:
- 生成镜像。
# docker-demo 为镜像名称,注意最后一个“.” docker build -t docker-demo .
- 如下图所示,镜像生成成功。