在开发机内使用 Docker
开发机可启用 Docker 容器(Docker in Docker, DinD)功能,允许用户在开发机内(主容器)运行其他容器,从而提供更高的灵活性和隔离性。
特别是在需要 GPU 资源的场景下,用户可以在开发机 DinD 环境中构建镜像,并创建挂载 GPU 的容器,测试容器化应用,并将构建好的镜像推送到租户镜像仓库。
NOTE
在该场景下,开发机为主容器,您在开发机内部启动的容器与主容器为互相隔离的环境,需要自行挂载 GPU 和文件存储目录。
启用方式
在创建开发机时,找到 Docker 容器开关,设置为开启。
创建开发机后,也可前往开发机详情页,通过「改配」按钮进入以下页面,调整开关启用状态。如需帮助,请参见更改开发机配置。
使用场景
- 构建镜像,并将镜像推送到租户私有镜像仓库。
- 从现有的镜像归档文件(
docker save
的压缩文件)创建镜像,并推送到租户私有镜像仓库。 - 测试容器化应用。
已知限制
计算资源可用性
如果不需要使用 Docker 容器功能,建议在创建开发机时不要启用 Docker 容器 开关,否则容易遇到内存不足的问题。
WARNING
开启「Docker 容器」后,开发机(主容器)将固定保留 10% 的资源。剩余 90% 的 CPU 和内存资源将分配给开发机内部的容器。如果在主容器内执行耗内存的操作可能会容易导致 OOM。
存储资源可用性
- 开发机内部启动的容器的 rootfs 空间默认为 100GB,但不支持持久化存储。
- 如需为容器内服务提供持久化存储,请将开发机主容器的存储资源挂载给内部容器,但是暂不支持使用 -v 挂载开发机主容器的 rootfs 上的任何目录。
- 如果开发机已挂载共享高性能存储,可以将开发机主容器的共享存储挂载给内部容器。参见启动并挂载高性能存储。
- 如果使用弹性资源创建开发机,可以将云盘上的目录挂载给内部容器。参见启动并挂载云盘。
IMPORTANT
- 不支持使用
docker volume
命令。 - 不支持在开发机主容器内持久化保存容器镜像。一旦开发机停止运行,主容器内的镜像将自动删除,下次需要重新拉取。
GPU 可用性
在开发机内启动容器时,可以使用 --gpus=all
挂载全部 GPU,开发机(主容器)内 GPU 资源依然可用。
如果在开发机内启动多个容器,这些容器会共享 GPU 资源。
NOTE
旧版开发机启用 Docker 功能时,开发机内部容器会独占全部 GPU。如遇到开发机(主容器)无法与内部容器共享 GPU 的情况,建议将开发机关机再开机,以完成版本更新。
Docker Compose
不支持使用 Docker Compose。
权限
- 不支持使用
--privileged
参数启动容器。 - 如遇到文件权限问题,请提前在开发机内调整目录权限,例如
chmod -R 777 /path/to/directory
- 部分镜像挂载的目录可能需要提前在开发机内调整所有者权限,例如
chown -R 999:999 /path/to/directory