Docker容器的使用

1. Docker简介

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

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

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

Docker的主要应用场景:

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

2. Docker的核心概念

通过上面的架构图了解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 的安装

1. 安装docker
yum install docker
2. 输入y确认安装
3. 启动docker
[root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl start docker
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker -v
Docker version 1.13.1, build 8633870/1.13.1
4. 设置开机启动docker
[root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
5. 停止docker
[root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl stop docker

4. Docker镜像操作

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

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. 容器操作

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

1. 搜索镜像
docker search tomcat
2. 拉取镜像
docker pull tomcat
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat    latest              ca9e2fccef98        4 days ago          463 MB
3. 根据镜像运行容器
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker run --name mytomcat -d tomcat:latest
5ae1e2cf28623a66dea99c40ad8cef564a681591507f5723fafca73242f63c51
4. 查看运行中的容器
[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
5. 查看所有容器
[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
6. 停止运行中的容器
[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
7. 启动容器
[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
8. 删除容器
[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: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口

 

查看容器日志,可通过名称或镜像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
···

其他命令不再一一介绍,可参考博客:

Docker命令分类及使用场景分布(脑图)

更多命令参考:https://docs.docker.com/engine/reference/commandline/docker/  。

原文地址:https://www.cnblogs.com/zjfjava/p/9901487.html