注:卸载:
1、查询docker安装过的包:
#yum list installed | grep docker
2、删除安装包:
#yum remove docker-ce.x86_64 docker-ce-cli.x86_64
3、删除镜像/容器等
删除容器
#docker rm dockerName
删除镜像,不可删除正在使用的镜像,可加 f进行强删
#docker rmi iamgeName
#docker rmi -rf iamgeName
一、安装 Docker
1. 检查操作系统内核版本
检查操作系统内核版本,必须是3.10及以上。
# uname -r
3.10.0-862.9.1.el7.x86_64
2. 安装 Docker
使用 yum 命令安装 Docker。
# yum install docker
Resolving Dependencies
... ...
Complete!
3. 启动 Docker
# systemctl start docker
4. 查看 Docker 版本
# docker -v
Docker version 1.13.1, build b2f74b2/1.13.1
5. 设置开机自启动 Docker
# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
二、安装 Tomcat 并部署WAR工程
1. 看 Docker 支持哪些版本的 Tomcat
打开 https://hub.docker.com/r/library/tomcat/ 查看 Docker 都支持哪些版本的Tocmat。
2. 在 Docker 里安装 Tomcat
在 Docker 里安装 Tomcat,拉取 Tomcat 镜像,不指定版本就是默认安装最新版,这里安装 8.5.35 版的。
# docker pull tomcat:8.5.35
安装报错解决办法:
(1)、安装dig工具:【yum install bind-utils】
(2)、查找可用映射:【dig @114.114.114.114 registry-1.docker.io】
;; ANSWER SECTION:
registry-1.docker.io. 48 IN A 52.87.94.70
registry-1.docker.io. 48 IN A 54.165.149.19
(3)、添加映射:【vim /etc/hosts】
54.165.149.19 registry-1.docker.io
3. 查看本地镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tomcat 8.5.35 48dd385504b1 6 months ago 475 MB
4. 通过镜像新建一个 Tomcat 容器并启动
注意,命令后面的 48dd385504b1是前面拉取的 Tomcat 镜像ID!实践证明,如果用镜像名而不用镜像ID,那么就会自动拉取最新版的镜像使用,而不是刚才手动拉取的 8.5.35 版本的镜像。
# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -d -p 8080:8080 48dd385504b1
Unable to find image 'tomcat:latest' locally
Trying to pull repository docker.io/library/tomcat ...
latest: Pulling from docker.io/library/tomcat
Digest: sha256:1b18333c03f68a64eb5dcc246984e89cf2d6737b04d95aa34cd337d8abfe796e
Status: Downloaded newer image for docker.io/tomcat:latest
e3274a72e8d62a0f3022d3201405ce586147b3031c1232452d001ee41fb9c938
其中 “-v /etc/localtime:/etc/localtime:ro” 表示让容器使用宿主机的时间时区。
-v 标签为容器添加 volume,后面的 :ro 指定该 volume 为只读。
注意:如果容器中指定的挂载目录存在相同的文件时,会被宿主机覆盖掉。
如果想把 Tomcat 的 webapps 目录也挂载到宿主机目录(比如挂载到 /data/webapps),那么就是下面这样,需要再写个 -v 选项:(宿主机目录:容器目录)
# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -v /data/webapps:/usr/local/tomcat/webapps:rw -d -p 8080:8080 48dd385504b1
这时查看宿主机目录(/data/webapps)是空的,进入容器查看 webapps 目录也是空的,放一个 WAR 包应用到宿主机目录(/data/webapps)下,一会 WAR 包解压生成一个同名的文件夹,说明挂载 webapps 目录成功。
查看容器:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a70c28d11a0c 48dd385504b1 "catalina.sh run" 2 days ago Up 3 hours 0.0.0.0:8080->8080/tcp tomcat8080
查看宿主机时间:
# date
Fri Jun 14 17:12:43 CST 2019
进入容器查看时间:
# docker exec -it tomcat8080 /bin/bash
root@a70c28d11a0c:/usr/local/tomcat# date
Fri Jun 14 17:14:50 CST 2019
与宿主机的时间一致。
但是 Tomcat 使用的时区还需要单独设置一下,否则部署在 Tomcat 里的工程取到的时间可能不是 Docker 容器的时间。设置很简单,只需在 bin 目录下的 catalina.sh 文件里加上时区即可,如下。
进入容器:
# docker exec -it tomcat8080 /bin/bash
进入 bin 目录:
root@a70c28d11a0c:/usr/local/tomcat# cd bin/
root@a70c28d11a0c:/usr/local/tomcat# ls
catalina.sh ......
把文件 catalina.sh 备份一下,然后修改文件
因为在容器内不能修改文件,那就把容器文件拷贝到宿主机修改,修改后再拷贝到容器覆盖原文件。
退出容器(Ctrl+d),把 Tomcat 容器 bin 目录下的 catalina.sh 拷贝到宿主机:
在宿主机执行:(把容器文件拷贝到宿主机中备份)
docker cp 容器名:文件在容器中的路径 要备份的路径 (我是备份到data目录下)
# docker cp tomcat8080:/usr/local/tomcat/bin/catalina.sh /data/
在宿主机里编辑 catalina.sh 文件:
打开文件,找到 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS",修改为 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Duser.timezone=Asia/Shanghai" 。
保存文件,然后再拷贝到容器内:(把宿主机文件拷贝到容器中)
docker cp 在备份的路径 容器名:文件在容器中的路径
# docker cp /data/catalina.sh tomcat8080:/usr/local/tomcat/bin/
这样就覆盖了容器的原文件,然后重启 Tomcat 或重启容器。
5. 查看运行的 Tomcat 容器
# docker ps (正在运行的容器)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a70c28d11a0c 48dd385504b1 "catalina.sh run" 2 days ago Up 6 hours 0.0.0.0:8080->8080/tcp tomcat8080
# docker ps -a(所有的容器)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a70c28d11a0c 48dd385504b1 "catalina.sh run" 2 days ago Up 6 hours 0.0.0.0:8080->8080/tcp tomcat8080
启动一个已存在的容器的命令,a70是“容器ID”
# docker start a70
再看容器已经启动了:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a70c28d11a0c 48dd385504b1 "catalina.sh run" 2 days ago Up 6 hours 0.0.0.0:8080->8080/tcp tomcat8080
6. 试试用浏览器打开 Tomcat 界面
如果docker 镜像启动成功但是无法访问,看一下博客第二个解决办法
https://blog.csdn.net/weixin_43052839/article/details/91989394
这时在浏览器输入 IP:8080 就可访问默认的 Tomcat 界面了。
7. 部署Web应用(WAR工程)
获取容器的长ID(tomcat8080 是容器名):
# docker inspect -f '{{.Id}}' tomcat8080
a70c28d11a0c440339d383a3dc4bd258cf98a9c72826d929b68e7edce25ce813
进入容器(a70是容器ID的前三位数,当然也可以多写几位,只要 Docker 能唯一识别容器即可):
# docker exec -it a70 /bin/bash
执行后直接进入容器,命令提示符由系统的转为容器的了,root@ 后面的“9653b878cac6”是容器ID(短ID),冒号后面的“/usr/local/tomcat”是容器目录,这个目录是 Docker 内的目录不是系统目录。如下:
root@a70c28d11a0c:/usr/local/tomcat# pwd
root@9653b878cac6:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
顺便删除 Tomcat 的 webapps 目录下的所有内容:
root@a70c28d11a0c:/usr/local/tomcat# cd webapps/
root@a70c28d11a0c:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@a70c28d11a0c:/usr/local/tomcat/webapps# rm -fr *
root@a70c28d11a0c:/usr/local/tomcat/webapps# ls
退出容器用 exit 命令/ctrl+d:
root@a70c28d11a0c:/usr/local/tomcat/webapps# exit
直接回到了系统,命令提示符由容器的转为系统的了:
#
开始部署Web应用,很简单就是拷贝web包文件到容器中。
将要部署的web包拷贝到 Tomcat 容器的 webapps 目录下:(我web项目还是放在了宿主data目录下)
# docker cp 本地文件 容器ID:容器路径
# docker cp /data/ROOT.zip a70:/usr/local/tomcat/webapps/
进入容器看到了拷贝的web包文件:
# docker exec -it a70 /bin/bash
root@9653b878cac6:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
root@a70c28d11a0c:/usr/local/tomcat# cd webapps/
root@a70c28d11a0c:/usr/local/tomcat/webapps# ls
解压zip解压包
root@a70c28d11a0c:/usr/local/tomcat/webapps# unzip ROOT.zip
如果是tar包
root@a70c28d11a0c:/usr/local/tomcat/webapps# tar -zxvf ROOT.zip
8. 用浏览器访问部署的Web应用
打开浏览器输入 IP:8080就打开了
查看日志
#docker logs 容器名
#docker logs tomcat8080
关于docker 基于一个tomcat镜像来部署多个tomcat容器并运行
https://blog.csdn.net/weixin_43052839/article/details/91990860