翻译自 Get Docker CE for CentOS | Docker Docs,以 Docker 官方文档 为准

安装前的准备

系统要求

  • 官方推荐使用 CentOS 7维护版本,已经归档的版本不受支持或未经测试
  • 需要启用centos-extrasrepository。在 CentOS 7 中这个仓库是默认启用的,如果之前有将其禁用,则需要重新启用
  • 推荐使用overlay2作为 Docker 的存储驱动

卸载旧版本

旧版本的 Docker 在 CentOS 中的包名为dockerdocker-engine。如果之前安装了 Docker 的旧版本,需要先卸载旧版 Docker 及相关依赖

> sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

yum提示卸载成功没有找到相关包,即可进行下一步操作。

注意/var/lib/docker/目录下的内容,包括镜像、容器、卷组、网络等文件将被保留Docker CE 的新包名为docker-ce

安装 Docker CE

有以下三种方法安装 Docker CE,可根据实际需要选择:

  1. 建立 Docker 仓库:安装过程及后续的更新方便,Docker 官方推荐
  2. 下载 RPM 包手动安装:手动管理更新。适合离线环境
  3. 通过安装脚本自动安装:适合测试及开发环境

方法 1:建立 Docker 仓库

首次安装 Docker CE 前需要建立 Docker repository,之后可通过仓库安装并更新 Docker。

建立仓库

1.安装所需软件包yum-utils提供了yum-config-manager工具,存储驱动devicemapper则依赖于device-mapper-persistent-datalvm2

> sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2.使用以下命令建立stable版本的 repository

> sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.可选启用edgetest仓库。这些仓库包含在docker.repo文件中,但默认是禁用的。可以将它们与stable仓库共同启用。

> sudo yum-config-manager --enable docker-ce-edge
> sudo yum-config-manager --enable docker-ce-test

使用带--disable参数的yum-config-manager命令即可禁用edgetest仓库,使用--enable参数则会重新启用。例如下面的命令将禁用edge仓库:

> sudo yum-config-manager --disable docker-ce-edge

Docker17.06版本开始,stable仓库的 releases 也会推送至edgetest仓库中。
点击此处查看 Docker 官方关于stableedge的说明

安装 Docker CE

1.使用以下命令安装最新版 Docker CE

> sudo yum install docker-ce

如果提示是否接受 GPG 密钥,则需验证密钥指纹是否符合下面的内容,若符合即可点击 accept 继续安装:

060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35

如果启用了多个 Docker 仓库,并且在yum installyum update命令中没有指明版本,则会安装所有仓库中版本号最新的 Docker

2.要安装指定版本的 Docker CE,则需要从仓库中列出所有可用的版本,再根据需要选择安装:

> yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64            18.09.0.ce-1.el7.centos             docker-ce-stable

此时安装包名的格式为docker-ce-<VERSION STRING>。例如安装18.03.0版本的 Docker CE:

> sudo yum install docker-ce-18.03.0.ce

此时 Docker 应该已经安装完成,但还没有启动。新的用户组docker也已创建,目前为空。

3.启动 Docker

> sudo systemctl start docker

4.运行hello-world镜像以验证 Docker 是否正确安装

> sudo docker run hello-world

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

升级 Docker CE

如需升级 Docker CE,则可根据上述安装教程,选择安装最新版docker-ce,即可完成升级。

方法 2:下载 RPM 包手动安装

安装 Docker CE

如果无法使用 Docker 仓库,可以下载.rpm安装包手动安装 Docker CE

1.前往https://download.docker.com/linux/centos/7/x86_64/stable/Packages/下载对应版本的 RPM 安装包

2.使用yum命令安装 RPM 包

> sudo yum install /path/to/package.rpm

3.启动 Docker

> sudo systemctl start docker

4.运行hello-world镜像以验证 Docker 是否正确安装

> sudo docker run hello-world

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

升级 Docker CE

如需升级,则可下载新版本的 RPM 安装包,使用yum upgrade命令升级:

> sudo yum -y upgrade /path/to/package.rpm

方法 3:通过安装脚本自动安装

通过 Docker 提供的一键安装脚本可以在开发环境中快速安装 Docker CE,且无需交互。get.docker.comtest.docker.com 分别对应edgetest版本,脚本源码存放在 docker-install 仓库 中。

Docker 官方不推荐在生产环境中使用安装脚本

下面的示例将使用 get.docker.com 提供的脚本安装 Docker CE 的最新发布版本。如果要安装最新测试版本,只需将脚本替换为 test.docker.com,并将下面示例命令中的get替换为test

> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh

<output truncated>

如果需要让非root用户使用 Docker,则使用以下命令将用户添加至docker用户组

> sudo usermod -aG docker your-user

注销并重新登录,即可生效。之后启动 Docker

> sudo systemctl start docker

运行hello-world镜像以验证 Docker 是否正确安装

> sudo docker run hello-world

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

卸载 Docker CE

1. 卸载 Docker 安装包

> sudo yum remote docker-ce

2. 删除相关文件

主机上的镜像、容器、卷组以及自定义的配置文件需要手动删除

> sudo rm -rf /var/lib/docker

参考资料

  1. Get Docker CE for CentOS | Docker Docs
  2. Post-installation steps for Linux | Docker Docs
  3. Docker Docs