文章目录
说明
本文是在服务器已经配置好 Docker
相关环境的情况下,简要介绍了在服务器上如何构建 Docker
镜像来搭建个人开发环境,因此本文不涉及 Docker
的安装、维护以及各种细节,若要详细了解,请查看文章最后的 相关资料 一节。
教程
以下所有操作均在同一文件夹(例如 /media/username/Docker
文件夹)内进行。,请在自己的目录下新建一个 Docker
文件夹
1. 编写 Dockerfile
新建 Dockerfile
文件:
FROM
后跟需要使用的基础镜像,你的镜像会在此基础上构建,可以省去很多配环境的步骤,例如使用NVIDIA官方提供的cuda镜像,可以省去手动配cuda环境的步骤:nvidia/cuda:12.2.0-devel-ubuntu22.04
。更多版本见nvidia/cuda。RUN /bin/bash -c
后面的双引号中,添加你在配环境过程中需要执行的命令,不用写出所有的命令,进入容器后还可以继续配环境。
FROM registry.cn-hangzhou.aliyuncs.com/2h1c_aliyun/accelerate:nvidia_cuda_12.2.0-devel-ubuntu22.04
# 每一个RUN命令都会在镜像中构建一个“层”
# 从DEBIAN_FRONTEND开始往下的都是安装命令,仅为示例,非必须
RUN /bin/bash -c "sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \
&& sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \
&& apt update && apt upgrade -y"
RUN /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt install tzdata git openssh-server vim zsh \
make sudo net-tools inetutils-ping \
language-pack-zh* -y"
在 Dockerfile
所在文件夹下,执行构建命令:
docker build -t=zhaoliangcheng_image:latest .
- 将
zhaoliangcheng_image
替换成你为新镜像起的名字 latest
是版本/标签名称,同样可以改为自定义的名称
2. 编写 docker-compose.yml
新建 docker-compose.yml
文件:
- 所有写着自定义名称的,都可以用相同的名称,注意不能与他人的重复,最好命名为username_xxx,即用户名_英文字符串
version: '3.8'
name: 自定义名称
services:
自定义名称:
init: true
container_name: 自定义名称
network_mode: "host"
privileged: true
image: Dockerbuild构建出的镜像
command: tail -f /dev/null
volumes:
- "/tmp/.X11-unix:/tmp/.X11-unix:rw"
- "/dev:/dev:rw"
- "./ENVIRONMENTS:/root/ENVIRONMENTS:rw"
- "./SHARE:/root/SHARE:rw"
working_dir: /root
environment:
- DISPLAY=$DISPLAY
- LC_ALL=C.UTF-8
- NVIDIA_DRIVER_CAPABILITIES=all
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [compute,graphics,video,utility,display]
例如:
version: '3.8'
name: zhaoliangcheng_container
services:
zhaoliangcheng_container:
init: true
container_name: zhaoliangcheng_container
network_mode: "host"
privileged: true
image: zhaoliangcheng_image:latest
command: tail -f /dev/null
volumes:
- "/tmp/.X11-unix:/tmp/.X11-unix:rw"
- "/dev:/dev:rw"
- "./ENVIRONMENTS:/root/ENVIRONMENTS:rw"
- "./SHARE:/root/SHARE:rw"
working_dir: /root
environment:
- DISPLAY=$DISPLAY
- LC_ALL=C.UTF-8
- NVIDIA_DRIVER_CAPABILITIES=all
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [compute,graphics,video,utility,display]
3. 使用容器
所有要保存的数据例如代码、模型等,放在 /root/SHARE
或 /root/ENVIRONMENTS
中
创建容器
创建容器就好比创建一个虚拟机,只需运行一次创建命令即可。
docker compose up -d
如果修改了 docker-compose.yml
,那么想要让修改生效,就需要重新执行这条命令,但这会让原容器被删除,因此需要保存好数据
启动容器
当容器创建成功后,以后每次启动容器,都只需执行这条命令:
docker start 容器名称
其中,容器名称是你在 docker-compose.yml
的 container_name
一项中所填写的自定义名称
进入容器
命令行
docker exec -it 容器名称 bash
VSCode
在扩展中安装Remote插件,安装好后在左侧的远程资源管理器中先连接到服务器,然后在新打开的VSCode窗口中,选择 开发容器 ,右键选择 附加到容器 即可连接
4. 关闭容器
docker stop 容器名称
5. 备份容器
通过备份容器,可以:
- 在容器环境损坏时快速恢复环境
- 在服务器与个人电脑间迁移环境
备份容器分为导出和导入两个步骤:
- 导出是将容器导出为
*.tar
文件 - 导入是将
*.tar
文件中的内容导入成镜像,通过镜像就可以创建容器了
导出
- 关闭容器
docker stop 容器名称
- 执行导出命令
docker export -o=文件名称.tar 容器名称
导入
- 执行导入命令
docker import 文件名称.tar 镜像名称:版本号
- 查看系统中所有的镜像
docker images -a
6. 重置容器
如果环境损坏,可以重置容器,恢复环境到某个版本。
重置容器有删除和重新创建两个步骤:
- 删除容器(注意将需要保存的数据移动到
/root/SHARE
或/root/ENVIRONMENTS
中)
docker compose down
- 重新创建容器
修改docker-compose.yml
的image
中的镜像名称:版本号
,Docker 就会使用image
中的镜像新建一个容器,并且/root/SHARE
和/root/ENVIRONMENTS
中的数据不会丢失
docker compose up -d
相关资料
文章合集
- Docker专栏:
Docker
相关文章合集
详细了解本文
- 若要详细了解本文中的内容,参考Docker实践:使用Docker搭建个人开发环境
在个人电脑上安装 Docker
- 若要在个人电脑上安装
Docker
,参考Docker官方文档学习笔记(一):安装Docker Engine(和安装Docker Desktop for Linux二选一)。 - 在最新的WSL2中同样可以安装 Docker Engine,参考在Windows 11 中安装和使用 WSL 2
容器使用 NVIDIA 显卡
- 如果个人电脑有NVIDIA独显,参考Ubuntu下 NVIDIA Container Runtime 安装与使用,使容器也能使用显卡
托管镜像
- 如果想像使用
GitHub
托管代码一样,托管镜像,参考使用阿里云管理Docker镜像
运行GUI程序
- 如果想在容器中运行GUI程序,参考Docker容器运行GUI程序的方法(直接进入Docker容器运行或通过SSH连接Docker容器运行)