通过实例讲解Docker:在Docker中搭建Tomcat应用
概述
在CentOS7上安装好Docker,只是一个开始,后面的路还很长。
安装完就要开始用起来,现在我们就通过几个实例来简单讲一下Docker的应用,让大家有个直观的认识。 要在容器中运行程序或应用,有两种方法: 一种是直接使用别人制作好的镜像,直接下载过来使用就可以; 一种是使用Dockerfile文件自己制作镜像。(但也是在一个基础镜像上制作)
一、在容器中运行Tomcat
先查询Docker官网上有提供哪些Tomcat版本
# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati¡ 2523 [OK]
tomee Apache TomEE is an all-Apache Java EE certif¡ 67 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base¡ 53 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 29 [OK]
kubeguide/tomcat-app Tomcat image for Chapter 1 27
consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]
aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 11 [OK]
可以根据描述来查看自己需要哪个tomcat版本。 想看这个镜像的详细信息的话,比如有哪些版本,可以使用API来获取,也可以直接打开docker.com去搜索查看。 通过网站查看详细信息的话,官方的镜像可以通过访问“https://hub.docker.com/_/镜像名"来查看,非官方的镜像可以通过访问“https://hub.docker.com/r/镜像名”来查看。
我们这里使用官方的tomcat镜像,也就是stars数最多(2523)的那个。 通过docker pull把镜像拉取到本地,如果镜像名不带上版本号,默认是获取最新版latest的。
# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
092586df9206: Pull complete
ef599477fae0: Pull complete
4530c6472b5d: Pull complete
d34d61487075: Pull complete
272f46008219: Pull complete
12ff6ccfe7a6: Pull complete
f26b99e1adb1: Pull complete
21bec9c8ea28: Pull complete
b8a32f28e27c: Pull complete
94fdd0ba0430: Pull complete
Digest: sha256:bb4ceffaf5aa2eba6c3ee0db46d863c8b23b263cb547dec0942e757598fd0c24
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
已经把tomcat最新版latest下载到本地了,可以使用docker images命令查看。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 8973f493aa0a 4 days ago 508MB
hello-world latest fce289e99eb9 8 months ago 1.84kB
可以看到,我们已经把tomcat镜像下载到本地了,大小508MB。现在我们就可以使用docker run来运行这个tomcat镜像了。 前面我们也可以直接执行docker run命令运行镜像,docker找不到镜像时,就会去先下载镜像再运行。
# docker run -p 8080:8080 -d tomcat
84b4b9700d3a433ec5c8501b5fd83c1d0e713e37e4ee6080c82c26d941223628
-p:本地端口:容器中tomcat的端口(本地端口可以随便指定一个,不一定要跟容器中的端口对应,比如也可以写8040:8080) -d:后台运行容器
运行后,我们可以打开http://ip地址:8080来访问这个tomcat应用(如果本地指定的是8040,那么地址就是http://ip地址:8040)
我们可以使用docker ps命令来查看正在运行的容器。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
84b4b9700d3a tomcat "catalina.sh run" 46 minutes ago Up 46 minutes 0.0.0.0:8080->8080/tcp xenodochial_golick
CONTAINER ID:容器的ID号,我们起停容器、删除容器都可以使用这个ID IMAGE:使用的镜像名 COMMAND:容器内应用执行的命令 CREATED:容器制作的时长 STATUS:容器的状态,一般有UP、EXIT。还有运行时长。 PORTS:本地端口对应容器内部端口 NAMES:容器的名称,我们前面执行docker run时没有指定容器名称,默认会随机分配一个名称。
docker ps也可以加上-a参数,查看所有的容器(正在运行的,还有退出的)
# docker ps -a
容器正常运行后,我们就可以使用docker exec命令进入到这个容器内部进行操作。
# docker exec -it 容器ID或者容器名称 bash
# docker exec -it 84b4b9700d3a bash
root@84b4b9700d3a:/usr/local/tomcat# hostname
84b4b9700d3a
容器主机名默认是容器的ID号。 因为容器的基础架构就是一个精简的Linux系统,所以容器内可以执行大部分的Linux命令。
root@84b4b9700d3a:/# cat /etc/issue
Debian GNU/Linux 9 \\n \\l
root@84b4b9700d3a:/# ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
前面我们使用docker run运行镜像时,参数比较简单,比如没有设置容器的名称,也没有做其它的设置。 但一般生产中,我们会需要更复杂的设置,使我们管理和使用起来更方便。 比如我们可以设置一个好记的容器名称,可以把本地的目录挂载到容器内。
# docker run --name tomcat -p 8080:8080 -v /opt/tomcat/test:/usr/local/tomcat/webapps/test -d tomcat
命令说明:
-p 8080:8080:本地主机端口:容器内tomcat的端口
-v /opt/tomcat/test:/usr/local/tomcat/webapps/test:将本地主机目录/opt/tomcat/test挂载到容器的/usr/local/tomcat/webapps/test上。这样你只要把代码存放进本地主机的目录/opt/tomcat/test中就可以了。
除了目录挂载进容器中,我们还可以使用docker cp命令把本地主机上的目录或文件复制进容器内。
# docker cp /tmp/test.html 84b4b9700d3a:/usr/local/tomcat/
把本地主机上的/tmp/test.html复制进一个容器ID为84b4b9700d3a的/usr/local/tomcat/内。
复制完,我们可以进容器内看看是否成功。
# docker exec -it 84b4b9700d3a bash
root@84b4b9700d3a:/usr/local/tomcat# ls -la test.html
-rw-r--r-- 1 root root 0 Sep 24 07:59 test.html