Docker实践:使用Docker搭建个人开发环境(极简版)

文章目录

说明

本文是在服务器已经配置好 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 后面的双引号中 ,添加你在配环境过程中需要执行的命令,不用写出所有的命令,进入容器后还可以继续配环境。
bash 复制代码
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 所在文件夹下,执行构建命令:

bash 复制代码
docker build -t=zhaoliangcheng_image:latest .
  • zhaoliangcheng_image 替换成你为新镜像起的名字
  • latest是版本/标签名称,同样可以改为自定义的名称

2. 编写 docker-compose.yml

新建 docker-compose.yml 文件:

  • 所有写着自定义名称 的,都可以用相同的名称,注意不能与他人的重复 ,最好命名为username_xxx ,即用户名_英文字符串
yaml 复制代码
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]

例如:

yaml 复制代码
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

创建容器

创建容器就好比创建一个虚拟机,只需运行一次创建命令即可。

bash 复制代码
docker compose up -d

如果修改docker-compose.yml ,那么想要让修改生效 ,就需要重新执行 这条命令,但这会让原容器被删除,因此需要保存好数据

启动容器

当容器创建成功后,以后每次启动容器,都只需执行这条命令:

bash 复制代码
docker start 容器名称

其中,容器名称 是你在 docker-compose.ymlcontainer_name 一项中所填写的自定义名称

进入容器

命令行

bash 复制代码
docker exec -it 容器名称 bash

VSCode

在扩展中安装Remote 插件,安装好后在左侧的远程资源管理器 中先连接到服务器,然后在新打开的VSCode窗口中,选择 开发容器 ,右键选择 附加到容器 即可连接

4. 关闭容器

bash 复制代码
docker stop 容器名称

5. 备份容器

通过备份容器,可以:

  • 在容器环境损坏时快速恢复环境
  • 在服务器与个人电脑间迁移环境

备份容器分为导出导入两个步骤:

  • 导出 是将容器导出为 *.tar 文件
  • 导入 是将 *.tar 文件中的内容导入成镜像 ,通过镜像就可以创建容器了

导出

  1. 关闭容器
bash 复制代码
docker stop 容器名称
  1. 执行导出命令
bash 复制代码
docker export -o=文件名称.tar 容器名称

导入

  1. 执行导入命令
bash 复制代码
docker import 文件名称.tar 镜像名称:版本号
  1. 查看系统中所有的镜像
bash 复制代码
docker images -a

6. 重置容器

如果环境损坏,可以重置容器,恢复环境到某个版本。

重置容器有删除重新创建两个步骤:

  1. 删除容器(注意将需要保存的数据 移动到 /root/SHARE/root/ENVIRONMENTS 中)
bash 复制代码
docker compose down
  1. 重新创建容器
    修改 docker-compose.ymlimage 中的 镜像名称:版本号 ,Docker 就会使用image中的镜像新建一个容器,并且 /root/SHARE/root/ENVIRONMENTS 中的数据不会丢失
bash 复制代码
docker compose up -d

相关资料

文章合集

详细了解本文

在个人电脑上安装 Docker

容器使用 NVIDIA 显卡

托管镜像

运行GUI程序

相关推荐
玉梅小洋1 小时前
Docker 镜像在节点间的高效拷贝的方案
运维·docker·容器
firstacui1 小时前
搭建harbor仓库
linux·docker
Cyber4K1 小时前
【Kubernetes专项】K8s 控制器 DaemonSet 从入门到企业实战应用
云原生·容器·kubernetes
好好沉淀1 小时前
Docker 部署 Kibana:查 ES 版本 + 版本匹配 + 中文界面
linux·docker
切糕师学AI1 小时前
RKE(Rancher Kubernetes Engine) 是什么?
云原生·容器·kubernetes·rancher
啦啦啦小石头1 小时前
CVAT使用记录
docker·ai
BLUcoding1 小时前
使用 Docker Compose 安装常用中间件
docker·中间件·容器
小义_2 小时前
【Docker】知识一
linux·docker·云原生·容器
龙飞053 小时前
Kubernetes 排障实战:PVC 一直 Pending 的原因与解决方案
运维·学习·云原生·容器·kubernetes