docker基础
01、Docker简介
02、Docker的安装(通过yum安装)
03、Docker安装的问题补充
04、Docker的安装(通过RPM软件包)
05、Docker的安装(通过脚本安装)
06、Docker的卸载
07、Docker配置阿里云镜像加速器
08、Docker中的基本概念和底层原理
09、Docker常用命令(帮助命令)
10、Docker常用命令(镜像命令)
11、Docker常用命令(容器命令01)
12、Docker常用命令(容器命令02)
13、Docker常用命令(容器命令03)
14、Docker安装Nginx
15、Docker图形化管理工具Portainer
16、Docker镜像讲解
17、Docker镜像分层的理解
18、Docker镜像的commit操作
19、Docker容器数据卷介绍
20、Docker容器数据卷的应用
21、Docker中数据卷相关命令
22、Docker数据卷实现MySQL数据持久化
23、DockerFile的方式挂载数据卷
24、Docker数据卷容器的说明与共享数据原理
25、DockerFile文件详解
26、Docker实战:自定义CentOS镜像
27、CMD指令和ENTRYPOINT指令的区别
28、ONBUILD指令介绍
29、COPY指令和ADD指令
30、自定义Tomcat9镜像
31、发布镜像到DockerHub
32、将本地镜像推送到阿里云
33、补充:save和load命令说明
34、Jenkins + Docker + Github 自动部署
本文档使用 MrDoc 发布
-
+
首页
30、自定义Tomcat9镜像
### **1、目标** - 以ContOS镜像为基础镜像,自定义一个tomcat9的镜像。 - 镜像可以正常运行,外界可以访问。 - 与宿主机与tomcat9之间配置挂载。 - 部署一个简单的WEB项目,外界可以访问。 ### **2、准备** 准备`tomcat`压缩包,因为`tomcat`的运行需要JDK,所以也需要JDK8的压缩包。 如下: - apache-tomcat-9.0.44.tar.gz - jdk-8u11-linux-x64.tar.gz 都上传到服务器的`/home/mydockerfile/tomcat9`目录中。 ```python /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`。 ```python [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文件配置内容如下: ```python FROM centos MAINTAINER wukong<wukong6688@126.com> # 把宿主机当前上下文的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/local WORKDIR $MYPATH # 配置java与tomcat环境变量 # 配置java环境 ENV JAVA_HOME /usr/local/jdk1.8.0_11 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 通过冒号隔开 # 配置tomcat环境 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44 ENV 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 .` ```python # 因为我的Dockerfile文件的名字为Dockerfile,所以不用-f指定。 [root@192 tomcat9]# docker build -t diytomcat9 . Sending build context to Docker daemon 170.5MB Step 1/15 : FROM centos ---> 300e315adb2f Step 2/15 : MAINTAINER wukong<wukong6688@126.com> ---> Running in 221cc10c9504 Removing intermediate container 221cc10c9504 ---> 797f5aef897a Step 3/15 : COPY readme.txt /usr/local/cincontainer.txt ---> 6797005a229e Step 4/15 : ADD apache-tomcat-9.0.44.tar.gz /usr/local/ ---> f4d05cb84de6 Step 5/15 : ADD jdk-8u11-linux-x64.tar.gz /usr/local/ ---> 2c18597493ed Step 6/15 : RUN yum -y install vim ---> Running in 7cb17ddf6345 CentOS Linux 8 - AppStream 2.1 MB/s | 6.3 MB 00:02 CentOS Linux 8 - BaseOS 1.9 MB/s | 2.3 MB 00:01 CentOS Linux 8 - Extras 9.0 kB/s | 9.2 kB 00:01 Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M Installing 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 k Transaction Summary ================================================================================ Install 5 Packages Total download size: 7.8 M Installed size: 30 M Downloading 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:02 warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY CentOS Linux 8 - AppStream 232 kB/s | 1.6 kB 00:00 Importing GPG key 0x8483C65D: Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>" Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction 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/5 Installed: 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_64 Complete! Removing intermediate container 7cb17ddf6345 ---> 1dee8c82dc2c Step 7/15 : ENV MYPATH /usr/local ---> Running in 1d5abe930a75 Removing intermediate container 1d5abe930a75 ---> 970df33afcc8 Step 8/15 : WORKDIR $MYPATH ---> Running in 0580d08c8588 Removing intermediate container 0580d08c8588 ---> 2e3126bbb258 Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_11 ---> Running in 440abce7bbf6 Removing intermediate container 440abce7bbf6 ---> 075a1599971e Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> Running in d85b8a9112bb Removing intermediate container d85b8a9112bb ---> 3eb9c75d976f Step 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44 ---> Running in 8de5817880b1 Removing intermediate container 8de5817880b1 ---> 7be89ad718f3 Step 12/15 : ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.44 ---> Running in 2ef1b3c43df0 Removing intermediate container 2ef1b3c43df0 ---> b1f2bb8b9971 Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ---> Running in c088d27cac3b Removing intermediate container c088d27cac3b ---> e86039cdf1c9 Step 14/15 : EXPOSE 8080 ---> Running in f541217004bc Removing intermediate container f541217004bc ---> 253c3aa2bbfa Step 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 b5ba1a9c9c7f Removing intermediate container b5ba1a9c9c7f ---> 12988584a30e Successfully built 12988584a30e Successfully tagged diytomcat9:latest [root@192 tomcat9]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat9 latest 12988584a30e 3 minutes ago 607MB centos latest 300e315adb2f 3 months ago 209MB ``` 此时我的`diytomcat9`镜像就再宿主机生成,该`diytomcat9`镜像自身带有`tomcat9`的运行时环境。当我们启动容器后,该容器就对外提供`tomcat`服务。 ### **5、启动镜像** 执行如下命令,启动`diytomcat9`镜像。 ```python 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`参数即可。 ```python # 查看本地Docker镜像 [root@192 tomcat9]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat9 latest 12988584a30e 3 minutes ago 607MB centos 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 diytomcat9 9d23344e364d80e773a55cf9c507b75a034a1900fdf0c98e27266d99ceb5b06d # 查看当前正在运行的容器 [root@192 tomcat9]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d23344e364d diytomcat9 "/bin/sh -c '/usr/lo…" 11 seconds ago Up 9 seconds 0.0.0.0:9090->8080/tcp wukongtomcat ``` 查看宿主机的挂载是否配置成功。 ```python [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.txt drwxr-xr-x. 2 root root 6 3月 21 01:58 test # 这里 drwxr-xr-x. 2 root root 6 3月 21 01:58 tomcatlogs # 这里 ``` 说明数据卷挂载成功。 接下来我们查看宿主机上传的文件是否存在,还有容器的中的运行环境。 ```python # 查看/usr/local/目录中的内容 # 发现我们上传的cincontainer.txt和tomcat、jdk都有,没有问题。 [root@192 tomcat9]# docker exec wukongtomcat ls -l total 0 drwxr-xr-x. 1 root root 45 Mar 20 17:47 apache-tomcat-9.0.44 drwxr-xr-x. 2 root root 6 Nov 3 15:22 bin -rw-r--r--. 1 root root 0 Mar 20 16:39 cincontainer.txt drwxr-xr-x. 2 root root 6 Nov 3 15:22 etc drwxr-xr-x. 2 root root 6 Nov 3 15:22 games drwxr-xr-x. 2 root root 6 Nov 3 15:22 include drwxr-xr-x. 8 10 143 255 Jun 17 2014 jdk1.8.0_11 drwxr-xr-x. 2 root root 6 Nov 3 15:22 lib drwxr-xr-x. 3 root root 17 Dec 4 17:37 lib64 drwxr-xr-x. 2 root root 6 Nov 3 15:22 libexec drwxr-xr-x. 2 root root 6 Nov 3 15:22 sbin drwxr-xr-x. 5 root root 49 Dec 4 17:37 share drwxr-xr-x. 2 root root 6 Nov 3 15:22 src # 接下来我们查看一下java的版本 # 说明java的运行时环境是配置正常的。 [root@192 tomcat9]# docker exec wukongtomcat java -version java 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`镜像部署项目的原理。 ```python 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`文件内容如下: ```python <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> </web-app> ``` `index.jsp`文件内容如下: ```python <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hello wukong ,hello docker</title> </head> <body> Hello World!hello docker! <br /> <% System.out.println("-----Congratulations--hello-docker----"); %> </body> </html> ``` **(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`服务日志。 ```python # 查看当前工作目录 [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镜像来发布运行!
李智
2025年3月17日 13:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码