BCLinux 容器应用镜像使用手册-Tomcat


  • BCLinux Developers

    BCLinux 容器应用镜像-Tomcat

    Tomcat 是什么?

    Tomcat 是由 Apache 软件基金会下属的Jakarta项目开发的一个开源的 web 应用服务器和 Servlet 容器,实现了对 Servlet 和 JavaServer Page(JSP)的支持,可提供纯 java HTTP Web 服务器环境,并提供了作为 Web 服务器的一些特有功能,如 Tomcat 管理和控制平台、安全域管理和Tomcat阀等。

    安装

    • 从 BCLinux 提供的镜像仓库拉取最新的 Tomcat 容器镜像:

        docker pull bclinux/tomcat:latest
      
    • 也可以通过 docker build 本地建立 Tomcat 镜像:

        docker build -t bclinux/tomcat:latest git@gitlab.cmss.com:linux/bclinux-docker-tomcat.git
      

    运行

    • Docker

        docker run --name tomcat bclinux/tomcat:latest
      
    • Docker Compose

      version: '2'
      
      services:
        tomcat:
          image: 'bclinux/tomcat:latest'
          ports:
            - '8080:8080'
      

    主机访问 Tomcat 服务器

    如果要从主机访问 web 服务器,用户可以使用 docker 将容器中的 8080 端口映射到主机上的随机端口:

    docker run -d --name tomcat -P bclinux/tomcat:latest
    

    运行 docker port 查看随机分配的端口:

    # docker port tomcat
    8080/tcp -> 0.0.0.0:32768
    

    用户也可以指定映射的端口:

    # docker run -p 8080:8080 bclinux/tomcat:latest
    

    这样就可以通过本机的8080 端口访问 tomcat (http://YOUR-HOST-IP:8080):

    Tomcat 上部署 web 应用

    /var/lib/tomcat/webapps 目录是 Tomcat 的 webapps 部署目录,用户可以拷贝非压缩的 web 应用程序,也可以拷贝应用程序的压缩包(.war),Tomcat 会自动解压部署。

    拷贝本地应用程序到 tomcat 容器中:

    # docker cp /path/to/app.war tomcat:/var/lib/tomcat/webapps
    

    Tomcat 数据持久化

    默认情况下如果删除容器,该容器中 Tomcat 配置和部署文件都将丢失,为了避免这种情况发生,本镜像可以通过映射数据卷的方式来保证数据的不丢失。

    Tomcat 镜像中/etc/tomcat 和 /var/lib/tomcat/webapps 数据卷分别对 Tomcat 配置和部署应用。为了持久化数据,用户可以将 Tomcat 容器中相应路径映射至宿主机某个目录:

     # docker run -d --name tomcat \
       -p 8080:8080 /
       -v /path/to/tomcat-conf-persistence:/etc/tomcat \
       -v /path/to/tomcat-web-persistence:/var/lib/tomcat/webapps \
       bclinux/tomcat
    

    或者使用 Docker Compose 方式:

    version: '2'
    
    services:
      tomcat:
        image: 'bclinux/tomcat:latest'
        ports:
          - '8080:8080'
        volumes:
          - /path/to/tomcat-conf-persistence:/etc/tomcat
          - /path/to/tomcat-web-persistence:/var/lib/tomcat/webapps
    

    使用 Docker Compose

    Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具。使用 Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。
    例如,可以通过本镜像启动一个 Tomcat 容器,首先创建 Docker Compose 配置文件 docker-compose.yml,内容如下:

    version: '2'
    
    services:
      tomcat:
        restart: always
        image: 'bclinux/tomcat:latest'
        ports:
          - '8080'
        environment:
          - TOMCAT_USERNAME=username
          - TOMCAT_PASSWORD=password
          - TOMCAT_ALLOW_REMOTE_MANAGEMENT=1
    

    通过容器就可以直接启动容器:

    docker-compose up -d
    

    通过scale参数可以弹性增加/减少容器的数量,例如下面命令将数量增加到3个:

    # docker-compose scale tomcat=3
    Starting tomcat_tomcat_1 ... done
    Creating tomcat_tomcat_2 ... 
    Creating tomcat_tomcat_3 ... 
    Creating tomcat_tomcat_2 ... done
    Creating tomcat_tomcat_3 ... done
    

    查看:

    # docker ps
    CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                               NAMES
    63514224eda6        bclinux/tomcat:latest   "/sbin/tomcat.sh"   9 seconds ago       Up 7 seconds        8009/tcp, 0.0.0.0:32770->8080/tcp   tomcat_tomcat_3
    c2f74f4864dd        bclinux/tomcat:latest   "/sbin/tomcat.sh"   9 seconds ago       Up 7 seconds        8009/tcp, 0.0.0.0:32769->8080/tcp   tomcat_tomcat_2
    62d48fb09d07        bclinux/tomcat:latest   "/sbin/tomcat.sh"   22 seconds ago      Up 21 seconds       8009/tcp, 0.0.0.0:32768->8080/tcp   tomcat_tomcat_1
    

    参数配置

    Tomcat 镜像提供以下环境变量给用户自定义配置:

    • TOMCAT_AJP_PORT : AJP 端口,默认为 8009。
    • TOMCAT_HTTP_PORT : HTTP 端口,默认为 8080。
    • TOMCAT_SHUTDOWN_PORT :关闭端口服务,默认为 8005。
    • TOMCAT_USERNAME : 管理用户名。
    • TOMCAT_PASSWORD : 管理用户密码。
    • TOMCAT_ALLOW_REMOTE_MANAGEMENT :是否允许远程管理(0:禁止,1:允许),默认为允许。
    • CATALINA_OPTS :tomcat 环境变量(设置堆大小、gc日志等)。

    例如,默认情况下镜像不会创建管理用户,用户可以在首次运行镜像时设置 TOMCAT_USERNAMETOMCAT_PASSWORD 变量值,为管理员用户指定用户名和密码:

    # docker run -d -p 8080:8080 \
      -e TOMCAT_USERNAME=your_username  \
      -e TOMCAT_PASSWORD=your_password  \
      bclinux/tomcat:latest
    

    或者使用 Docker Compose 方式:

    version: '2'
    
    services:
      tomcat:
        image: 'bclinux/tomcat:latest'
        ports:
          - '8080:8080'
        environment:
          - TOMCAT_USERNAME=your_username
          - TOMCAT_PASSWORD=your_password
    

    查看日志

    Tomcat 容器镜像将容器的日志发送到 stdout,查看方式如下:

    # docker logs tomcat
    
    Java virtual machine used: /usr/lib/jvm/jre/bin/java
    classpath used: /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar
    main class used: org.apache.catalina.startup.Bootstrap
    ..
    INFO: Starting ProtocolHandler ["http-bio-8080"]
    May 26, 2017 4:15:09 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["ajp-bio-8009"]
    May 26, 2017 4:15:09 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 3901 ms
    

    或者使用 Docker Compose 方式:

    # docker-compose logs tomcat
    
    Attaching to tomcat
    tomcat    | Java virtual machine used: /usr/lib/jvm/jre/bin/java
    tomcat    | classpath used: /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar
    tomcat    | main class used: org.apache.catalina.startup.Bootstrap
    ...
    tomcat    | INFO: Starting ProtocolHandler ["http-bio-8080"]
    tomcat    | May 26, 2017 3:55:18 PM org.apache.coyote.AbstractProtocol start
    tomcat    | INFO: Starting ProtocolHandler ["ajp-bio-8009"]
    tomcat    | May 26, 2017 3:55:18 PM org.apache.catalina.startup.Catalina start
    tomcat    | INFO: Server startup in 3533 ms