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

results matching ""

    No results matching ""