这篇博客记录如何将 war 包部署到 docker 的 web 容器中.
拉取 tomcat 镜像
首先, 我们这里使用 tomcat 的容器来运行 war, 因此需要先拉取 tomcat 镜像:
docker run -it --rm -p 8888:8080 tomcat:7.0.75-jre8
编写 webapp DockerFile
vim src/main/docker/Dockerfile
FROM tomcat:7.0.75-jre8 |
配置 maven 的 docker 插件
使用 docker 插件, 将生成 image 加入 maven task 中.
<properties> |
构建代码和镜像
mvn clean package docker:build
启动镜像
查看构建成功的镜像:
docker images
从镜像启动容器, (假设 image name 为 web):
docker run -d -p 8888:8080 --name web-1.0 nikoio/docker-war-tomcat:1.0
共享数据卷容器
由于我们的 tomcat 容器在运行中都会生成日志, 但如今若重新 build 了代码和镜像, 就是新的镜像了. 如果需要保留旧的日志等文件, 我们需要一个数据卷容器, 使得多个不同版本的 webapp 容器能够共用日志等文件.
首先, 我们先创建一个数据卷容器:
docker run -d -v /usr/local/tomcat/logs --name tomcat_log tomcat:7.0.75-jre8 echo Data-only container for tomcat-7.0.75-jre8
或者
docker create -v /usr/local/tomcat/logs --name tomcat_log_test tomcat:7.0.75-jre8 echo Data-only container for tomcat-7.0.75-jre8
web-1.0 基于刚才的 tomcat_log 数据卷容器启动.
docker run -d --volumes-from tomcat_log --name web-1.0 nikoio/docker-war-tomcat:1.0
关闭 web-1.0 :
docker stop web-1.0
启动 web-2.0 应用:
docker run -d --volumes-from tomcat_log --name web-2.0 nikoio/docker-war-tomcat:2.0
此时, 可以进入 web-2.0 中, 可以查看到 web-1.0 的历史 tomcat 日志.
docker exec -it web-2.0 /bin/bash