从官方存储库安装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执行的一些调整,以便在我们的分发上正常工作。