Docker / Podman 安装与换源

Docker / Podman 安装与换源

Docker / Podman(选一个就好)的安装与 Docker Hub 换源。

Docker

Docker CLI(Linux)

  • 如果你发行版的仓库中有(比如 Arch),那直接用包管理器安装就行了。
  • 需要注意的是,Debian系(包括Ubuntu等)仓库中的 docker 并不是我们要用的,Docker 包名为docker.io,具体可以查看官方文档。
  • 如果仓库中没有,或仓库版本较旧要最新版的请查看官方文档安装。推荐使用其中的安装脚本。

使用安装脚本步骤如下。

国内安装 Docker 时最好先换源,完整安装流程请查看:Docker CE 软件仓库镜像使用帮助。使用其302智能选择镜像站请先执行:

export DOWNLOAD_URL="https://mirrors.cernet.edu.cn/docker-ce"

如您使用 curl:

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

如您使用 wget:

wget -O- https://get.docker.com/ | sudo -E sh

Docker Desktop(Windows & macOS & Linux)

Docker Desktop 是 Docker 官方提供了一个 GUI 管理工具,支持 Windows & macOS & Linux。官网即可下载。

Docker 使用了 Linux 内核的一些特性,在 Windows & macOS 上使用需要虚拟机内运行(比如 Windows 上的 Docker 就是通过 WSL 实现的)。这两个平台一般会安装 Docker Desktop,帮你自动化安装,比较省心。 Linux 上就算了,占用太高了(虽然 Windows 和 macOS 也是),真喜欢这种“面板”不如用 Portainer 或者下面的 Podman Desktop。

Podman

Podman 是 Redhat 开发的 “Docker 替代品”。它是 rootless 的(具体可看官网介绍),并且无需后台运行守护进程。 Podman 用法和 Docker 基本上一样,甚至官方文档里说习惯 docker 的可以直接 alias docker=podman。😂

无守护进程是个好事,少个常驻进程。
rootless 现在 Docker 也有办法实现。但 rootless 说是更安全,但是对我来说反倒会带来不方便,比如跑个 nginx 需要 80、443 ,普通用户没有权限创建,root/sudo 创建了之后普通用户又看不见这个容器。

Podman CLI (Linux)

Podman 因为是 Redhat 推出的,主流发行版的仓库基本都是有的,包管理器直接安装即可。

Podman Desktop(Windows & macOS & Linux)

与 Docker 类似,Podman 也提供了官方的 GUI 管理工具,可以帮你自动化安装,还支持 Docker 管理。它也是支持 Windows & macOS & Linux。可以直接去 Podman 官网下载。
具体实现和 Docker 类似,Windows 和 macOS 上也是虚拟机。但 Windows 端的感觉明显要比 Docker Desktop 轻量。Linux端就是一个独立的小工具。

Podman 配置缺省 Docker Hub

Podman 拉取 Docker Hub 内镜像时,镜像名称不能省略 docker.io/ 前缀。你可以每次都手动添加,也按下面方法可以配置缺省使用。

打开 /etc/containers/registries.conf 或新建 /etc/containers/registries.conf.d/docker.conf,在末尾添加:

unqualified-search-registries = ["docker.io"]

[[registry]]
location = "docker.io"

Docker Hub 仓库镜像

国内有很多 Docker 镜像,但有很多已经停止维护或不再免费开发,比如中科大的已停止校外访问,docker-cn的等都不能用了。看到还在说这些的相关文章/教程请直接略过。当然我列的肯定不全,欢迎评论中提交。

如果你使用云服务器的话可以参考下面的内网访问。

2024.6 知名高校、企业的镜像基本都关了。云服务器的内网访问还可以用。如果你有可以用的镜像,请自行替换下面的配置文件,否则请看下一节代理的使用。

Docker

打开或新建 /etc/docker/daemon.json,添加:

{
	"registry-mirrors": [
		"https://example.com"
	]
}

Podman

在刚刚配置 Docker Hub 的地方继续追加。

[[registry.mirror]]
location = "exaple.com"

Docker / Podman 代理

Docker

参见官方文档:https://docs.docker.com/config/daemon/proxy/#systemd-unit-file

因为 Docker 有守护进程 dockerd,我们应该修改它的配置。而它又是 Systemd 管理的,所以我们要编辑 Systemd 的配置。

sudo mkdir -p /etc/systemd/system/docker.service.d
echo '[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1"
' | sudo tee /etc/systemd/system/docker.service.d/proxy.conf

Podman

与之相比 Podman 就简单多了,设置系统代理就好了,也就是读取 http_proxyhttps_proxy 等变量。无守护进程的又一个优势。