CentOS 安装 Docker 请参考: CentOS Docker 安装


一、Docker 安装 Tomcat

  • tomcat 镜像中已经集成依赖了 jre,做到了开箱即用

1、搜索 Tomcat 镜像

docker search tomcat
root@VM-0-15-debian:~# docker search tomcat
NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                                Apache Tomcat is an open source implementati…   1905                [OK]                
tomee                                 Apache TomEE is an all-Apache Java EE certif…   51                  [OK]                
dordoka/tomcat                        Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   49                                      [OK]
davidcaste/alpine-tomcat              Apache Tomcat 7/8 using Oracle Java 7/8 with…   26                                      [OK]
bitnami/tomcat                        Bitnami Tomcat Docker Image                     17                                      [OK]
consol/tomcat-7.0                     Tomcat 7.0.57, 8080, "admin/admin"              16                                      [OK]
cloudesire/tomcat                     Tomcat server, 6/7/8                            15                                      [OK]
tutum/tomcat                          Base docker image to run a Tomcat applicatio…   10                                      
meirwa/spring-boot-tomcat-mysql-app   a sample spring-boot app using tomcat and My…   9                                       [OK]
jeanblanchard/tomcat                  Minimal Docker image with Apache Tomcat         8                                       
aallam/tomcat-mysql                   Debian, Oracle JDK, Tomcat & MySQL              7                                       [OK]
rightctrl/tomcat                      CentOS , Oracle Java, tomcat application ssl…   3                                       [OK]
amd64/tomcat                          Apache Tomcat is an open source implementati…   2                                       
maluuba/tomcat7-java8                 Tomcat7 with java8.                             2                                       
fabric8/tomcat-8                      Fabric8 Tomcat 8 Image                          2                                       [OK]
camptocamp/tomcat-logback             Docker image for tomcat with logback integra…   1                                       [OK]
99taxis/tomcat7                       Tomcat7                                         1                                       [OK]
primetoninc/tomcat                    Apache tomcat 8.5, 8.0, 7.0                     1                                       [OK]
swisstopo/service-print-tomcat        backend tomcat for service-print "the true, …   0                                       
jelastic/tomcat                                                                       0                                       
oobsri/tomcat8                        Testing CI Jobs with different names.           0                                       
s390x/tomcat                          Apache Tomcat is an open source implementati…   0                                       
picoded/tomcat7                       tomcat7 with jre8 and MANAGER_USER / MANAGER…   0                                       [OK]
trollin/tomcat                                                                        0                                       
awscory/tomcat                        tomcat

我们选择下载来自官方的镜像 starts 最高的那个

docker pull tomcat

二、查看安装的镜像

docker images

可以看到我们本机已经下载好了 tomcat

root@VM-0-15-debian:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
tomcat                       latest              df50c9d355cf        5 days ago          463MB

三、启动 Tomcat

相关参数:

  • -i:表示以“交互模式”运行容器
  • -t:表示容器启动后会进入其命令行
  • -d:表示以“守护模式”执行/root/run.sh脚本,此时 tomcat 控制台不会出现在输出终端上,也不会关闭ssh连接容器就终止运行
  • -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 8080 端口,这样就向外界暴露了 8080 端口,可通过 docker 网桥来访问容器内部的 8080 端口了
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
  • --name:表示容器名称,自定义名称
# 无守护进程方式启动,此时会将tomcat控制台输出到终端, ctrl+c 就能终止容器运行
docker run -p 8080:8080 tomcat
# 守护进程方式启动
docker run -d -p 8080:8080 tomcat
# 守护进程方式启动,且自定义容器名称
docker run -d --name mytomcat \
-p 8080:8080 tomcat
# 挂载方式启动
# 将本机war包 /usr/local/auth.war 挂载到容器的 /usr/local/tomcat/webapps/auth.war
docker run -p 8080:8080 \
-v /usr/local/auto.war:/usr/local/tomcat/webapps/auth.war \
-d tomcat

供参考:一种我喜欢的启动方式

当然聪明人肯定不会自己每次都在启动的时候加这些配置,能在基础镜像里面搞最好咯!

1).将系统时区挂载容器内,保证日志打印时间一致
2).将日志挂载到宿主机,方便查看日志

docker run --name tomcat-auth \
-p 8080:8080 \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime:ro \
-v /usr/local/tomcat-auth/logs:/usr/local/tomcat/logs \
-d ryaning/tomcat:8-jre8

附:

上述方法用在平时测试还是可以的,生产环境还是建议使用官网推荐的方式,编写Dockerfile:将war包和镜像打包成新的镜像

在当前目录下新建 Dockerfile 文件

# 创建 Dockerfile
touch Dockerfile
# 编辑 Dockerfile
vi Dockerfile

内容如下:

# 你的tomcat的镜像
FROM tomcat:latest
# 作者
MAINTAINER example@example.com
# 拷贝war包放置到tomcat的webapps目录下
COPY auth.war /usr/local/tomcat/webapps

生成新镜像

# 根据当前目录下(.)的Dockerfile文件生成名为:tomcat-auth,且版本号为:v1.0.0的镜像
docker build -t tomcat-auth:v1.0.0 .
root@VM-0-15-debian:/usr/local# docker build -t tomcat-auth:v1.0.0 .
Sending build context to Docker daemon  65.83MB
Step 1/3 : FROM tomcat:latest
 ---> df50c9d355cf
Step 2/3 : MAINTAINER example@example.com
 ---> Running in a16c8f61b4dc
Removing intermediate container a16c8f61b4dc
 ---> 95eb8a583a64
Step 3/3 : COPY auth.war /usr/local/tomcat/webapps
 ---> b48f931ab49a
Successfully built b48f931ab49a
Successfully tagged tomcat-auth:v1.0.0
root@VM-0-15-debian:/usr/local#

接着我们就可以启动新镜像了

docker run -p 8080:8080 \
-d tomcat-auth:v1.0.0
  • 注意:auth.warDockerfile 在同一目录下

常用命令

  • 查询镜像
root@VM-0-15-debian:/usr/local# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
tomcat-auth                  v1.0.0              b48f931ab49a        10 minutes ago      493MB
tomcat                       latest              df50c9d355cf        6 days ago          463MB
root@VM-0-15-debian:/usr/local#
  • 查询容器
root@VM-0-15-debian:/usr/local# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                        PORTS                    NAMES
b744be08cf96        tomcat                       "catalina.sh run"        7 minutes ago       Exited (143) 2 minutes ago                             eager_mahavira
03a000bcee7b        tomcat-auth:v1.0.0           "catalina.sh run"        15 minutes ago      Exited (143) 8 minutes ago                             competent_dubinsky
  • 进入容器
# 进入正在运行的容器内部(b744be08cf96 为正在运行的 容器ID)
docker exec -it b744be08cf96 /bin/bash
# 进入正在运行的容器内部(tomcat-auth 为正在运行的 容器名称 NAMES)
docker exec -it tomcat-auth /bin/bash
# 查看正在运行的容器
root@VM-0-15-debian:/usr/local# docker ps
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS                    NAMES
b744be08cf96        tomcat-auth:v1.0.0   "catalina.sh run"   7 seconds ago       Up 6 seconds        0.0.0.0:8080->8080/tcp   tomcat-auth
# 进入tomcat容器内
root@VM-0-15-debian:/usr/local# docker exec -it tomcat-auth /bin/bash
root@b744be08cf96:/usr/local/tomcat#
  • 删除容器
# 根据 容器ID 删除容器
docker rm 03a000bcee7b
# 根据 容器名称 删除容器
docker rm tomcat-auth
root@VM-0-15-debian:/usr/local# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                        PORTS                    NAMES
b744be08cf96        tomcat                       "catalina.sh run"        7 minutes ago       Exited (143) 2 minutes ago                             eager_mahavira
03a000bcee7b        tomcat-auth:v1.0.0           "catalina.sh run"        15 minutes ago      Exited (143) 8 minutes ago                             tomcat-auth
root@VM-0-15-debian:/usr/local# docker stop tomcat-auth
tomcat-auth
root@VM-0-15-debian:/usr/local# docker rm tomcat-auth
tomcat-auth
root@VM-0-15-debian:/usr/local#

注:删除前需要保证容器是停止的

  • 删除镜像
# 根据 镜像ID 删除镜像
docker rmi df50c9d355cf
root@VM-0-15-debian:/usr/local# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
tomcat-auth                  v1.0.0              b48f931ab49a        26 minutes ago      493MB
tomcat                       latest              df50c9d355cf        6 days ago          463MB
tomcat                       8.0-jre8            361d9e51a0d1        6 days ago          463MB
root@VM-0-15-debian:/usr/local# docker rmi 361d9e51a0d1
Untagged: tomcat:8.0-jre8
Untagged: tomcat@sha256:0d4c72622f7b0a38591c1d6e84ebfd8a95503601a753490e914e46f8fec5256b
Deleted: sha256:361d9e51a0d117e6203161c5451fe880020eaa29eee7699c7010bd9202f92d52
Deleted: sha256:e48eb44036a317366fe5bceab444ea9395a81557970d3a82a1d103e73e4efb61
Deleted: sha256:a1ac7751afab6a1927a8248c5425c7ce694b4ab0edf8875c383416c1b2497b32
root@VM-0-15-debian:/usr/local#

注:

  1. 删除前需要保证容器是停止的
  2. 需要注意删除镜像和容器的命令不一样,docker rmi ID,其中 容器(rm) 和 镜像(rmi)
  3. 顺序需要先删除容器

  4. 宿主机拷贝

# 使用 cp 命令完成和宿主机的文件拷贝
# 将宿主机 /usr/local/auth.war 拷贝到容器的 /usr/local/tomcat/webapps下
docker cp /usr/local/auth.war b744be08cf96:/usr/local/tomcat/webapps
# 将容器 /usr/local/tomcat/webapps 拷贝到宿主机的 /usr/local/下
docker cp b744be08cf96:/usr/local/tomcat/webapps /usr/local/tomcat/
  • 导出镜像
# 根据 镜像ID/名称 导入
docker save tomcat-auth > /home/tomcat-auth.tar
root@VM-0-15-debian:/usr/local# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
tomcat-auth                  v1.0.0              b48f931ab49a        30 minutes ago      493MB
tomcat                       latest              df50c9d355cf        6 days ago          463MB
root@VM-0-15-debian:/usr/local# docker save tomcat-auth > /home/tomcat-auth.tar
root@VM-0-15-debian:/usr/local#
  • 导入镜像
# 将tomcat-auth 导入
docker load < /home/tomcat-auth.tar
root@VM-0-15-debian:/home# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              df50c9d355cf        6 days ago          463MB
root@VM-0-15-debian:/home# docker load < /home/tomcat-auth.tar 
b832d75f420e: Loading layer [==================================================>]  30.35MB/30.35MB
Loaded image: tomcat-auth:v1.0.0
root@VM-0-15-debian:/home#

注意

1、Tomcat应用日志时间和容器时间不一致解决办法

原因:

1).docker容器和系统时间不一致是因为docker容器的原生时区为0时区,而国内系统为东八区
2).容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时时间差

解决:

方法一

启动的时候增加环境变量及时区配置

  • 环境变量 Asia/Shanghai就是我所需要的时区
  • 宿主机器上的时区默认覆盖容器内的时区配置文件
docker run --name tomcat \
-p 8800:8080 \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d tomcat

方法二

1).docker启动容器时,为了保证容器时区和系统时区相同,需要挂载系统时间到容器内

# ro表示只读
-v /etc/localtime:/etc/localtime:ro

2).在tomcat/bin/catalina.sh文件中修改tomcat JAVA_OPTS,添加如下内容

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"

启动容器

docker run --name tomcat \
-p 8800:8080 \
-v /etc/localtime:/etc/localtime \
-d tomcat

results matching ""

    No results matching ""