如何在 CentOS 7 上安装和使用 Docker

Docker 是一种容器化技术,允许您快速构建,测试和部署应用程序;Docker 是便携式、自给自足的容器,几乎可以在任何地方运行。

在本教程中,我们将介绍如何在 CentOS 7 上安装 Docker 社区版并探索基本的 Docker 概念和命令。

先决条件

在继续本教程之前,请确保满足以下先决条件:

在 CentOS 上安装 Docker

虽然 Docker 软件包在官方 CentOS 7 软件仓库中可用,但它可能并不是最新版本。我们推荐从 Docker 的软件仓库安装最新版本的 Docker 。

请按照以下步骤在 CentOS 7 服务器上安装 Docker :

  1. 首先更新系统包并安装所需的依赖项:

    sudo yum update
    sudo yum install yum-utils device-mapper-persistent-data lvm2
  2. 接下来,运行以下命令,将 Docker 软件仓库添加到您的系统:

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. 现在已启用了 Docker 软件仓库,请输入以下命令,使用 yum 安装最新版本的 Docker CE (社区版):

    sudo yum install docker-ce
  4. 安装 Docker 软件包后,启动 Docker 守护程序并使其在系统引导时自动启动:

    sudo systemctl start docker
    sudo systemctl enable docker
  5. 要验证 Docker 服务是否正在运行,请输入:

    sudo systemctl status docker

    输出应该如下所示:

    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
    Active: active (running) since Wed 2018-10-31 08:51:20 UTC; 7s ago
    Docs: https://docs.docker.com
    Main PID: 2492 (dockerd)
    CGroup: /system.slice/docker.service
    ├─2492 /usr/bin/dockerd
    └─2498 docker-containerd --config /var/run/docker/containerd/containerd.toml
  6. 在撰写本文时,Docker 的当前稳定版本是 18.06.1, 通过以下命令打印 Docker 版本:

    docker -v
    Docker version 18.06.1-ce, build e68fc7a

在没有 sudo 的情况下执行 Docker 命令

默认情况下,管理 Docker 需要管理员权限。如果要以既不是 root 用户也不是 sudo 用户身份运行 Docker 命令,则需要将用户添加到 docker 用户组中,该 docker 用户组是在安装 Docker CE 软件包期间创建的。您可以输入以下命令:

sudo usermod -aG docker $USER

注销并重新登录,以便刷新组成员身份。

要验证 Docker 是否已成功安装并且您可以在不使用 sudo 的情况下运行 docker 命令,请发出以下命令,该命令将下载测试镜像,并在容器中运行,打印 “Hello from Docker” 消息并退出:

docker container run hello-world

输出应如下所示:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Docker 命令行界面

现在我们已经安装了 Docker ,让我们来看看 docker CLI 的基本语法。

docker 命令行采用以下形式:

docker [option] [subcommand] [arguments]

您可以通过运行不带参数 docker 命令来列出所有可用命令:

docker

如果您需要 [subcommand] 的更多帮助,只需输入:

docker [subcommand] --help

Docker 镜像

一个 Docker 镜像由一系列位于镜像的 Dockerfile 中表示指令的层组成。 一个镜像的 Dockerfile 组成一个可执行的软件应用。一个镜像是一个不可变的二进制文件,包括应用程序和运行应用程序所需的所有其他依赖项,如二进制文件,库和指令。简而言之, Docker 镜像本质上是 Docker 容器的快照。

Docker Hub 是基于云的注册服务,其中包括将 Docker 镜像保存在公共或私有软件仓库中的功能。

要在 Docker Hub 软件仓库中搜索镜像,只需使用 search 子命令。例如,要搜索 CentOS 镜像,请运行:

docker search centos

输出应如下所示:

NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos The official build of CentOS. 4257 [OK]
ansible/centos7-ansible Ansible on Centos7 109 [OK]
jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_… 94 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 52 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK]
tutum/centos Simple CentOS docker image with SSH access 39

正如你可以看到搜索结果打印的表格有 5 列: NAME, DESCRIPTION, STARS, OFFICIALAUTOMATED 。官方镜像是 Docker 与上游合作伙伴共同开发的镜像。

如果我们想下载 CentOS 7 的官方版本,我们可以使用 image pull 子命令来实现:

docker image pull centos
Using default tag: latest
latest: Pulling from library/centos
469cfcc7a4b3: Pull complete
Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Status: Downloaded newer image for centos:latest

根据您的 Internet 速度,下载可能需要几秒钟或几分钟。下载镜像后,我们可以列出镜像:

docker image ls

输出应如下所示:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world latest e38bc07ac18e 3 weeks ago 1.85kB
centos latest e934aafc2206 4 weeks ago 199MB

如果由于某种原因您要删除镜像,可以使用 image rm [image_name] 子命令执行此操作:

docker image rm centos
Untagged: centos:latest
Untagged: [email protected]:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Deleted: sha256:e934aafc22064b7322c0250f1e32e5ce93b2d19b356f4537f5864bd102e8531f
Deleted: sha256:43e653f84b79ba52711b0f726ff5a7fd1162ae9df4be76ca1de8370b8bbf9bb0

Docker 容器

镜像的实例称为容器。一个容器表示单个应用程序,进程或服务的运行时。

举一个可能不是最合适的类比:如果您是程序员,您可以将 Docker 镜像视为类,将 Docker 容器视为类的一个实例。

我们可以使用 docker container 子命令启动,停止,删除和管理容器。

以下命令将基于 CentoOS 镜像启动 Docker 容器。如果您本地没有镜像,它将首先下载它:

docker container run centos

乍一看,根本没有任何事情发生。嗯,那不是真的。 CentOS 容器在启动后立即停止了,因为它没有长时间运行的进程,我们没有提供任何命令,因此容器启动,运行空命令然后退出。

选项 -it 允许我们通过命令行与容器进行交互。要启动一个可交互的容器:

docker container run -it centos /bin/bash

正如您在容器启动时从输出中看到的那样,命令提示符已更改,这意味着您现在正在从容器内部进行操作:

[[email protected] /]#

要列出活动容器,请输入:

docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
79ab8e16d567 centos "/bin/bash" 22 minutes ago Up 22 minutes ecstatic_ardinghelli

如果您没有任何正在运行的容器,则输出将为空。

要查看活动和非活动容器,请使用选项 -a

docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
79ab8e16d567 centos "/bin/bash" 22 minutes ago Up 22 minutes ecstatic_ardinghelli
c55680af670c centos "/bin/bash" 30 minutes ago Exited (0) 30 minutes ago modest_hawking
c6a147d1bc8a hello-world "/hello" 20 hours ago Exited (0) 20 hours ago sleepy_shannon

要删除一个或多个容器,只需从上面复制容器 ID (或 ID )并将其粘贴到 container rm 子命令之后:

docker container rm c55680af670c

结论
您已经学习了如何在 CentOS 7 机器上安装 Docker 以及如何下载 Docker 镜像和管理 Docker 容器。您可能还想了解 Docker Compose ,它允许您定义和运行多容器 Docker 应用程序。

本教程几乎没有涉及 Docker 生态系统的表面。在我们的下一篇文章中,我们将继续深入探讨 Docker 的其他方面。要了解有关 Docker 的更多信息,请查看官方 Docker 文档。