在开发机内使用 Docker
开发机可启用 Docker 容器( DinD)功能,允许用户在开发机内(主容器)运行其他容器,从而提供更高的灵活性和隔离性。
特别是在需要 GPU 资源的场景下,用户可以在开发机 DinD 环境中构建镜像,并创建挂载 GPU 的容器,测试容器化应用,并将构建好的镜像推送到租户镜像仓库。
NOTE
在该场景下,开发机为主容器,您在开发机内部启动的容器与主容器为互相隔离的环境,需要自行挂载 GPU 和文件存储目录。
启用方式
在创建开发机时,找到 Docker 容器开关,设置为开启。
创建开发机后,也可前往开发机详情页,通过「改配」按钮进入以下页面,调整开关启用状态。如需帮助,请参见更改开发机配置。
使用场景
- 构建镜像,并将镜像推送到租户私有镜像仓库。
- 从现有的镜像归档文件(
docker save
的压缩文件)创建镜像,并推送到租户私有镜像仓库。 - 测试容器化应用。
已知限制
计算资源可用性
如果不需要使用 Docker 容器功能,建议在创建开发机时不要启用 Docker 容器 开关,避免额外开销。
NOTE
开启「Docker 容器」后,开发机(主容器)与内部容器共享 CPU 和内存资源。
存储资源可用性
可用的持久化存储:
- 开发机主容器的 rootfs 上的路径。开发机 rootfs 默认提供 50GB 持久化存储,请及时关注用量。磁盘写满后将导致开发机异常。详见启动并挂载主容器本地目录
- 如果开发机已挂载共享高性能存储,建议内部容器使用共享存储作为持久化存储。详见启动并挂载高性能存储。
- 如果使用弹性资源创建开发机,且已购买足够大的云盘,建议将云盘上的目录挂载给内部容器,作为持久化存储。详见启动并挂载云盘。
非持久化存储:
- 开发机内部容器的 rootfs 空间默认为 100GB,不支持持久化存储。
IMPORTANT
- 使用
docker volume
创建的卷不会持久化保存。 - 已拉取的镜像不会持久化保存。一旦开发机停止运行,主容器内的已拉取的镜像将自动删除,下次需要重新拉取。
GPU 可用性
在开发机内启动容器时,可以使用 --gpus=all
挂载全部 GPU,开发机(主容器)内 GPU 资源依然可用。
如果在开发机内启动多个容器,这些容器会共享 GPU 资源。
Docker Compose
支持使用 Docker Compose,但需要自行安装工具。详见Docker Compose
权限
- 不支持使用
--privileged
参数启动容器。 - 如遇到文件权限问题,请提前在开发机内调整目录权限,例如
chmod -R 777 /path/to/directory
- 部分镜像挂载的目录可能需要提前在开发机内调整所有者权限,例如
chown -R 999:999 /path/to/directory
常见问题
如何添加 proxy 或 mirror 配置?
详见 Dockerctl。