演示环境
CentOS 7.2
Docker 1.13.1
Spring Boot 2.1.1.RELEASE
准备一个Spring Boot项目
构建一个 Spring Boot项目的方式有很多,也不是我们讨论的重点,这里就不多做描述了。我们在项目中准备一个简单的HelloController,其中有一个sayHello()方法映射到我们访问项目的跟路径,访问时返回:Hello Jerome, This is docker image !。
package top.nikk.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("")
public String sayHello() {
return "Hello Felix, This is docker image !";
}
}
复制代码
对项目打包,生成可执行jar
我们到项目的根目录,运行mvn clean package对项目进行打包,运行之后会在target目录下生成一个xxx.jar的可执行jar文件。
编写Dockerfile
# Docker image for springboot file run
# VERSION 1.0.0
# Author: Felix
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER Felix<Felix5200@163.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD felix-admin.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
复制代码
上面命令的相关解释:
从docker仓库获取openjdk作为我们项目的容器
VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/usr/local/apps目录下创建了一个临时文件,并连接到容器的/tmp。
项目的docker-demo-0.0.1.jar作为app.jar添加到容器。
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向/dev/urandom 作为 Entropy Source
from java:8 拉取一个jdk为1.8的docker image
-
maintainer 作者是Felix
-
felix-admin.jar 就是你上传的jar包,修改名称为app.jar包
-
app.jar 是你将该jar包重新命名的名称,在容器中运行
-
expose 该容器暴露的端口是多少,就是jar在容器中以多少端口运行
-
entrypoint 容器启动之后执行的命令,java -jar demo.jar 即启动jar
构建Docker镜像
我们进入到/usr/local/apps目录下,执行Docker的命令来构建镜像
docker build -t top.nikk/docker-demo:1.0.0 .
复制代码
注意此处最后有一个 . 的命令
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
复制代码
这个命令就是使用Docker的build命令来构建镜像,并给镜像起了一个名字top.nikk/docker-demo其TAG为1.0.0在当前文件夹下。
我们使用docker images来查看所有的镜像。
之后执行
docker run -id -p 8080:8080 --name demo top.nikk/docker-demo:1.0.0
复制代码
近期评论