Docker这门技术也是开发中我们值得掌握的一门技术。接下我们就来探究一下, 怎么使用Docker容器化的技术来构建并运行,Spring Boot项目的可执行Jar包。
演示环境
CentOS 7
Docker 1.13.1
Spring Boot 2.1.1.RELEASE
准备一个Spring Boot项目
构建一个 Spring Boot项目的方式有很多,也不是我们讨论的重点,这里就不多做描述了。我们在项目中准备一个简单的HelloController,其中有一个sayHello()方法映射到我们访问项目的跟路径,访问时返回:Hello Jerome, This is docker image !。
对项目打包,生成可执行jar
我们到项目的根目录,运行mvn clean package对项目进行打包,运行之后会在target目录下生成一个xxx.jar的可执行jar文件。
制作Docker镜像
首先我们将准备的xxx.jar拷贝到我们的CentOS 7机器上,拷贝的方法就不做描述了,大家各显神通吧。这里我是将我生成docker-demo-0.0.1.jar拷贝到了/var/docker/testdocker/文件夹下。这里大家也不一定使用Linux机器,这里只是我用了演示,尽量符合生产环境。
编写Dockerfile
使用vi Dockerfile对文件进行编辑。
上面命令的相关解释:
从docker仓库获取openjdk作为我们项目的容器
VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/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 作者是bingo
# demo-0.0.1-SNAPSHOT.jar 就是你上传的jar包,替换为jar包的名称
# demo.jar 是你将该jar包重新命名为什么名称,在容器中运行
# expose 该容器暴露的端口是多少,就是jar在容器中以多少端口运行
# entrypoint 容器启动之后执行的命令,java -jar demo.jar 即启动jar
构建Docker镜像
我们在/var/docker/testdocker目录下,执行Docker的命令来构建镜像。
这个命令就是使用Docker的build命令来构建镜像,并给镜像起了一个名字jerome.xin/docker-demo其TAG为latest在当前文件夹下。
我们使用docker images来查看所有的镜像。
我们发现镜像列表里面有我们生成的镜像jerome.xin/docker-demo。
运行镜像
通过上面的步骤我们就已经完成了镜像的创建,接下来我们只需要使用
docker run -d --restart=always --name docker-demo -v /usr/local/apps/docker-demo/logs:/home/docker-demo/logs -p 7500:7500 docker-demo 命令来运行我们的项目。
这个表示docker容器在停止或服务器开机之后会自动重新启动 --restart=always
-v /usr/local/apps/docker-demo/logs:/home/docker-demo/logs:将镜像内/home/docker-demo/logs目录的日志挂载到宿主机/usr/local/apps/docker-demo/logs目录下
-p 7500:7500:端口映射,默认启动的是7500
docker logs --tail 300 -f demo 查看启动日志