准备工作

一,Springboot项目打成jar包
二,登录linux系统,在/usr/local文件夹内创建DockerFile文件夹,再创建dockerfile文件,文件信息如下

1
2
3
4
5
6
7
8
9
10
11
12
    # 基础镜像使用java
    FROM java:8
    # 作者
    MAINTAINER eangulee <zxzhelloworld@163.com>
    # VOLUME 指定了临时文件目录为/tmp。
    # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
    VOLUME /tmp 
    # 将jar包添加到容器中并更名为app.jar
    ADD blog-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"]

解释下这个配置文件:

  1. VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。

  2. /tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录项目的 jar 文件作为 “app.jar” 添加到容器的ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source

  3. 如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。

三,上传第一步的jar包到DockerFile文件夹下,与dockerfile文件同级

制作镜像

linux环境下进入到/usr/local/DockerFile文件夹下,使用docker build命令构建镜像,记得最后有个”.”

1
docker build -t 自定义镜像名称(比如springbootdemo) .

docker build命令:用于使用 Dockerfile 创建镜像;
-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
“.”的意思:是在指定镜像构建过程中的上下文环境的目录,就是调用当前同级目录下的dockerfile文件,如果需要调用其他目录下的dockerfile文件,可以使用 -f 命令

启动容器

一,查看本地镜像
docker images命令,查看当前环境下的全部镜像

二,启动容器

1
docker run -d -p 8080:8085 --name springbootdemo

docker run命令:创建一个新的容器并运行一个命令
-d:后台运行容器,并返回容器ID;
-p:指定端口映射,格式为:主机(宿主)端口:容器端口
–name: 为指定容器的名称

至此,项目启动成功,访问宿主机的8080端口就能转发到容器中项目的8085端口

重新部署

一,查看运行中的容器id
docker ps -a 
 -a: 显示所有的容器,包括未运行的;以便后面停止和删除

二,停止容器
docker stop和docker kill命令都可以停止容器
docker kill 容器id 或者 docker stop 容器id
Docker stop和Docker kill返回并不意味着容器真正退出成功了,必须通过docker ps查看。

三,删除容器和镜像

docker rm 容器id
容器id还是第一步docker ps -a命令查询出来的那个id
使用docker images命令查询镜像id,再通过docker rmi命令删除镜像
docker rmi 镜像id
四,重新部署
重新打jar包,上传,执行【制作镜像,启动容器】步骤

至此,重新部署成功