制作镜像
在启用了「Docker 容器」功能的开发机上,有多种方式可以生成镜像。
Dockerfile
在开发机内部,支持使用 Dockerfile 定制镜像。默认可以使用 docker build
,也支持手动启用 buildkit。
限制与注意事项:
- 由于运营商网络原因,无法拉取 Docker Hub 镜像。建议在使用
FROM
指定基础镜像时,谨慎使用 Docker Hub 的容器镜像。 - 如果您有可用的代理服务,可使用
--build-arg
方式指定代理,例如docker build --build-arg HTTP_PROXY=https://my-proxy.example.com .
。 - Docker 容器服务支持修改 docker 服务配置,添加
proxies
或regestry-mirrors
等。修改后请重启服务。详见 Dockerctl。/etc/docker/daemon.json
/tmp/docker-config/config.json
(该文件在开发机重启后会复原,无法持久化保存修改)
NOTE
如果没有稳定可靠且经过测试的第三方镜像站,建议不要使用 proxies
或 regestry-mirrors
这种方式。您可以设法获取镜像,然后存入平台的租户私有镜像仓库,后续从租户私有镜像仓库拉取可提供更好的速率和稳定性。
Docker commit
您可以在 Docker 容器中安装和部署一些软件,再将更新后的容器打包为一个新的镜像。
示例如下:
bash
# 列出当前运行的 Docker 容器
root@is-c6xp7vsbjlkrsbgr-devmachine-0:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8be4cd831259 b3dc60511588 "/opt/nvidia/nvidia_…" 5 minutes ago Up 5 minutes distracted_keller
ba3cb11d8c01 b3dc60511588 "/opt/nvidia/nvidia_…" About an hour ago Up About an hour strange_bell
# 从运行中的容器创建新的镜像,并命名为 dev-cuda:v1
root@is-c6xp7vsbjlkrsbgr-devmachine-0:~# docker commit 8be4cd831259 dev-cuda:v1
sha256:a58ab0480f6f282e2e717642024db009214aacf44a28a6a423d570deff68c810
# 列出所有 Docker 镜像
root@is-c6xp7vsbjlkrsbgr-devmachine-0:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dev-cuda v1 a58ab0480f6f 3 seconds ago 3.67GB
nvidia/cuda 12.0.1-cudnn8-runtime-ubuntu22.04 b3dc60511588 2 months ago 3.62GB
Docker save
docker save
命令可以将 Docker 镜像保存为 tar 文件。在需要从智算云平台导出镜像时,您可以通过该方式保存离线镜像文件,下载后到其他机器上使用 docker load
命令加载该镜像。
示例如下:
bash
# 将 dev-cuda:v1 镜像保存为 dev-cuda.tar
root@is-c6xp7vsbjlkrsbgr-devmachine-0:$ docker save -o /tmp/dev-cuda.tar dev-cuda:v1
sha256:a58ab0480f6f282e2e717642024db009214aacf44a28a6a423d570deff68c810
常见问题
如何导入我的私有镜像?
- 使用镜像 tar 文件,上传至开发机后,通过
docker load
命令加载该镜像。 - 通过镜像 URL 从其他仓库镜像拉取(或需要仓库凭证)
详见迁移外部镜像。
如何拉取 Docker Hub 的镜像?
由于运营商网络原因,直接拉取 Docker Hub 镜像时会失败。建议:
智算云平台不提供官方加速或代理服务。您可以自行使用第三方镜像加速服务。如需修改 Docker 容器服务的配置,详见 Dockerctl。