1. Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的主要应用场景:


  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

2. Docker的核心概念

Docker容器的使用_redis

通过上面的架构图了解Docker的核心组件及作用:


  • docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
  • docker客户端(Client):连接docker主机进行操作;
  • docker仓库(Registry):用来保存各种打包好的软件镜像;
  • docker镜像(Images):软件打包好的镜像;放在docker仓库中;
  • docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用。

使用Docker的步骤:


  1. 安装Docker;
  2. 去Docker仓库找到这个软件对应的镜像;
  3. 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
  4. 对容器的启动停止就是对软件的启动停止。

3. 安装Docker

采用CentOs7.4对Docker进行安装的操作,记录如下:

首先进行内核版本检查,必须是3.10及以上

Docker容器的使用_docker_02

之后进行Docker 的安装


yum install docker
[root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl start docker
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker -v
Docker version 1.13.1, build 8633870/1.13.1
[root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl stop docker


4. Docker镜像操作

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

Docker容器的使用_tomcat_03

4.1 镜像检索

镜像检索实际上是从https://hub.docker.com/检索,根据列出的镜像名称来进行后续的拉取操作。也可以直接到该网站搜索相关镜像直接拉取。


[root@izbp1cq2wdg9kxunr0sz02z ~]# docker search redis
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/redis Redis is an open source key-value store th... 5999 [OK]
docker.io docker.io/bitnami/redis Bitnami Redis Docker Image 94 [OK]
···



  • NAME:镜像仓库源的名称
  • DESCRIPTION:镜像的描述
  • OFFICIAL:是否docker官方发布
  • AUTOMATED:是否自动构建

4.2 镜像拉取


[root@izbp1cq2wdg9kxunr0sz02z ~]# docker pull redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ...
latest: Pulling from docker.io/library/redis
f17d81b4b692: Pull complete
b32474098757: Pull complete
8980cabe8bc2: Pull complete
2719bdbf9516: Pull complete
f306130d78e3: Pull complete
3e09204f8155: Pull complete
Digest: sha256:481678b4b5ea1cb4e8d38ed6677b2da9b9e057cf7e1b6c988ba96651c6f6eff3
Status: Downloaded newer image for docker.io/redis:latest


默认拉取最新版本的镜像,如果需要拉取特定的版本号的软件镜像,在拉取命令的镜像名后面通过 :版本号 的方式进行拉取。

如果担心下载速度慢,可以到国内的网易镜像中心https://c.163yun.com/hub#/m/home/进行查找,大部分基本软件镜像在这里都能够找到,相应的拉取命令在镜像库中也能看到。

4.3 镜像列表

列出本地主机上的镜像。


[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/redis latest 1babb1dde7e1 2 weeks ago 94.9 MB



  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签(版本)
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

4.4 镜像删除


[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/redis latest 1babb1dde7e1 2 weeks ago 94.9 MB
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker rmi 1babb1dde7e1
Untagged: docker.io/redis:latest
Untagged: docker.io/redis@sha256:481678b4b5ea1cb4e8d38ed6677b2da9b9e057cf7e1b6c988ba96651c6f6eff3
Deleted: sha256:1babb1dde7e1fc7520ce56ce6d39843a074151bb192522b1988c65a067b15e96
Deleted: sha256:68f3c8e2388da48dd310e4642814feca68081445635716be58d7ebb69b611922
Deleted: sha256:b18dd54614f34239abc8a1165c90d5416a413d1f4c3c6711648e49e26e4445e7
Deleted: sha256:bf9efae34b1e94384b8cd011cf71591efab734b57961017bad608be56b7b1c9c
Deleted: sha256:7ae66985fd3a3a132fab51b4a43ed32fd14174179ad8c3041262670523a6104c
Deleted: sha256:bf45690ef12cc54743675646a8e0bafe0394706b7f9ed1c9b11423bb5494665b
Deleted: sha256:237472299760d6726d376385edd9e79c310fe91d794bc9870d038417d448c2d5
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@izbp1cq2wdg9kxunr0sz02z ~]#


5. 容器操作

当运行下载的软件镜像时,就会产生一个容器,此容器即代表一个正在运行的软件。

Docker容器的使用_docker_04


docker search tomcat
docker pull tomcat
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tomcat latest ca9e2fccef98 4 days ago 463 MB
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker run --name mytomcat -d tomcat:latest
5ae1e2cf28623a66dea99c40ad8cef564a681591507f5723fafca73242f63c51
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ae1e2cf2862 tomcat:latest "catalina.sh run" 13 seconds ago Up 13 seconds 8080/tcp mytomcat
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ae1e2cf2862 tomcat:latest "catalina.sh run" 28 seconds ago Up 28 seconds 8080/tcp mytomcat
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker stop 5ae1e2cf2862
5ae1e2cf2862
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ae1e2cf2862 tomcat:latest "catalina.sh run" 2 minutes ago Exited (143) 35 seconds ago mytomcat
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker start 5ae1e2cf2862
5ae1e2cf2862
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ae1e2cf2862 tomcat:latest "catalina.sh run" 5 minutes ago Up 7 seconds 8080/tcp mytomcat
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker stop 5ae1e2cf2862
5ae1e2cf2862
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker rm 5ae1e2cf2862
5ae1e2cf2862
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@izbp1cq2wdg9kxunr0sz02z ~]#


需要注意的是,我们启动容器中的某个端口并不能自动映射到虚拟机上对应的端口,即按照上面的方式启动容器之后,访问虚拟机ip:8080是不能访问到tomcat的,这需要我们在运行容器时做一下端口的映射:


[root@izbp1cq2wdg9kxunr0sz02z ~]# docker run -d -p 8888:8080 tomcat
57546c6c4ac4f7386bbb2f682734bd4cd10025cee6fa124fdec70909964e8c51
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57546c6c4ac4 tomcat "catalina.sh run" 7 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp practical_meitner



  • -d:后台运行
  • -p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口

 Docker容器的使用_redis_05


查看容器日志,可通过名称或镜像id
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57546c6c4ac4 tomcat "catalina.sh run" 7 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp practical_meitner
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker logs practical_meitner
03-Nov-2018 13:32:57.183 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.34
03-Nov-2018 13:32:57.185 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Sep 4 2018 22:28:22 UTC
···