Docker 安装(Centos版)

小小码农 2021年08月16日 1,078次浏览

1.前提条件

1.1 操作系统需求

  • Centos 7Centos 8(本文用Centos 7)
  • 必须启用centos-extras存储库。该存储库在默认情况下是启用的,如果已经禁用了它,则需要重新启用它。
  • 建议使用overlay2存储驱动。

查看centos-extras是否启用,输入如下命令:yum repolist,如果列repo name中存在CentOS-7 - Extras则表明是启用的,否则代表禁用(可通过输入命令yum repolist all | more展示全部仓库,查看列status状态),输入下边命令进行centos-extras开启操作

cd /etc/yum/repos.d/
vi CentOS-Base.repo

[extras]标签下,找到enabled属性,设置为enabled=1,保存退出即可。注意:此属性是默认开启的(当省略enabled属性时是当作开启状态的)

1.2 卸载旧版本(如果没有跳过)

Docker的旧版本被称为DockerDocker -engine。如果安装了这些组件,请卸载它们以及相关的依赖项。输入下方命令(如果以root用户登录,则忽略sudo,直接用yum即可)

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

如果yum报告没有安装这些包,那也没关系。
保留/var/lib/docker/目录中的imagescontainersvolumesnetworks等内容。Docker Engine包现在称为Docker-CE。Docker Engine包现在称为Docker-CE

名称解释:
Docker-CE 社区版、免费
Docker-EE 企业版、收费,提供一些高级特性
Docker Engine 历史版本的名称,现在已经更新为Docker-CEDocker-EE

2.安装方式

可以根据需要,以不同的方式安装Docker引擎:

大多数用户设置Docker的存储库并从它们进行安装,以方便安装和升级任务。这是推荐的方法。

有些用户下载RPM包并手动安装,完全手动管理升级。这在一些情况下很有用,例如在无法访问互联网的系统上安装Docker。

在测试和开发环境中,一些用户选择使用方便的自动脚本来安装Docker。不建议在生产环境使用脚本进行安装。

1.使用存储库进行安装

在新主机上首次安装Docker-Engine之前,需要先设置Docker存储库。之后,您可以从存储库安装和更新Docker。

设置存储库

安装yum-utils包(它提供yum-config-manager实用程序)并设置稳定存储库(这里的存储库已经更改为阿里云的了,默认国外的下载很慢)。

 sudo yum install -y yum-utils
 sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

可选:启用nightly(夜间)存储库或test(测试)存储库。
这些存储库包含在上面的docker.repo文件中,但默认情况下是禁用的。您可以将它们与稳定存储库一起启用。下面的命令启用夜间存储库:
sudo yum-config-manager --enable docker-ce-nightly
要启用测试通道,执行如下命令:
sudo yum-config-manager --enable docker-ce-test
可以通过运行带有--disable标志的yum-config-manager命令禁用夜间存储库或测试存储库。要重新启用它,请使用--enable标志。下面的命令禁用夜间存储库:
sudo yum-config-manager --disable docker-ce-nightly

安装Docker Engine(Docker 引擎)

  1. 安装Docker Engine和containerd的最新版本,或者进入下一步安装特定版本,如下命令:
    sudo yum install docker-ce docker-ce-cli containerd.io
    如果提示接受GPG密钥,请验证指纹是否匹配060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果匹配,请接受。

  2. (a)如果想安装指定版本的Docker,可以在repo文件里列出和排序的版本,可使用以下命令,这个例子按照版本号对结果进行排序,从最高到最低,并被截断:

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

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

返回的列表取决于启用了哪些存储库,并且特定于CentOS版本(在本例中由.el7后缀表示)。

  1. (b)根据包的完全限定包名安装特定的版本,即包名(docker-ce)加上版本字符串(第二列),从第一个冒号(:)开始,直到第一个用连字符(-)分隔的连字符。例如,docker-ce-18.09.1。
    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

无论是安装最新版本还是安装指定版本,安装完之后不会启动Docker。它还创建了一个docker组,但是,默认情况下,它不添加任何用户到组。

有多个Docker库?
如果您启用了多个Docker库,在yum installyum update命令中安装或更新时不指定版本,总是安装可能的最高版本,这可能不适合您的稳定性需求。

  1. 启动Docker
    sudo systemctl start docker

  2. 通过运行hello-world镜像来验证Docker引擎是否正确安装。
    sudo docker run hello-world
    这个命令下载一个测试镜像并在容器中运行它。当容器运行时,它打印一条消息并退出。

  3. 设置开机自启动Docker
    systemctl enable docker
    centos 中启动服务后缀名.service可以省略,也可以输入全名称docker.service,即systemctl enable dockersystemctl enable docker.service是等价的。

以上就是安装和运行Docker引擎。使用sudo运行Docker命令。继续使用Linux postinstall以允许非特权用户运行Docker命令和其他可选配置步骤。

2.从包中安装

如果不能使用Docker的存储库来安装Docker,可以依据centos版本下载对应的.rpm文件并手动安装它。每次升级Docker Engine时,都需要下载一个新文件。

stable为稳定版
nightly为夜间版
test为测试版

  • 步骤二
    安装Docker引擎,将下面的路径更改为您下载Docker包的路径。
    sudo yum install /path/to/package.rpm
  • 步骤三
    启动 Docker
    sudo systemctl start docker
  • 步骤四
    通过运行hello-world镜像来验证Docker引擎是否正确安装。
    sudo docker run hello-world
  • 步骤五
    设置开机自启动Docker
    systemctl enable docker

如果要升级Docker引擎,请下载更新的包文件并重复安装过程,使用yum -y upgrade而不是yum -y install,并指向新文件。

3.使用脚本进行安装

Docker在get.docker.com提供了一个方便的脚本,可以快速且非交互式地将Docker安装到开发环境中。不推荐在生产环境中使用这个方便的脚本,但是可以作为一个示例来创建适合您需要的配置脚本。该脚本的源代码是开源的,可以在GitHub上的docker-install存储库中找到。
在本地运行脚本之前,一定要检查从互联网下载的脚本。在安装之前,请先了解便利性脚本的潜在风险和局限性:

  • 该脚本需要root或sudo权限才能运行。
  • 该脚本尝试检测您的Linux发行版和版本,并为您配置包管理系统,并且不允许您自定义大多数安装参数。
  • 该脚本无需确认即可安装依赖项和建议。这可能会安装大量的包,这取决于您的主机的当前配置。
  • 默认情况下,该脚本安装Docker、containerd和runc的最新稳定版本。当使用此脚本配置机器时,可能会导致Docker意外的主要版本升级。在部署到生产系统之前,始终在测试环境中测试(主要)升级。
  • 该脚本不是为升级现有Docker安装而设计的。当使用该脚本更新现有安装时,依赖项可能不会更新到预期的版本,从而导致使用过时的版本。

提示:在运行脚本之前预览脚本步骤
你可以使用DRY_RUN=1选项运行脚本,以了解在安装过程中脚本将执行哪些步骤:

curl -fsSL https://get.docker.com -o get-docker.sh
DRY_RUN=1 sh ./get-docker.sh

下边这个例子从getdocker.com下载这个脚本,并运行它在Linux上安装Docker的最新稳定版本:

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

docker服务在基于Debian的发行版上自动启动。在基于RPM的发行版上,如CentOS、Fedora、RHEL或SLES,您需要使用适当的systemctl或service命令手动启动它。说明默认情况下,非root用户不能运行Docker命令。

使用Docker作为一个non-privileged用户(非特权用户),或安装在rootless mode(无根模式)?
安装脚本需要root或sudo权限来安装和使用Docker。如果您想要授予非root用户对Docker的访问权限,请参考Linux安装后的步骤。Docker也可以在没有根权限的情况下安装,或者配置为在无根模式下运行。有关在无根模式下运行Docker的说明,请参阅以非根用户(无根模式)运行Docker守护进程

安装预发版本

Docker还在test.docker.com上提供了一个方便的脚本,用于在Linux上安装Docker的预发行版。这个脚本等价于getdocker.com上的脚本,但是配置您的包管理器以启用来自我们包库的“测试”通道,其中包括Docker的稳定版本和预发布版本(beta版本,候选版本)。使用此脚本可以获得对新版本的早期访问,并在它们作为稳定版本发布之前在测试环境中评估它们。
要从"test"通道安装Linux上最新版本的Docker,请运行:

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

3.卸载 Docker Engine

  1. 卸载Docker Engine、CLI和Containerd包:
    sudo yum remove docker-ce docker-ce-cli containerd.io
  2. Images(镜像)、containers(容器)、volumes(存储卷),或者 customized configuration(自定义配置文件)等文件不会自动删除。需要手动删除,下边命令删除镜像、容器、存储卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

您必须手动删除任何编辑过的配置文件。

可能会遇到的问题

  • Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
    yum provides '*/applydeltarpm'
    yum install deltarpm -y
  • No Presto metadata available for docker-ce-stable
    前两个命令解决docker-ce下载慢的问题
    yum install -y yum-utils
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install docker-ce -y

启动、开机自启动、关闭等docker

  • 启动docker
    systemctl start docker
  • 开机自启动docker
    systemctl enable docker
  • 关闭docker
    systemctl stop docker.socket
    systemctl stop docker
  • 重启docker
    systemctl restart docker