如何在Fedora 32上安装和配置Docker-CE/Moby引擎

从官方存储库安装Moby-Engine

安装“moby-engine”这是在发行版上使用docker客户机-服务器体系结构处理容器的最简单、最快捷的方法。我们只需使用dnf(Fedora软件包管理器)并运行以下命令:

$sudo dnf install docker
Last metadata expiration check: 1:38:14 ago on Sun 03 Jan 2016 02:22:22 PM CEST.
Dependencies resolved.
================================================================================
 Package             Arch     Version                           Repo       Size
================================================================================
Installing:
 moby-engine         x86_64   19.03.8-1.ce.gitafacb8b.fc32      fedora     51 M
Installing dependencies:
 container-selinux   noarch   2:2.132.0-1.fc32                  updates    48 k
 containerd          x86_64   1.3.3-1.fc32                      updates    32 M
 libbsd              x86_64   0.10.0-2.fc32                     fedora    106 k
 libnet              x86_64   1.1.6-19.fc32                     fedora     64 k
 runc                x86_64   2:1.0.0-144.dev.gite6555cc.fc32   fedora    2.7 M
Installing weak dependencies:
 criu                x86_64   3.13-5.fc32                       fedora    492 k
Transaction Summary
================================================================================
Install  7 Packages
Total download size: 86 M
Installed size: 314 M
Is this ok [y/N]:

安装Docker-CE

Docker社区版(CE)是“官方”Docker版本,正如我们之前所说的那样,基于Moby-Project。
在Fedora 32上安装需要更多步骤。
如果之前,如果我们之前安装了Fedora存储库(Moby-Engine)的Docker版本,请务必通过运行以下命令卸载它:

$sudo dnf autoremove docker

如果我们之前构建了一些镜像或者创建了容器或者卷,则别担心:将会保留。

一旦我们确定先前已安装的软件包,我们可以将Docker-CE存储库添加到我们的分发软件来源,因此我们可以与未来的发布保持最新状态。
我们要做的第一件事就是下载“docker-ce.repo”文件:

$curl -O https://download.docker.com/linux/fedora/docker-ce.repo

将“docker-ce-stable”设置为启用:

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/fedora/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/fedora/gpg

当dnf解析.repo文件时,$releasever变量按照其名称展开为发行版版本,在本例中为32。因为在撰写本文时,没有一个docker ce存储库明确地专用于Fedora 32,所以我们必须用一个静态值“31”(Fedora的早期版本)替换这个变量。我们可以使用'sed'命令轻松执行更改:

# Be sure to use single quotes!
$sed -i 's/$releasever/31/g' docker-ce.repo

使用上面的命令,我们将文件中出现的每个“$releasever”替换为“31”。为了使命令正常工作,替换模式必须像上面那样用单引号括起来(或者必须转义“$”字符)。
正如您所注意到的,默认情况下只启用了存储库的“stable”分支(enabled=1)。我建议你还是这样吧,除非你有什么特别的要求。
要使dnf使用docker ce存储库,我们必须将“.repo”文件移动到“/etc/yum.repos.d”目录:

$sudo mv docker-ce.repo /etc/yum.repos.d/

执行以下命令以安装我们需要的Docker-CE软件包:

$sudo dnf install docker-ce docker-ce-cli containerd.io
Docker CE Stable - x86_64                                                                          17 kB/s | 8.9 kB     00:00
Dependencies resolved.
==================================================================================================================================
 Package                           Architecture           Version                          Repository                        Size
==================================================================================================================================
Installing:
 containerd.io                     x86_64                 1.2.13-3.1.fc31                  docker-ce-stable                  23 M
 docker-ce                         x86_64                 3:19.03.8-3.fc31                 docker-ce-stable                  23 M
 docker-ce-cli                     x86_64                 1:19.03.8-3.fc31                 docker-ce-stable                  39 M
Installing dependencies:
 container-selinux                 noarch                 2:2.132.0-1.fc32                 updates                           48 k
 libcgroup                         x86_64                 0.42.2-1.fc32                    fedora                            68 k
Transaction Summary
==================================================================================================================================
Install  5 Packages
Total download size: 85 M
Installed size: 363 M
Is this ok [y/N]:

Moby-Engine VS Docker-CE

有两种方法可以在Fedora32上获得docker:我们可以从官方发行库安装“docker”软件包,或者添加docker ce软件包并从那里安装所需的软件包。如果我们选择第一个选项,“moby engine”软件包将安装在我们的发行版上,而不是实际的“docker”版本。如果我们选择第二个,我们将获得“官方”docker engine社区版的最新版本。

两者有什么区别?”Moby”是docker创建的一个“上游”开源项目,目的是方便地分发其代码库并将其划分为多个组件。我们直接从Fedora官方存储库获得的安装“moby engine”的软件由发行版基于此upsteam项目进行打包,而“docker ce”(以及“docker ee”-Enterprise Edition)是由“docker”项目在同一基础上创建的产品。两者都是在开源许可下发布的,并且都是免费的。

为cgroups启用后向兼容性

自Fedora 31以来,Red Hat赞助的发行版在默认情况下已切换到cgroup v2(控制组)。Cgroup是包含在Linux内核中的机制,用于分层组织进程并相应地分配资源。Docker还不支持cgroups的'2'版本,因此我们必须禁用它。为此,我们必须在引导时将'systemd.unified_cgroup_hierarchy=0'参数传递给内核。

打开“/etc/default/grub”文件。
修改如下:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

grub_cmdline_linux行中,我们只需要添加我们上面提到的参数:

GRUB_CMDLINE_LINUX="rhgb quiet systemd.unified_cgroup_hierarchy=0"

完成后,保存修改后的文件并重建GRUB配置:

$sudo grub2-mkconfig -o /boot/grub2/grub.cfg

要使更改有效,我们需要重新启动计算机。

修复DNS在Docker内无法工作的问题

现在,让我们尝试运行一个基于busybox官方图像的非常简单的容器。
然后ping www.google.com

sudo docker run --rm -it busybox ping -c 3 www.google.com
ping: bad address 'www.google.com'

ping提示这是一个糟糕的地址,因为是DNS解析不适用于容器内部。

为什么会发生这种情况?
当Docker运行时,它需要执行一些防火墙调整,并使用IP伪装。
firewalld是fedora上安装的默认防火墙管理器,它阻止了此行为。

解决此问题的最简单方法是显式地将“docker0”接口添加到受信任的防火墙区域。

我们可以通过“firewall cmd”实用程序执行此操作:

$sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0 && sudo firewall-cmd --reload

现在再次ping,就正常了。

$sudo docker run --rm -it busybox ping -c 3 www.google.com
PING www.google.com (216.58.198.36): 56 data bytes
64 bytes from 216.58.198.36: seq=0 ttl=51 time=31.559 ms
64 bytes from 216.58.198.36: seq=1 ttl=51 time=30.417 ms
64 bytes from 216.58.198.36: seq=2 ttl=51 time=30.154 ms
--- www.google.com ping statistics --
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 30.154/30.710/31.559 ms

启动Docker守护程序

无论我们是从专用存储库还是从“moby-engine”安装“docker ce”,一旦安装了软件包,要真正使用容器,我们都需要启动“docker”守护进程,并可以选择在系统启动引导时自动启动。

要执行这两个操作,我们可以使用'systemctl'命令并运行:

$sudo systemctl enable --now docker

此时,我们的系统上安装了Docker-CE或者Moby-Engine,守护程序也运行了。
然而,我们需要对Docker执行的一些调整,以便在我们的分发上正常工作。

日期:2020-07-07 20:55:08 来源:oir作者:oir