- Published on
Fedora32和Docker的那些事儿
- Authors
- Name
- ttyS3
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
目前来说工作良好。
另外, runc
的 cgroupv2 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