当前位置: 首页 > news >正文

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"

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: truecontainer_name: 自定义名称network_mode: "host"privileged: trueimage: Dockerbuild构建出的镜像command: tail -f /dev/nullvolumes:- "/tmp/.X11-unix:/tmp/.X11-unix:rw"- "/dev:/dev:rw"- "./ENVIRONMENTS:/root/ENVIRONMENTS:rw"- "./SHARE:/root/SHARE:rw"working_dir: /rootenvironment:- DISPLAY=$DISPLAY- LC_ALL=C.UTF-8- NVIDIA_DRIVER_CAPABILITIES=alldeploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [compute,graphics,video,utility,display]

例如:

version: '3.8'
name: zhaoliangcheng_container
services:zhaoliangcheng_container:init: truecontainer_name: zhaoliangcheng_containernetwork_mode: "host"privileged: trueimage: zhaoliangcheng_image:latestcommand: tail -f /dev/nullvolumes:- "/tmp/.X11-unix:/tmp/.X11-unix:rw"- "/dev:/dev:rw"- "./ENVIRONMENTS:/root/ENVIRONMENTS:rw"- "./SHARE:/root/SHARE:rw"working_dir: /rootenvironment:- DISPLAY=$DISPLAY- LC_ALL=C.UTF-8- NVIDIA_DRIVER_CAPABILITIES=alldeploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [compute,graphics,video,utility,display]

3. 使用容器

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

创建容器

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

docker compose up -d

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

启动容器

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

docker start 容器名称

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

进入容器

命令行

docker exec -it 容器名称 bash

VSCode

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

4. 关闭容器

docker stop 容器名称

5. 备份容器

通过备份容器,可以:

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

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

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

导出

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

导入

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

6. 重置容器

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

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

  1. 删除容器(注意将需要保存的数据移动到 /root/SHARE/root/ENVIRONMENTS 中)
docker compose down
  1. 重新创建容器
    修改 docker-compose.ymlimage 中的 镜像名称:版本号 ,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容器运行)

相关文章:

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

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

SQL从三个表中根据时间分别查询并汇总数量一行展示

需求:如果您要从三个表中根据时间分别查询并汇总数量,然后将结果以时间和数量一行展示,可以使用子查询和条件聚合。 入库主表 入库明细表 出库主表 出库明细表 退货主表 退货明细表 SQL代码 SELECT time,sum(a.inQty) as inQty,sum(a.outQty…...

同样是跨端框架,React会不会被VUE取代?

看到知乎上有比较多的类似问题,正好这两个框架在以往的一些项目中都有实践过,就借着本篇文章说说我个人的看法。 先摆个结论:不会,毕竟各有千秋,除非跨端框架有被更好的概念所替代,又或者App已经彻底过气了…...

Excel·VBA定量装箱、凑数值金额、组合求和问题

如图:对图中A-C列数据,根据C列数量按照一定的取值范围,组成一个分组装箱,要求如下: 1,每箱数量最好凑足50,否则为47-56之间; 2,图中每行数据不得拆分; 3&…...

通过Jmeter压测存储过程

目录 一、存储过程准备: 二、测试工具准备: 三、工具配置及执行: 1、配置JDBC Connection Configuration: 2、配置吞吐量控制器(可跳过): 3、配置JDBC Request: 对于存储过程…...

Spring笔记之Spring对IoC的实现

文章目录 IoC控制反转依赖注入set注入注入外部Bean注入内部Bean注入简单类型通过注入方式实现javax.sql.DateSource接口测试简单类型 级联属性赋值(了解)注入数组注入List集合注入Set集合注入Map集合注入Properties注入null和空字符串不给属性赋值使用 注…...

【eNSP】Telnet远程登录

Telnet远程登录 eNSP软件TelnetTelnet远程登录-路由连接关闭防火墙eNSP根据图1画图路线配置路由端口IP配置路由R1改名配置接口IP 配置路由R2 配置R2的远程登录设置登录用户授权级别退出登录超时时间 Telnet测试 eNSP软件 eNSP(Enterprise Network Simulation Platform)是一款由…...

SOP/详解*和**/python数据结构(iter,list,tuple,dict)/ 解包

一、错误解决合集 1. > combined_seq.named_children() 2. isinstance 2th parameter : must be a type or tuple of types > 改为tuple,不要用列表。改为 LLLayer (nn.Conv2d,nn.Linear) 3. File “test.py”, line 90, in calculate_fin_fout print(“hi”…...

使用webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

1、前言 在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还会遇到跨操作系统进行测试的时候&…...

【vue】Vue中debugger报错 unexpected ‘debugger’ statement no-debugger

前言: Vue中debugger报错 unexpected ‘debugger’ statement no-debugger (意外的“调试器”语句没有调试器) eslink规则没有开启’debugger’ ,被规则屏蔽了,需要手动放开 解决方法 方式一: 找到.esl…...

课题方向a

首先在无线感知的研究方向下,辅以深度学习和计算机视觉的技术和知识,可以从事哪些具体课题的研究?请你尽可能多的给出课题名称供我选择 在无线感知的研究方向下,辅以深度学习和计算机视觉的技术,有很多具体课题可以进行研究。以下是一些供您选择的课题名称: 基于深度学习…...

【Matter】基于Ubuntu 22.04 交叉编译chip-tool

编译工程之际,记录一下编译过程,免得后续遗忘,总结下来chip-tool 交叉编译涉及到的知识点: 需要了解如何支持交叉编译,基于GN编译框架需要理解应用库如何交叉编译,理解pkg-config的使用meson 编译&#xf…...

Qt/C++音视频开发50-不同ffmpeg版本之间的差异处理

一、前言 ffmpeg的版本众多,从2010年开始计算的项目的话,基本上还在使用的有ffmpeg2/3/4/5/6,最近几年版本彪的比较厉害,直接4/5/6,大版本之间接口有一些变化,特别是一些废弃接口被彻底删除了,…...

低碳 Web 实践指南

现状和问题 2023年7月6日,世界迎来有记录以来最热的一天。气候变化是如今人类面临的最大健康威胁。据世界卫生组织预测2030年至2050年期间,气候变化预计每年将造成约25万人死亡。这是人们可以真切感受到的变化,而背后的主要推手是碳排放。 …...

信息安全:网络安全体系 与 网络安全模型.

信息安全:网络安全体系 与 网络安全模型. 网络安全保障是一项复杂的系统工程,是安全策略、多种技术、管理方法和人员安全素质的综合。一般而言,网络安全体系是网络安全保障系统的最高层概念抽象,是由各种网络安全单元按照一定的规…...

【云原生】Serverless 技术架构分析

一、什么是Serverless? 1、Serverless技术简介 ​ Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存…...

Visual Studio Code 设置文件头部添加作者、日期和函数注释

step1:安装插件KoroFileHeader step2:左下角选择管理—设置—输入"fileheader"—点击"在setting.json中编辑" step3:添加下面的代码到json文件中 // 文件头部注释 "fileheader.customMade": {"Descripttion":"","ve…...

HCIA云计算 V5.0题库

云计算,这是近几年听得最多词了,云计算对于网络的发展帮助非常大,它自身所产生的价值是不可估量的!所以云计算的岗位对于很多IT公司来说,都是有一定地位的。华为认证云计算面向的对象很简单就是对云计算技术感兴趣的人…...

基于Matlab实现帧间差分法的运动目标检测(附上完整源码+图像+程序运行说明)

帧间差分法是一种常用的运动目标检测方法,可以通过对连续帧之间的差异进行分析来确定目标的运动情况。在本文中,我们将介绍如何使用Matlab实现帧间差分法的运动目标检测。 文章目录 部分源码完整源码图像程序运行说明下载 部分源码 首先,我们…...

Jenkins搭建最简教程

纠结了一小会儿,到底要不要写这个,最终还是决定简单记录一下,因为Jenkins搭建实在是太简单了,虽然也有坑,但是坑主要在找稳定的版本上。 先学一个简称,LTS (Long Term Support) 属实是长见识了&#xff0c…...

设置git可以同时推送gitee和github

查看当前的远程仓库设置&#xff1a; git remote -v 这会列出你当前配置的远程仓库。你可能会看到类似以下的输出&#xff1a;origin-gitee <gitee仓库地址> (fetch)origin-gitee <gitee仓库地址> (push) 新增一个远程仓库 git remote add origin-github <githu…...

Java给Excel设置单元格格式

maven 依赖 <!--读取excel文件--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version> </dependency> <dependency><groupId>org.apache.poi</group…...

__block的深入研究

__block可以用于解决block内部无法修改auto变量值的问题 __block不能修饰全局变量、静态变量&#xff08;static&#xff09; 编译器会将__block变量包装成一个对象 调用的是&#xff0c;从__Block_byref_a_0的指针找到 a所在的内存&#xff0c;然后修改值 第一层拷贝&…...

Segment anything(图片分割大模型)

目录 1.Segment anything 2.补充图像分割和目标检测的区别 1.Segment anything 定义&#xff1a;图像分割通用大模型 延深&#xff1a;可以预计视觉检测大模型&#xff0c;也快了。 进一步理解&#xff1a;传统图像分割对于下图处理时&#xff0c;识别房子的是识别房子的模型…...

【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…...

Java中集合容器详解:简单使用与案例分析

目录 一、概览 1.1 Collection 1. Set 2. List 3. Queue 1.2 Map 二、容器中的设计模式 迭代器模式 适配器模式 三、源码分析 ArrayList 1. 概览 2. 扩容 3. 删除元素 4. 序列化 5. Fail-Fast Vector 1. 同步 2. 扩容 3. 与 ArrayList 的比较 4. 替代方案…...

机器学习04-数据理解之数据可视化-(基于Pima数据集)

什么是数据可视化? 数据可视化是指通过图表、图形、地图等视觉元素将数据呈现出来的过程。它是将抽象的、复杂的数据转化为直观、易于理解的视觉表达的一种方法。数据可视化的目的是帮助人们更好地理解数据&#xff0c;从中发现模式、趋势、关联和异常&#xff0c;从而作出更明…...

百度@全球开发者,见证中国科技超级“碗”!

潮汐涌动时&#xff0c;变化悄然发生。2023年全球AI浪潮迭起&#xff0c;大语言模型热度空前&#xff0c;生成式人工智能为千行百业高质量发展带来更多想象空间&#xff0c;一个蓬勃创新、重构万物的“大模型时代”正蓄势待发。 滴滴滴&#xff5e;百度全球开发者&#xff0c;…...

分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)

说明&#xff1a;请先自行安装好docker再来看本篇文章&#xff0c;本篇文章主要实现通过使用docker部署mysql实现读写分离&#xff0c;并连接数据库测试。第二篇将实现使用Shardingjdbc实现springboot的读写分离实现。 基于Docker去创建Mysql的主从架构 #创建主从数据库文件夹…...

Ajax跨域问题

什么是跨域问题? 跨域问题来源于JavaScript的"同源策略"&#xff0c;即只有 协议主机名端口号 (如存在)相同&#xff0c;则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源&#xff0c;不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的&…...