天天看点

docker 打包_Docker系列(三):手动打包并运行一个springboot项目

1.新建一个springboot项目,编写hello world接口。
docker 打包_Docker系列(三):手动打包并运行一个springboot项目
2.将springboot项目打成jar包。
docker 打包_Docker系列(三):手动打包并运行一个springboot项目

mvn package 命令执行后会在target目录自动生成项目jar包。

3.编写Dockerfile。
#指定含有jdk1.8的镜像
FROM java:8

#指定/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录
VOLUME /tmp

#添加自己的项目到demo.jar中
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
RUN bash -c 'touch /demo.jar'

#ENTRYPOINT指定容器运行后默认执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
           
附:【Dockerfile指令详解】
FROM:指定基础镜像,必须为第一个命令
MAINTAINER: 维护者信息
RUN:构建镜像时执行的命令
ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
CMD:构建容器后调用,也就是在容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
LABEL:用于为镜像添加元数据
ENV:设置环境变量
EXPOSE:指定于外界交互的端口
VOLUME:用于指定持久化目录
WORKDIR:工作目录,类似于cd命令
USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
ARG:用于指定传递给构建运行时的变量
ONBUILD:用于设置镜像触发器
ENTRYPOINT:配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。
格式:ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2 (shell中执行)
           
4.将demo-1.0-SNAPSHOT.jar和Dockerfile放于同一目录下。 5.使用Dockerfile 创建镜像。
#docker build -t demo:1.0-SNAPSHOT .
           
docker 打包_Docker系列(三):手动打包并运行一个springboot项目
6.生成docker容器,运行镜像。
#docker run -d -p 8088:8080 --name demo demo:1.0-SNAPSHOT
           

-d:后台运行容器

-p 8088:8080 :主机的端口和docker容器中的端口做映射

demo:自定义的容器名称

demo:1.0-SNAPSHOT 镜像名称和对应版本,如果没有指定版本,默认会去寻找lastest版本。

docker 打包_Docker系列(三):手动打包并运行一个springboot项目
7.浏览器访问验证一下。
http://localhost:8088/demo/hello
           
docker 打包_Docker系列(三):手动打包并运行一个springboot项目