Docker Engine 网络受影响的情况下的本地部署的配置流程
在某些网络访问受限的情况下, 例如不能访问 Docker hub, Docker Apt 源, Nvidia Apt 源, 或者设备与自建/公共的镜像托管服务网络连接不稳定等情况, 仍然需要安装 Docker 并运行GPU应用, 可以参考以下方案:
网络受限的情况下安装Docker Engine的方案
卸载旧版docker和删除残留
1
sudo apt remove docker docker-engine docker.io containerd runc安装安装所需依赖工具
1
sudo apt -y install ca-certificates curl gnupg lsb-release
添加阿里云镜像的公钥
1
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
打印返回(返回OK即为成功)
添加Docker软件源
注意
arch=amd64这里的CPU架构需要根据安装的机器架构更改1
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安装docker
1
apt -y install docker-ce docker-ce-cli containerd.io
将当前用户添加到docker组
避免每次使用Docker时都需要使用sudo(默认情况下,只有root用户和docker组的用户才能运行Docker命令)
1
sudo usermod -aG docker $USER
重启docker服务
1
service docker restart
查看docker状态
1
systemctl status docker
Docker Pull 低质量网络环境下EOF异常解决方案
/etc/docker/deamon.json 中配置以下内容
1
2
3
4
5
6
{
"max-concurrent-downloads": 1,
"max-concurrent-uploads": 1,
"max-download-attempts": 50,
"features": {"containerd-snapshotter": true}
}
在低质量网络连接下启用,防止镜像Pull失败
- 限制镜像Pull并发数
- 限制镜像Push并发数
- 增加重试次数
- 启用containerd作为运行时, 以启用镜像pull的断点重传
在无法访问官方储存库的情况下安装NVIDIA Container Toolkit的方案
能直接访问
nvidia.github.io的情况下优先使用的官方安装方案 Installing the NVIDIA Container Toolkit
如果无法访问 nvidia.github.io 按照以下步骤操作
单独下载 nvidia.github.io/libnvidia-container/gpgkey 公钥文件,并复制到目标服务器上
导入公钥
1
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg ./gpgkey
其中
./gpgkey是复制到服务器上对的公钥文件的路径sudo gpg --dearmor: 將 gpgkey 文件(通常是 ASCII armored 格式)转换为 APT 所需的二進制格式。配置 mirrors.ustc.edu.cn 的鏡像源
创建或编辑APT软件源列表文件:
打开终端并使用sudo权限进行创建或编辑。
/etc/apt/sources.list.d/nvidia-container-toolkit.list文件1
sudo nano /etc/apt/sources.list.d/nvidia-container-toolkit.list將以下內容粘贴到
nvidia-container-toolkit.list中1
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/amd64/ ./
注意
signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg公钥文件的路径需要和上一步导入公钥的时候设置的gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg路径的对应/amd64/这里需要根据安装服务器的CPU架构指定, 查询支持的架构可以访问 libnvidia-container/stable/deb/ 查看更新包索引并安装 NVIDIA Container Toolkit
1
sudo apt update && sudo apt install nvidia-container-toolkit
配置 Docker 运行时
1
sudo nvidia-ctk runtime configure --runtime=docker
重启 docker
1
sudo systemctl restart docker
配置第三方Docker Hub镜像加速
在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
1
2
3
4
5
{
"registry-mirrors": [
"https://mirrors-example.com"
]
}
如果使用的镜像加速站点没有使用Https或者是内网的自建Register服务, 没有Https可以配置
--insecure-registry来使用, 默认情况下Docker 会拒绝从没有启用Https的镜像站拉取镜像
要配置--insecure-registry, 也需要打开/etc/docker/daemon.json 中写入如下内容
1
2
3
{
"insecure-registries": ["http://mirrors-example.com"]
}
之后重新启动Docker服务
1
2
sudo systemctl daemon-reload
sudo systemctl restart docker
重启后可以使用 info 命令查询配置的信息是否生效
1
docekr info
如果Docker配置正确,则命令的输出中应该包含之前添加的镜像站或者不安全镜像仓库的URL
如果是配置了上面所有配置项的 /etc/docker/daemon.json 最终看起来应该像:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"max-concurrent-downloads": 1,
"max-concurrent-uploads": 1,
"max-download-attempts": 50,
"features": {"containerd-snapshotter": true},
"registry-mirrors": [
"https://mirrors-example.com"
],
"insecure-registries": [
"http://mirrors-example.com"
],
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}