「现学现忘」Docker基础—实战:自定义Tomcat9镜像

目录

1、目标

tomcat9tomcat9

2、准备

准备 tomcat 压缩包,因为 tomcat 的运行需要JDK,所以也需要JDK8的压缩包。

如下:

apache-tomcat-9.0.44.tar.gzjdk-8u11-linux-x64.tar.gz

都上传到服务器的 /home/mydockerfile/tomcat9 目录中。

/home/mydockerfile/tomcat9[root@192 tomcat9]# ll总用量 166516-rw-r--r--. 1 root root  11487016 3月  21 00:18 apache-tomcat-9.0.44.tar.gz-rw-r--r--. 1 root root 159019376 3月  21 00:18 jdk-8u11-linux-x64.tar.gz

创建一个 readme.txt 文件,用于之后的宿主机与容器之间的拷贝。

创建一个Dockerfile文件,就命名为 Dockerfile

[root@192 tomcat9]# touch readme.txt[root@192 tomcat9]# touch Dockerfile[root@192 tomcat9]# ll总用量 166516-rw-r--r--. 1 root root  11487016 3月  21 00:18 apache-tomcat-9.0.44.tar.gz-rw-r--r--. 1 root root         0 3月  21 00:39 Dockerfile-rw-r--r--. 1 root root 159019376 3月  21 00:18 jdk-8u11-linux-x64.tar.gz-rw-r--r--. 1 root root         0 3月  21 00:39 readme.txt

提示:Dockerfile文件,官方推荐命名为 Dockerfile ,在使用 docker build 命令的时候,会自动去寻找这个Dockerfile文件,就不需要在用 -f 参数指定Dockerfile文件的位置了。

3、编写Dockerfile文件

Dockerfile文件配置内容如下:

FROM centosMAINTAINER wukong# 把宿主机当前上下文的readme.txt拷贝到容器/usr/local/路径下# 并把readme.txt文件重命名cincontainer.txt文件COPY readme.txt /usr/local/cincontainer.txt# 把宿主机当前上下文的(也就是当前目录)java与tomcat安装包添加到容器中ADD apache-tomcat-9.0.44.tar.gz /usr/local/ADD jdk-8u11-linux-x64.tar.gz /usr/local/# 安装vim编辑器RUN yum -y install vim# 设置工作访问时候的MORKDIR路径,登录DE 落脚点ENV MYPATH /usr/localWORKDIR $MYPATH# 配置java与tomcat环境变量# 配置java环境ENV JAVA_HOME /usr/local/jdk1.8.0_11ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 通过冒号隔开# 配置tomcat环境ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.44# 把上面配置的环境放入到PATH环境变量中ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin# 容器运行时监听的端口(暴露端口)EXPOSE 8080# 启动时运行tomcat# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.44/bin/startup.sh"]# CMD ["/usr/local/apache-tomcat-9.0.44/bin/catalina.sh","run"]CMD /usr/local/apache-tomcat-9.0.44/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.44/bin/logs/catalina.out# && 表示拼接下一条命令,可以无线的拼接。

4、构建镜像

执行命令: docker build -t diytomcat9 .

# 因为我的Dockerfile文件的名字为Dockerfile,所以不用-f指定。[root@192 tomcat9]# docker build -t diytomcat9 .Sending build context to Docker daemon  170.5MBStep 1/15 : FROM centos ---> 300e315adb2fStep 2/15 : MAINTAINER wukong ---> Running in 221cc10c9504Removing intermediate container 221cc10c9504 ---> 797f5aef897aStep 3/15 : COPY readme.txt /usr/local/cincontainer.txt ---> 6797005a229eStep 4/15 : ADD apache-tomcat-9.0.44.tar.gz /usr/local/ ---> f4d05cb84de6Step 5/15 : ADD jdk-8u11-linux-x64.tar.gz /usr/local/ ---> 2c18597493edStep 6/15 : RUN yum -y install vim ---> Running in 7cb17ddf6345CentOS Linux 8 - AppStream                      2.1 MB/s | 6.3 MB     00:02CentOS Linux 8 - BaseOS                         1.9 MB/s | 2.3 MB     00:01CentOS Linux 8 - Extras                         9.0 kB/s | 9.2 kB     00:01Dependencies resolved.================================================================================ Package             Arch        Version                   Repository      Size================================================================================Installing: vim-enhanced        x86_64      2:8.0.1763-15.el8         appstream      1.4 MInstalling dependencies: gpm-libs            x86_64      1.20.7-15.el8             appstream       39 k vim-common          x86_64      2:8.0.1763-15.el8         appstream      6.3 M vim-filesystem      noarch      2:8.0.1763-15.el8         appstream       48 k which               x86_64      2.21-12.el8               baseos          49 kTransaction Summary================================================================================Install  5 PackagesTotal download size: 7.8 MInstalled size: 30 MDownloading Packages:(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm        224 kB/s |  39 kB     00:00(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 328 kB/s |  48 kB     00:00(3/5): which-2.21-12.el8.x86_64.rpm             342 kB/s |  49 kB     00:00(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm  2.5 MB/s | 1.4 MB     00:00(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm    6.0 MB/s | 6.3 MB     00:01--------------------------------------------------------------------------------Total                                           3.7 MB/s | 7.8 MB     00:02warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEYCentOS Linux 8 - AppStream                      232 kB/s | 1.6 kB     00:00Importing GPG key 0x8483C65D: Userid     : "CentOS (CentOS Official Signing Key) " Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficialKey imported successfullyRunning transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transaction  Preparing        :                                                        1/1  Installing       : which-2.21-12.el8.x86_64                               1/5  Installing       : vim-filesystem-2:8.0.1763-15.el8.noarch                2/5  Installing       : vim-common-2:8.0.1763-15.el8.x86_64                    3/5  Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5  Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5  Installing       : vim-enhanced-2:8.0.1763-15.el8.x86_64                  5/5  Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64                  5/5  Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64                    5/5  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5  Verifying        : vim-common-2:8.0.1763-15.el8.x86_64                    2/5  Verifying        : vim-enhanced-2:8.0.1763-15.el8.x86_64                  3/5  Verifying        : vim-filesystem-2:8.0.1763-15.el8.noarch                4/5  Verifying        : which-2.21-12.el8.x86_64                               5/5Installed:  gpm-libs-1.20.7-15.el8.x86_64         vim-common-2:8.0.1763-15.el8.x86_64  vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch  which-2.21-12.el8.x86_64Complete!Removing intermediate container 7cb17ddf6345 ---> 1dee8c82dc2cStep 7/15 : ENV MYPATH /usr/local ---> Running in 1d5abe930a75Removing intermediate container 1d5abe930a75 ---> 970df33afcc8Step 8/15 : WORKDIR $MYPATH ---> Running in 0580d08c8588Removing intermediate container 0580d08c8588 ---> 2e3126bbb258Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_11 ---> Running in 440abce7bbf6Removing intermediate container 440abce7bbf6 ---> 075a1599971eStep 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> Running in d85b8a9112bbRemoving intermediate container d85b8a9112bb ---> 3eb9c75d976fStep 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44 ---> Running in 8de5817880b1Removing intermediate container 8de5817880b1 ---> 7be89ad718f3Step 12/15 : ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.44 ---> Running in 2ef1b3c43df0Removing intermediate container 2ef1b3c43df0 ---> b1f2bb8b9971Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ---> Running in c088d27cac3bRemoving intermediate container c088d27cac3b ---> e86039cdf1c9Step 14/15 : EXPOSE 8080 ---> Running in f541217004bcRemoving intermediate container f541217004bc ---> 253c3aa2bbfaStep 15/15 : CMD /usr/local/apache-tomcat-9.0.44/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.44/bin/logs/catalina.out ---> Running in b5ba1a9c9c7fRemoving intermediate container b5ba1a9c9c7f ---> 12988584a30eSuccessfully built 12988584a30eSuccessfully tagged diytomcat9:latest[root@192 tomcat9]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED         SIZEdiytomcat9   latest    12988584a30e   3 minutes ago   607MBcentos       latest    300e315adb2f   3 months ago    209MB

此时我的 diytomcat9 镜像就再宿主机生成,该 diytomcat9 镜像自身带有 tomcat9 的运行时环境。当我们启动容器后,该容器就对外提供 tomcat 服务。

5、启动镜像

执行如下命令,启动 diytomcat9 镜像。

docker run -p 9090:8080 \--name wukongtomcat \-v /home/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.44/webapps/test \-v /home/mydockerfile/tomcat9/tomcatlogs:/usr/local/apache-tomcat-9.0.44/logs \--privileged=true \-d diytomcat9

提示:

Docker挂载主机目录的时候,如果Docker访问出现 cannot open directory.:Permission denied 问题。

解决办法:在挂载目录后多加一个 --privileged=true 参数即可。

演示:

# 查看本地Docker镜像[root@192 tomcat9]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED         SIZEdiytomcat9   latest    12988584a30e   3 minutes ago   607MBcentos       latest    300e315adb2f   3 months ago    209MB# 启动容器(以后工作中启动容器的命令要比这还多)[root@192 tomcat9]# docker run -p 9090:8080 \> --name wukongtomcat \> -v /home/mydockerfile/tomcat9/test:/url/local/apache-tomcat-9.0.44/webapps/test \> -v /home/mydockerfile/tomcat9/tomcatlogs:/url/local/apache-tomcat-9.0.44/logs \> --privileged=true \> -d diytomcat99d23344e364d80e773a55cf9c507b75a034a1900fdf0c98e27266d99ceb5b06d# 查看当前正在运行的容器[root@192 tomcat9]# docker psCONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS         PORTS                    NAMES9d23344e364d   diytomcat9   "/bin/sh -c '/usr/lo…"   11 seconds ago   Up 9 seconds   0.0.0.0:9090->8080/tcp   wukongtomcat

查看宿主机的挂载是否配置成功。

[root@192 tomcat9]# pwd/home/mydockerfile/tomcat9[root@192 tomcat9]# ll总用量 166520-rw-r--r--. 1 root root  11487016 3月  21 00:18 apache-tomcat-9.0.44.tar.gz-rw-r--r--. 1 root root       643 3月  21 01:46 Dockerfile-rw-r--r--. 1 root root 159019376 3月  21 00:18 jdk-8u11-linux-x64.tar.gz-rw-r--r--. 1 root root         0 3月  21 00:39 readme.txtdrwxr-xr-x. 2 root root         6 3月  21 01:58 test # 这里drwxr-xr-x. 2 root root         6 3月  21 01:58 tomcatlogs # 这里

说明数据卷挂载成功。

接下来我们查看宿主机上传的文件是否存在,还有容器的中的运行环境。

# 查看/usr/local/目录中的内容# 发现我们上传的cincontainer.txt和tomcat、jdk都有,没有问题。[root@192 tomcat9]# docker exec wukongtomcat ls -ltotal 0drwxr-xr-x. 1 root root  45 Mar 20 17:47 apache-tomcat-9.0.44drwxr-xr-x. 2 root root   6 Nov  3 15:22 bin-rw-r--r--. 1 root root   0 Mar 20 16:39 cincontainer.txtdrwxr-xr-x. 2 root root   6 Nov  3 15:22 etcdrwxr-xr-x. 2 root root   6 Nov  3 15:22 gamesdrwxr-xr-x. 2 root root   6 Nov  3 15:22 includedrwxr-xr-x. 8   10  143 255 Jun 17  2014 jdk1.8.0_11drwxr-xr-x. 2 root root   6 Nov  3 15:22 libdrwxr-xr-x. 3 root root  17 Dec  4 17:37 lib64drwxr-xr-x. 2 root root   6 Nov  3 15:22 libexecdrwxr-xr-x. 2 root root   6 Nov  3 15:22 sbindrwxr-xr-x. 5 root root  49 Dec  4 17:37 sharedrwxr-xr-x. 2 root root   6 Nov  3 15:22 src# 接下来我们查看一下java的版本# 说明java的运行时环境是配置正常的。[root@192 tomcat9]# docker exec wukongtomcat java -versionjava version "1.8.0_11"Java(TM) SE Runtime Environment (build 1.8.0_11-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)# 如果还想进行其他的验证,可以自己去执行。

6、验证容器是否能够访问

我们可以使用 curl 命令进行本地访问。

也可以使用外部浏览器进行访问。

我们在浏览器中输入: http://192.168.134.129:9090/ ,看是否能够查看到Tomcat的欢迎界面。

7、向容器中部署WEB项目,同时验证数据卷挂载

我们通过容器启动命令,先来说明一下 tomcat9 镜像部署项目的原理。

docker run -p 9090:8080 \--name wukongtomcat \-v /home/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.44/webapps/test \-v /home/mydockerfile/tomcat9/tomcatlogs:/usr/local/apache-tomcat-9.0.44/logs \--privileged=true \-d diytomcat9

说明:

  • 宿主机的 /home/mydockerfile/tomcat9/test 目录和容器中 /usr/local/apache-tomcat-9.0.44/webapps/test 目录是挂载的,也就是这两个目录中的内容是同步的。
  • 我们知道在Tomcat中 webapps 目录是发布项目工程的目录,所以 test 目录相当于一个项目工程。我在宿主机中把项目文件放入 test 目录中,会自动同步到容器中 webapps 目录的 test 目录中。这样我们就可以在宿主机本地,发布一个项目到容器中了。
  • 同理宿主机的 /home/mydockerfile/tomcat9/tomcatlogs 目录和容器中 /usr/local/apache-tomcat-9.0.44/logs 目录是挂载的,所以容器中Tomcat服务产生的日志,我们在宿主机上都可以查看到,并且持久化到了宿主机。

(1)准备一个简单的WEB项目

我们创建两个文件和一个文件夹放入宿主机的 /home/mydockerfile/tomcat9/test

他们之间的目录结构如下:

web.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

index.jsp 文件内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"        pageEncoding="UTF-8" %>          hello wukong ,hello docker        Hello World!hello docker!    
<% System.out.println("-----Congratulations--hello-docker----"); %>

(2)访问验证

我们在宿主机 /home/mydockerfile/tomcat9/test 目录中创建的文件,会自动同步到容器中 /usr/local/apache-tomcat-9.0.44/webapps/test 目录里。

这时我们可以直接在浏览器中访问 http://192.168.134.129:9090/test ,查看一下是否能够访问成功。

提示:可以 docker restart 重启一下容器。

访问成功。

我们也可以在宿主机中查看 tomcat 容器的 tomcat 服务日志。

# 查看当前工作目录[root@192 tomcatlogs]# pwd/home/mydockerfile/tomcat9/tomcatlogs# 查看当前目录文件[root@192 tomcatlogs]# ll总用量 48-rw-r-----. 1 root root  6286 3月  21 03:47 catalina.2021-03-20.log-rw-r-----. 1 root root  6289 3月  21 12:23 catalina.2021-03-21.log-rw-r-----. 1 root root 12631 3月  21 12:48 catalina.out-rw-r-----. 1 root root     0 3月  21 03:47 host-manager.2021-03-20.log-rw-r-----. 1 root root     0 3月  21 12:23 host-manager.2021-03-21.log-rw-r-----. 1 root root   408 3月  21 03:47 localhost.2021-03-20.log-rw-r-----. 1 root root   408 3月  21 12:23 localhost.2021-03-21.log-rw-r-----. 1 root root   225 3月  21 03:48 localhost_access_log.2021-03-20.txt-rw-r-----. 1 root root   225 3月  21 12:48 localhost_access_log.2021-03-21.txt-rw-r-----. 1 root root     0 3月  21 03:47 manager.2021-03-20.log-rw-r-----. 1 root root     0 3月  21 12:23 manager.2021-03-21.log# 查看tomcat日志[root@192 tomcatlogs]# cat catalina.out... #省略-----Congratulations--hello-docker---------Congratulations--hello-docker---------Congratulations--hello-docker---------Congratulations--hello-docker----[root@192 tomcatlogs]#

容器是正常运行的,相关文件都可以查看到,证明我们的 tomcat9 镜像配置没有问题。

我们以后开发的步骤:需要掌握Dokcerfile的编写,之后的一切都是使用Docker镜像来发布运行!

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章