码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Docker实践:使用Docker搭建个人开发环境(极简版)


    文章目录

    • 说明
    • 教程
      • 1. 编写 Dockerfile
      • 2. 编写 docker-compose.yml
      • 3. 使用容器
        • 创建容器
        • 启动容器
        • 进入容器
          • 命令行
          • VSCode
      • 4. 关闭容器
      • 5. 备份容器
        • 导出
        • 导入
      • 6. 重置容器
    • 相关资料
      • 文章合集
      • 详细了解本文
      • 在个人电脑上安装 Docker
      • 容器使用 NVIDIA 显卡
      • 托管镜像
      • 运行GUI程序

    说明

    本文是在服务器已经配置好 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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在 Dockerfile 所在文件夹下,执行构建命令:

    docker build -t=zhaoliangcheng_image:latest .
    
    • 1
    • 将 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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    例如:

    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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3. 使用容器

    所有要保存的数据例如代码、模型等,放在 /root/SHARE 或 /root/ENVIRONMENTS 中

    创建容器

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

    docker compose up -d
    
    • 1

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

    启动容器

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

    docker start 容器名称
    
    • 1

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

    进入容器

    命令行
    docker exec -it 容器名称 bash
    
    • 1
    VSCode

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

    4. 关闭容器

    docker stop 容器名称
    
    • 1

    5. 备份容器

    通过备份容器,可以:

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

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

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

    导出

    1. 关闭容器
    docker stop 容器名称
    
    • 1
    1. 执行导出命令
    docker export -o=文件名称.tar 容器名称
    
    • 1

    导入

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

    6. 重置容器

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

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

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

    相关资料

    文章合集

    • 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容器运行)
  • 相关阅读:
    git push 总是需要输入密码或者个人访问令牌personal access token解决方案
    gitlab-ce实现主备切换集群:rsync+PostgreSQL备份的方式实现快速切换server ip实现伪高可用
    阿里云轻量应用服务器月流量限制说明(部分套餐不限流量)
    阈值回归模型(Threshold Regression Model)及R实现
    Python使用遗传算法(Evolutionary Algorithm、进化算法)构建优化器获取机器学习模型最优超参数组合、拟合最佳模型、实战+代码
    简单神经网络模型怎么做,简单神经网络模型制作
    全景视频拼接的关键技术与步骤
    c++/c#实现mnist手写字符识别,包括模型训练、推理预测
    【Spring-3】ConfigurationClassPostProcessor解析配置类
    大模型微调发展-学习调研总结
  • 原文地址:https://blog.csdn.net/qq_35395195/article/details/131873792
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号