zoukankan      html  css  js  c++  java
  • dockerfile案例四:自定义镜像tomcat+发布web项目

    准备工作

    安装tomcat需要jdk,所以需要准备两个安装包:jdk和tomcat

    关于jdk和tomcat的版本兼容问题,需要参考https://hub.docker.com/_/tomcat 中的Supported tags,这里使用jdk8和tomcat8.5.63

    1.下载这两个安装包

    • apache-tomcat-8.5.63.tar.gz,下载地址:https://tomcat.apache.org/download-80.cgi
    • jdk-8u281-linux-x64.tar.gz,下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

    2. 创建宿主机上下文的目录,此目录将会是存放Dockerfile的目录,同时将docker build过程中需要拷贝到镜像的文件也放到此目录:

    mkdir -p /nick/mydockerfile/tomcat8

    [root@izbp13m488196e5hna361rz tomcat8]# pwd
    /nick/mydockerfile/tomcat8
    [root@izbp13m488196e5hna361rz tomcat8]# ll
    total 150640
    -rw-r--r-- 1 root root         7 Feb 24 15:06 aaa.txt
    -rw-r--r-- 1 root root  10515248 Feb 24 11:36 apache-tomcat-8.5.63.tar.gz
    -rw-r--r-- 1 root root      1057 Feb 24 15:32 Dockerfile
    -rw-r--r-- 1 root root 143722924 Feb 24 11:49 jdk-8u281-linux-x64.tar.gz

    编写Dockerfile,构建镜像

    Dockerfile如下:

    FROM centos
    MAINTAINER nick
    #把宿主机当前上下文的aaa.txt拷贝到容器/usr/local/路径下,并重命名为container.txt
    COPY aaa.txt /usr/local/container.txt
    #把宿主机当前路径下的jdk和tomcat包拷贝到容器中,并解压
    ADD apache-tomcat-8.5.63.tar.gz /usr/local/
    ADD jdk-8u281-linux-x64.tar.gz /usr/local/
    #安装VIM
    RUN yum install vim -y
    #设置容器登录后的工作路径
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    #设置jdk与tomcat的环境变量
    ENV JAVA_HOME /usr/local/jdk1.8.0_281
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.63
    ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.63
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    #容器运行监听的端口
    EXPOSE 8080
    #启动容器时运行tomcat
    # ENTRYPOINT ["/usr/local/apache-tomcat-8.5.63/bin/startup.sh" ]
    # CMD ["/usr/local/apache-tomcat-8.5.63/bin/catalina.sh","run"]
    CMD /usr/local/apache-tomcat-8.5.63/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.63/logs/catalina.out

    构建镜像nicktomcat8:docker build -t nicktomcat8 . (不加 -f 参数指定dockerfile的文件名时,将默认寻找当前路径下的Dockerfile文件)

    [root@izbp13m488196e5hna361rz tomcat8]# docker build -t nicktomcat8 .
    Sending build context to Docker daemon  154.2MB
    Step 1/15 : FROM centos
     ---> 300e315adb2f
    Step 2/15 : MAINTAINER nick
     ---> Running in a95ed3718ac3
    Removing intermediate container a95ed3718ac3
     ---> 25b61859dbb8
    Step 3/15 : COPY aaa.txt /usr/local/container.txt
     ---> 43b58bbeabc8
    Step 4/15 : ADD apache-tomcat-8.5.63.tar.gz /usr/local/
     ---> 29bbbdde1d4b
    Step 5/15 : ADD jdk-8u281-linux-x64.tar.gz /usr/local/
     ---> 842dc624aa24
    Step 6/15 : RUN yum install vim -y
     ---> Running in 4ebfd7604119
    CentOS Linux 8 - AppStream                      3.5 MB/s | 6.3 MB     00:01    
    CentOS Linux 8 - BaseOS                         685 kB/s | 2.3 MB     00:03    
    CentOS Linux 8 - Extras                          11 kB/s | 9.0 kB     00:00    
    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        116 kB/s |  39 kB     00:00    
    (2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 610 kB/s |  48 kB     00:00    
    (3/5): which-2.21-12.el8.x86_64.rpm             616 kB/s |  49 kB     00:00    
    (4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm  1.8 MB/s | 1.4 MB     00:00    
    (5/5): vim-common-8.0.1763-15.el8.x86_64.rpm    3.3 MB/s | 6.3 MB     00:01    
    --------------------------------------------------------------------------------
    
    。。。。。。。

    使用nicktomcat8镜像启动容器,并测试

    docker run -it -p 8888:8080 nicktomcat8

    [root@izbp13m488196e5hna361rz tomcat8]# docker run -it -p 8888:8080 nicktomcat8
    Using CATALINA_BASE:   /usr/local/apache-tomcat-8.5.63
    Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.63
    Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.5.63/temp
    Using JRE_HOME:        /usr/local/jdk1.8.0_281
    Using CLASSPATH:       /usr/local/apache-tomcat-8.5.63/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.63/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    24-Feb-2021 07:54:27.669 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/8.5.63
    24-Feb-2021 07:54:27.671 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Jan 29 2021 11:21:49 UTC
    
    。。。。。。
    
    24-Feb-2021 07:56:35.055 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
    24-Feb-2021 07:56:35.069 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 126987 ms

    浏览器测试,访问 xxx.xxx.xxx.xxx:8888

    tomcat版本正确,测试成功。

    再查看容器内文件:

    [root@izbp13m488196e5hna361rz tomcat8]# docker ps
    CONTAINER ID   IMAGE         COMMAND                  CREATED       STATUS       PORTS                    NAMES
    20edd1660381   nicktomcat8   "/bin/sh -c '/usr/lo…"   2 hours ago   Up 2 hours   0.0.0.0:8888->8080/tcp   inspiring_lumiere
    [root@izbp13m488196e5hna361rz tomcat8]# docker exec 20edd1660381 ls
    aegis
    apache-tomcat-8.5.63
    bin
    container.txt
    etc
    games
    include
    jdk1.8.0_281
    lib
    lib64
    libexec
    sbin
    share
    src
    [root@izbp13m488196e5hna361rz tomcat8]# docker exec 20edd1660381 pwd
    /usr/local

    登录后的工作目录为/usr/local,宿主机上下文中的nick.txt已拷贝至容器并重命名,两个安装包已拷贝至容器并解压。

    实际工作中启动tomcat容器

    docker run -d 
    -p 8888:8080 
    --name mytomcat8 
    -v /nick/mydockerfile/tomcat8/test:/usr/local/apache-tomcat-8.5.63/webapps/test 
    -v /nick/mydockerfile/tomcat8/tomcat8logs/:/usr/local/apache-tomcat-8.5.63/logs 
    --privileged=true  
    nicktomcat8

    说明:

    第一个容器卷是对应tomcat容器中的web项目文件夹,方便发布。

    第二个容器卷是对应tomcat容器中的日志文件夹,方便跟踪日志。

    --privileged=true,使用该参数,container内的root拥有真正的root权限,为了避免在容器内操作时遇到各种permission denied。

    启动后宿主机的上下文目录下就多了test和tomcat8logs两个文件夹:

    [root@izbp13m488196e5hna361rz tomcat8]# ll
    total 150648
    -rw-r--r-- 1 root root         7 Feb 24 15:06 aaa.txt
    -rw-r--r-- 1 root root  10515248 Feb 24 11:36 apache-tomcat-8.5.63.tar.gz
    -rw-r--r-- 1 root root      1057 Feb 24 15:32 Dockerfile
    -rw-r--r-- 1 root root 143722924 Feb 24 11:49 jdk-8u281-linux-x64.tar.gz
    drwxr-xr-x 2 root root      4096 Feb 24 18:19 test
    drwxr-xr-x 2 root root      4096 Feb 24 18:19 tomcat8logs

    模拟发布web项目

    如上启动容器的时候添加了两个容器卷,其中第一个容器卷对应关联的是tomcat容器webapps下的test工程。

    所以只需把代码文件直接放在宿主机的test文件夹中,自动同步至容器内,然后重启容器即可完成发布(这里tomcat可以不重启)。

    编写一个abc.jsp和WEB-INF/web.xml放入宿主机的test路径下:

    [root@izbp13m488196e5hna361rz test]# pwd
    /nick/mydockerfile/tomcat8/test
    [root@izbp13m488196e5hna361rz test]# tree
    .
    ├── abc.jsp
    └── WEB-INF
        └── web.xml
    
    1 directory, 2 files

    abc.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
      </head>
      <body>
        -----------welcome------------
        <%="i am in docker tomcat self "%>
        <br>
        <br>
        <% System.out.println("=============docker tomcat self");%>
      </body>
    </html>

    WEB-INF/web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      id="WebApp_ID" version="2.5">
      
      <display-name>test</display-name>
     
    </web-app>

    查看容器,验证jsp和xml页面是否已同步

    [root@izbp13m488196e5hna361rz test]# docker ps
    CONTAINER ID   IMAGE         COMMAND                  CREATED        STATUS        PORTS                    NAMES
    9a7a3a08e39b   nicktomcat8   "/bin/sh -c '/usr/lo…"   22 hours ago   Up 22 hours   0.0.0.0:8888->8080/tcp   mytomcat8
    [root@izbp13m488196e5hna361rz test]# docker exec 9a ls /usr/local/apache-tomcat-8.5.63/webapps/test
    WEB-INF
    abc.jsp

    在浏览器验证:

    修改宿主机下的abc.jsp,将welcome改为hello,刷新浏览器页面:

    同样,第二个容器卷对应关联的是tomcat容器logs下的日志文件,需要查看日志的话,可以直接在宿主机中查询:

    [root@izbp13m488196e5hna361rz tomcat8logs]# pwd
    /nick/mydockerfile/tomcat8/tomcat8logs
    [root@izbp13m488196e5hna361rz tomcat8logs]# ll
    total 36
    -rw-r----- 1 root root 8042 Feb 24 20:31 catalina.2021-02-24.log
    -rw-r----- 1 root root 526 Feb 25 15:53 catalina.2021-02-25.log
    -rw-r----- 1 root root 8632 Feb 25 16:04 catalina.out
    -rw-r----- 1 root root 0 Feb 24 18:19 host-manager.2021-02-24.log
    -rw-r----- 1 root root 459 Feb 24 18:26 localhost.2021-02-24.log
    -rw-r----- 1 root root 1517 Feb 25 04:41 localhost_access_log.2021-02-24.txt
    -rw-r----- 1 root root 480 Feb 25 16:04 localhost_access_log.2021-02-25.txt
    -rw-r----- 1 root root 0 Feb 24 18:19 manager.2021-02-24.log
    [root@izbp13m488196e5hna361rz tomcat8logs]# tail -5f catalina.out
    25-Feb-2021 07:53:24.627 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.reload Reloading context [/test]
    25-Feb-2021 07:53:24.627 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/test] has started
    25-Feb-2021 07:53:24.676 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/test] is completed
    =============docker tomcat self
    =============docker tomcat self

    访问了两次abc.jsp,所以日志中打印了两次=============docker tomcat self。

  • 相关阅读:
    Eclipse添加注释简介
    git config配置文件
    ndk开发教程以及问题解决方案
    PATH路径出错导致任何命令都找不到解决方法
    git详细教程
    ssh相关操作
    ORM SQLAlchemy 表于表的关系
    SQLAlchemy 使用
    ORM SQLAlchemy 简介
    LUA基础
  • 原文地址:https://www.cnblogs.com/xulan0922/p/14443099.html
Copyright © 2011-2022 走看看