Moby vs Docker CE

Fedora 32 都发布好久了,然而 Docker 官方迟迟没有发布适用于 Fedora 32 的 Docker CE rpm包。

当然,肯定不只老灯一个人在关注这个问题, 这不, docker官方repo里有人提issue了:

Please provide repo for docker-ce on Fedora 32 #955

然后 Fedora 官方博客写了一篇名叫《 如何在Fedora 32上安装Docker》的教程, 然后老灯一看,这哪是安装什么Docker, 这是安装 Moby 啊。

很久以前, Docker 还是 Docker, 直到有一天, Docker 公司将开源项目重命名为了 Moby, 现在大家用的免费的 Docker 全称应该叫 Docker CE. 对于这段往事感兴趣的童鞋可自行施展Google-Fu, 老灯这里就不多说了。

那么,Moby 和 Docker 的区别是什么?

根据 Docker 官方的说明(https://www.docker.com/blog/introducing-the-moby-project/):

Moby is designed for system builders, who want to build their own container based systems, not for application developers, who can use Docker or other container platforms. Participants in the Moby project can choose from the library of components derived from Docker or they can elect to “bring your own components” (BYOC) packaged as containers with the option to mix and match among all of the components to create a customized container system.

另外一个文章也有类似的说明 https://www.cio.com/article/3191344/why-docker-created-the-moby-project.html

“Essentially, Docker is building a LEGO club for the ecosystem with Docker at the center of it,” said Docker’s VP of marketing David Messina.

The Moby Project will become a place where experimental, bleeding edge features of Docker will take shape. It will be the place where you will see the next release of Docker. The Moby Project is to Docker what Fedora is to Red Hat Enterprise Linux

因此,这二者的定位是完全不同的。Moby 是用来给你打造你自己的 Docker 的,而不是给应用开发者使用。与其凑合着安装一个不知道在什么情况下会有坑的 Moby, 不如安装 Docker 官方 Fedora 31 仓库里的 Docker.

如何在 Fedora 32 下安装 Docker CE

安装过程很简单,也很顺利,老灯在此也顺便说一下。

主要参考 https://docs.docker.com/engine/install/fedora/

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/fedora/docker-ce.repo

# 然后,我们简单地把 32 替换成 31 即可(因为Docker还没有发布f32的rpm)
sudo sed -i 's/$releasever/31/g' cd /etc/yum.repos.d/docker-ce.repo

# 安装
sudo dnf install docker-ce docker-ce-cli containerd.io

光安装好了还不行,因为 F32 默认启用了 CGroup v2, 而当前版本的 Docker CE 还只支持 v1, 因此,我们得开倒车.

For Fedora 31 and higher, you need to enable the backward compatibility for Cgroups

编辑 /etc/default/grub 文件, GRUB_CMDLINE_LINUX 增加参数:

systemd.unified_cgroup_hierarchy=0

更新grub配置:

sudo grub2-mkconfig -o /etc/grub2-efi.cfg

把自己加到 docker 用户组(针对日常开发情况):

sudo usermod -aG docker your-user

然后重启系统。

启用服务:

sudo systemctl enable --now docker

测试:

docker run hello-world

目前来说工作良好。

另外, runccgroupv2 support meta issue #2315 也已经完成得差不多了

containerd 那边还没有搞定 cgroups v2 Support #3726

RPM spec for Fedora 32 is here: https://github.com/docker/docker-ce-packaging/tree/master/rpm

相信再过一段时间, 等 cgroupv2 的支持问题解决了, Fedora 32 将被 Docker 支持。

如何设置代理

主要是参考 https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

由于 Docker 的 cli 只是负责给 dockerd 发命令,因此实际上我们要配置 dockerd 使用代理。

sudo mkdir -p /etc/systemd/system/docker.service.d

sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

老灯本地有 http 代理, 因此配置 /etc/systemd/system/docker.service.d/http-proxy.conf 内容如下:

[Service]
Environment="HTTP_PROXY=http://192.168.8.100:7070"
Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"

然后重启 dockerd

sudo systemctl daemon-reload
sudo systemctl restart docker

检查下配置是否生效:

❯ sudo systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://192.168.8.100:7070 NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

如何卸载

sudo dnf remove docker-ce docker-ce-cli containerd.io