1. tomcat镜像的Dockerfile的内容。
创建一个tomcat镜像,首先需要系统环境,这里我们选择centos,还需要java环境、tomcat环境。总的来说我们的Dockerfile需要centos镜像,然后在centos中安装java和tomcat。Dockerfile的内容如下:
FROM centos
MAINTAINER wk<wk@163.com>
#把宿主机当前上下文的host.txt拷贝到容器/usr/local/路径下
COPY host.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.16.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.16
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.16
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.16/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.16/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.16/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.16/bin/logs/catalina.out
在随意一个目录下面(我是/root/myDocker)新建文件Dockerfile。文件内容就是上面的内容。需要注意的地方:
- COPY host.txt /usr/local/cincontainer.txt 表示把Dockerfile所在目录的host.txt文件,复制并改名到容器的/usr/local/cincontainer.txt。这个只是为了测试COPY指令。
- ADD jdk-8u201-linux-x64.tar.gz /usr/local/ 表示把Dockerfile所在目录的jdk-8u201-linux-x64.tar.gz文件复制并解压到容器的/usr/local/ 目录。
- ADD apache-tomcat-9.0.16.tar.gz /usr/local/ 表示把Dockerfile所在目录的apache-tomcat-9.0.16.tar.gz文件复制并解压到容器的/usr/local/ 目录。
- ENV JAVA_HOME /usr/local/jdk1.8.0_201 表示设置容器的环境变量JAVA_HOME等于/usr/local/jdk1.8.0_201。
- CMD /usr/local/apache-tomcat-9.0.16/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.16/bin/logs/catalina.out 表示用docker run运行容器的时候。执行CMD后的命令,启动tomcat并且查看日志文件。(注意:如果没有tail -F 挂起启动的界面。会启动容器之后马上退出容器。)
2. 下载需要的安装包。
根据上面的文件解释,需要下载jdk-8u201-linux-x64.tar.gz和apache-tomcat-9.0.16.tar.gz到Dockerfile所在目录(我是/root/myDocker)。并且新建一个文件host.txt。目录结构如下:
[root@localhost myDocker]# ll
总用量 197864
-rw-r--r--. 1 root root 10783080 3月 17 21:52 apache-tomcat-9.0.16.tar.gz
-rw-r--r--. 1 root root 1032 3月 17 22:02 Dockerfile
-rw-r--r--. 1 root root 16 3月 17 21:24 host.txt
-rw-r--r--. 1 root root 191817140 12月 19 02:11 jdk-8u201-linux-x64.tar.gz
3. 根据Dockerfile构建镜像。
命令如下:如果不用-f参数指定Dockerfile文件,默认情况下就是当前目录的名字是Dockerfile的文件。
docker build -t mytomcat .
4. 运行容器。
运行容器的命令如下:
docker run -d -p 9080:8080 --name myt9 \
-v /root/myDocker/tomcat9/test:/usr/local/apache-tomcat-9.0.16/webapps/test \
-v /root/myDocker/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.16/logs \
--privileged=true mytomcat
- 其中斜杠 是命令的连接符。
- 使用 -v 创建容器卷,把容器的/usr/local/apache-tomcat-9.0.16/webapps/test目录映射到宿主机的/root/myDocker/tomcat9/test目录。容器的/usr/local/apache-tomcat-9.0.16/logs目录映射到宿主机的/root/myDocker/tomcat9/tomcat9logs/ 目录。就是把tomcat中的test项目的发布路径放在外面。日志路径也放在外面。
- 如果Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied,解决办法:在挂载目录后多加一个--privileged=true参数即可。
运行结果如下:这时候访问localhost:9080 可以显示tomcat的界面。整个过程就成功了。
[root@localhost myDocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
205f94eb3126 mytomcat "/bin/sh -c '/usr/lo…" 6 minutes ago Up 6 minutes 0.0.0.0:9080->8080/tcp myt9
查看目录,可以看到容器卷 /root/myDocker/tomcat9 创建了。如下:
[root@localhost tomcat9]# pwd
/root/myDocker/tomcat9
[root@localhost tomcat9]# ll
总用量 0
drwxr-xr-x. 2 root root 6 3月 17 22:13 test
drwxr-xr-x. 2 root root 197 3月 17 22:13 tomcat9logs
查看容器内部的目录,可以看到cincontainer.txt文件。如下:
[root@localhost ~]# docker exec myt9 ls -l
total 4
drwxr-xr-x. 1 root root 45 Mar 17 14:05 apache-tomcat-9.0.16
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
-rw-r--r--. 1 root root 16 Mar 17 13:24 cincontainer.txt
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
drwxr-xr-x. 7 10 143 245 Dec 15 19:48 jdk1.8.0_201