版权声明:本文为(haibing.org)原创文章,转载请附上本文链接。
本文永久链接:http://haibing.org/780

概述
在CentOS7上安装好Docker,只是一个开始,后面的路还很长。
怎么安装Docker:在 CentOS 7上安装 docker-ce

安装完就要开始用起来,现在我们就通过几个实例来简单讲一下Docker的应用,让大家有个直观的认识。
要在容器中运行程序或应用,有两种方法:
一种是直接使用别人制作好的镜像,直接下载过来使用就可以;
一种是使用Dockerfile文件自己制作镜像。(但也是在一个基础镜像上制作)

下面我们以运行Tomcat和Nginx两个应用为例进行讲解。
其中Tomcat直接使用别人制作好的镜像来运行,Nginx我们自己制作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去搜索查看。
通过API还需要获取token什么的,会稍微比较麻烦,以后讲。
通过网站查看详细信息的话,官方的镜像可以通过访问“https://hub.docker.com/_/镜像名”来查看,非官方的镜像可以通过访问“https://hub.docker.com/r/镜像名”来查看。

官方的tomcat镜像:

非官方的dordoka/tomcat镜像:

我们这里使用官方的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)

如果出现如上的页面,就说明这个tomcat容器运行正常了。

我们可以使用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

二、在容器中运行Nginx
通过上面tomcat的例子,大家对Docker容器已经有了一定的认识。
Docker更好的地方是可以完全定制化自己的镜像和容器。

我们可以通过创建Dockerfile文件定制化自己的镜像。
Dockerfile文件支持的指令大概有十三个:
FROM
MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR

通过这十三个命令,我们就可以构建我们自己的镜像了。

本文隐藏内容全文需 点击文章最后链接查看

前往微信公众号查看全文:
https://mp.weixin.qq.com/s/TtdEtaUvMFKqLAVEoHLkCw