1 拉取tomcat镜像
docker pull tomcat:7
2 创建挂载在宿主机的目录,conf配置文件,logs日志文件,webapps存放web目录
cd /opt/
mkdir tomcat
cd tomcat/
mkdir -p {conf,webapps,logs}
3 (第一个容器)先创建一个tomcat-backup容器(记得两个容器不一样),这个tomca-backup目的是为了复制它自己conf,logs,webapps下的内容到宿主机的挂载目录,然后把这个目录挂载给tomcat-test,不然下面挂载tomcat-test的时候无法启动
4 创建tomcat-backup
docker run -d --name tomcat-backup -p 8080:8080 tomcat:7
5 复制目录到宿主机
docker cp tomcat-test:/usr/local/tomcat/conf /opt/tomcat/
docker cp tomcat-test:/usr/local/tomcat/logs /opt/tomcat/
docker cp tomcat-test:/usr/local/tomcat/webapps /opt/tomcat/
6 webapps如果是空的在宿主机tomcat下执行
mv webapps.dist/* webapps #把webapps.dist下面的目录都移到webapps下
7 (第二个容器)创建tomcat容器,并挂载到宿主机
docker run -d --name tomcat -p 8081:8080 --privileged=true --restart always -v /opt/tomcat/webapps/:/usr/local/tomcat/webapps -v /opt/tomcat/logs/:/usr/local/tomcat/logs -v /opt/tomcat/conf/:/usr/local/tomcat/conf tomcat:7
参数说明:
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p 宿主机端口:容器端口
--privileged 让容器开启root特权
--restart=策略:以下四种
1. no: 默认策略,在容器退出时不重启容器
2. on-failure: 在容器非正常退出时(退出状态非0),才会重启容器 ,最多重启3次
3. always: 在容器退出时总是重启容器
4. unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
8 将本地的项目文件夹通过工具复制到宿主机的webapps目录下
9 修改conf目录下的server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<!-- 部署web项目 -->
<Context path="/webdemo" docBase="webdemo"></Context>
</Host>
10 重启tomcat容器
docker restart tomcat
11 访问 http://localhost:8081