Docker安装+可用镜像收集

由于众所周知的原因,Docker 和 Docker Hub 无法访问,为了解决在运维和部署中的安装和拉取容器问题,避免对业务造成影响,我们需要合理配置使用镜像。

安装

手动安装

官方安装脚本 get.docker.com 可能无法访问,只能手动安装,实际上官方文档中也建议在生产环境中通过手动的方式来安装 Docker。

由于系统在不断更新,这边直接提供 CERNET MirrorZ 的帮助(根据 官方文档 修改而来):

https://help.mirrors.cernet.edu.cn/docker-ce/

需要注意的是,在该帮助提供的命令中,默认的 gpg 密钥下载地址仍为 download.docker.com,这么做可以增加安全性,但如果你无法访问,可以将其替换为 mirrors.cernet.edu.cn/docker-ce

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Uninstall all conflicting packages:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.cernet.edu.cn/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.cernet.edu.cn/docker-ce/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# Install the latest version:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果您使用其他类 Debian 系统,如 Kali Linux,请将上面的 $(. /etc/os-release && echo "$VERSION_CODENAME") 替换成 bookworm

注意,官方 Docker CE 与 Debian 仓库里的 docker.io 不同:官方 Docker 用 docker compose 来 compose,compose 作为一个插件;Debian 仓库中的 docker.iodocker-compose 来 compose。

对于桌面使用,为了避免每次执行 docker 都需要在前面加上 sudo,可能需要给普通用户添加 docker 权限(使用 Docker Desktop 安装的无需进行此操作):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查看docker用户组
getent group docker
# 确保有输出,如果不存在,则使用以下命令创建docker用户组
#sudo groupadd docker

# 将当前添加到 Docker 用户组
sudo usermod -aG docker $USER
# 或者
# sudo gpasswd -a $USER docker

# 更新用户组
newgrp docker

# 重启 Docker 服务
sudo systemctl restart docker

# 验证是否能够使用
docker ps
# 如果不行的话,注销试试

第三方脚本

如果是图方便,或者碰到不熟悉的系统,可以使用以下命令安装:

1
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

使用CERNET MirrorZ 302 优选 Docker-CE 镜像:

1
bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --source mirrors.cernet.edu.cn

面板安装

如 1Panel,安装脚本可以帮你自动安装好 Docker,并配置 Docker Hub 镜像,非常省心。

Docker Desktop

官方最新版安装包,自行想办法下载:

https://docs.docker.com/desktop/release-notes/

福利: 这边我们提供 Docker Desktop 安装包镜像,版本见 Version.txt

https://dl.xrgzs.top/%E8%BD%AF%E4%BB%B6/Docker/Desktop

密码:为了避免滥用,访问 url.xrgzs.top/pswd 页面最底下获取

Windows 安装 Docker 有三种后端,分别为 Hyper-VWSL2Windows,推荐使用 WSL2

先安装WSL2:

1
wsl.exe --install

然后再装 Docker Desktop 即可。

注册表镜像

不定期更新

建议设置多个镜像,优先设置速度快的,拉取失败会自动换下一个

请先测试链接是否能够打开(报40x正常),然后再使用

注意事项:

  • 部分镜像的 latest 标签可能较老,请尽量带版本号拉取。
  • 不建议用于生产环境,且生产环境建议固定版本号并备份镜像到本地。
  • 对于使用第三方镜像造成的后果,与本人无关,请尽量选择可信镜像。

搭建

薅得多会跑路,能自建更好,此处不提供方法,自行 GitHub / 谷歌 / 必应 / 微信搜一搜。

设置方法

从面板修改

1Panel、DSM、fnOS等可从面板修改:

1Panel

DSM

fnOS 的做法是将你设置的镜像 unshift 插入到 registry-mirrors 这个 Array 的首位。

fnOS

其他管理面板大同小异,如果没找到就是不能直接改。

直接改配置文件

iStoreOS(OpenWrt)的 docker 配置文件可能在到 /etc/config/dockerd,并且格式与上方不相同,请自行修改!

部分 docker 配置文件可能还包含其他内容,如工作路径等,需要自行修改,请勿直接替换!

如果未安装管理面板,或管理面板改不了,可以执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://m.ixdev.cn",
"https://docker.1ms.run",
"https://dockerpull.cn",
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Podman

Podman 和 Docker 的区别:

对比项 Podman Docker
架构 无守护进程,直接与容器运行时(如 runc)交互 客户端-服务端架构,依赖后台守护进程 dockerd
Root 权限 默认支持 Rootless 模式(普通用户可直接运行容器) 传统模式需 Root 权限,后续支持 Rootless(需配置)
安全性 更高(无守护进程 + Rootless 默认),减少攻击面 守护进程以 Root 运行,存在潜在风险(Rootless 需手动启用)
镜像管理 完全兼容 Docker 镜像,支持 Docker Hub/私有仓库 原生支持 Docker 镜像,生态成熟
CLI 兼容性 命令与 Docker CLI 高度兼容(如 podman rundocker run CLI 为行业标准,Podman 反向兼容其语法
Systemd 集成 原生支持生成 Systemd 单元文件(podman generate systemd 需第三方工具或手动配置 Systemd 服务
镜像构建 支持 Dockerfile 及 podman build,集成 Buildah(更灵活的构建) 使用 docker build,依赖 Dockerfile
容器编排 依赖 Podman Compose 或 Kubernetes(无内置 Swarm) 内置 Docker Swarm,成熟但逐渐被 Kubernetes 取代
资源消耗 无后台进程,空闲时资源占用更低 守护进程常驻,占用一定内存/CPU
网络模型 使用 CNI(容器网络接口),与 Kubernetes 兼容 自有网络模型(如 bridgehost 等)
存储 Rootless 模式下,数据存储在用户目录(如 ~/.local/share/containers 默认使用 /var/lib/docker(需 Root 权限)
Pod 支持 原生支持 Pod(多容器组,类似 Kubernetes Pod) 需通过 Docker Compose 模拟多容器组
日志管理 依赖 Systemd Journal 或第三方工具 内置多种日志驱动(如 json-filesyslog
Windows/macOS 通过虚拟机或 WSL2 支持,体验有限 提供 Docker Desktop,原生支持良好
生态系统 社区增长中,红帽(Red Hat)主导,适合 RHEL/CentOS 环境 成熟,广泛支持,第三方工具丰富

文档:https://podman.io/docs/installation#registriesconf

由于支持 rootless 模式,会涉及到两种配置文件路径:

  • 全局配置文件:/etc/containers/registries.conf

  • 用户配置文件:~/.config/containers/registries.conf

Podman 比 Docker 更智能,可以对镜像的前缀进行自动替换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
cp -f /etc/containers/registries.conf /etc/containers/registries.conf.bak
sudo tee /etc/containers/registries.conf <<EOF
unqualified-search-registries = [ "docker.io" ]

# Docker Hub
[[registry]]
prefix = "docker.io"
location = "docker.m.ixdev.cn"
[[registry.mirror]]
location = "docker.1ms.run"
[[registry.mirror]]
location = "dockerpull.cn"
[[registry.mirror]]
location = "docker.1ms.run"
[[registry.mirror]]
location = "docker.1panel.live"
[[registry.mirror]]
location = "hub.rat.dev"
[[registry.mirror]]
location = "docker.mirrorify.net"
[[registry.mirror]]
location = "docker-pull.rat.dev"

# GitHub Container Registry
[[registry]]
prefix = "ghcr.io"
location = "ghcr.m.ixdev.cn"
[[registry.mirror]]
location = "ghcr.nju.edu.cn"
[[registry.mirror]]
location = "ghcr.mirrorify.net"
[[registry.mirror]]
location = "ghcr-pull.ygxz.in"

# GitLub Container Registry
[[registry]]
prefix = "registry.gitlab.com"
location = "glcr.nju.edu.cn"

# Red Hat Quay Registry
[[registry]]
prefix = "quay.io"
location = "quay.m.ixdev.cn"
[[registry.mirror]]
location = "quay.nju.edu.cn"
[[registry.mirror]]
location = "quay.mirrorify.net"
[[registry.mirror]]
location = "quay-pull.ygxz.in"

# Google Container Registry
[[registry]]
prefix = "gcr.io"
location = "gcr.nju.edu.cn"
[[registry.mirror]]
location = "gcr.mirrorify.net"
[[registry.mirror]]
location = "gcr-pull.ygxz.in"

# Kubernetes Container Registry (Google)
[[registry]]
prefix = "k8s.gcr.io"
location = "gcr.nju.edu.cn/google-containers"
[[registry.mirror]]
location = "k8s-gcr.mirrorify.net"
[[registry.mirror]]
location = "k8s-gcr-pull.ygxz.in"

# Kubernetes Container Registry
[[registry]]
prefix = "registry.k8s.io"
location = "k8s.m.ixdev.cn"
[[registry.mirror]]
location = "k8s.nju.edu.cn"
[[registry.mirror]]
location = "k8s.mirrorify.net"
[[registry.mirror]]
location = "k8s-pull.ygxz.in"

# Microsoft Container Registry
# [[registry]]
# prefix = "mcr.microsoft.com"
# location = "mcr.microsoft.com"
# [[registry.mirror]]
# location = "mcr.mirrorify.net"
# [[registry.mirror]]
# location = "mcr-pull.ygxz.in"

# Elastic Docker registry
[[registry]]
prefix = "docker.elastic.co"
location = "elastic.m.ixdev.cn"
[[registry.mirror]]
location = "elastic.mirrorify.net"
[[registry.mirror]]
location = "elastic-pull.ygxz.in"

# NVIDIA GPU Cloud Container Registry
[[registry]]
prefix = "nvcr.io"
location = "nvcr.m.ixdev.cn"
[[registry.mirror]]
location = "nvcr.nju.edu.cn"
[[registry.mirror]]
location = "nvcr.mirrorify.net"
[[registry.mirror]]
location = "nvcr-pull.ygxz.in"
EOF

(可选)CF 优选 IP

CF Workers 默认分配的部分线路可能较差,导致单线程拉取镜像较慢(不能只看延迟),需要自行优选

不会优选可以直接 ping download.yunzhongzhuan.com,选择一个延迟低的 IP 添加到 Hosts 中:

1
2
3
4
5
cat >> /etc/hosts << EOT
# Best IP for CF Workers Docker hub mirror
172.67.64.150 docker.1panel.live
172.67.64.150 hub.rat.dev
EOT

旁路由劫持

如果懒得配置镜像,且有旁路路由,可以通过主路由 DNS劫持 + 静态路由 的方式实现免镜像加速,下层设备无需更改网关

关键参数:

1
2
3
4
5
domain:docker.io 54.236.113.205

domain:hub.docker.com 54.236.113.205

production.cloudflare.docker.com 104.16.97.215

KSpeeder

多镜像并发下载,动态负载均衡,断点续传支持,Docker镜像代理服务

Docker镜像加速专家KSpeeder:https://kspeeder.istoreos.com/

介绍:https://www.bilibili.com/video/BV1LeZhYPEcD