您现在的位置是:首页 > 编程 > 

新安装的docker daemon.json位置_使用Docker打包代码配置记录

2025-07-18 08:44:15
由于需要将环境和代码打包到Docker中放到其他机器运行,又被无情地消耗了一个周末。听闻大佬说,能将别人不懂的东西,使用通俗易懂的语言解释清楚让别人理解,也是一种能力。因此,特作文以记之。基本概念Docker 包括三个基本概念:镜像(Image):Docker 镜像(Ima

由于需要将环境和代码打包到Docker中放到其他机器运行,又被无情地消耗了一个周末。听闻大佬说,能将别人不懂的东西,使用通俗易懂的语言解释清楚让别人理解,也是一种能力。因此,特作文以记之。

基本概念

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

(上述定义节选自”菜鸟教程[1]“)

根据上述定义,个人对镜像和容器的关系有了清晰的认识。这个一定要弄清楚,否则看后续配置很混乱。

打包流程

网上的概念看多了,还是一头雾水,不知道这个具体流程到底如何,因此这里首先对此次打包镜像和代码的具体流程进行总结概括。

  1. 在本机安装Docker软件。
  2. 拉取Docker Hub已有的基础镜像,编写dockerfile,从而结合该基础镜像和需要打包的代码生成一个新的镜像。
  3. 运行上述新生成的镜像得到一个容器,在该容器中配置代码所需的运行环境,最后将该容器打包为最终交付的镜像。

注:大规模数据集可以不用打包到镜像中,在新机器运行镜像时可直接挂载。

实现细节
  1. 安装Docker软件

本次测试过程中主要在MacOS和CentOS7进行了软件安装。

  • MacOS直接到Docker下载MacOS桌面客户端,运行软件后,命令行中即可使用相应的docker指令进行pull/run等。
  • CentOS7可使用如下命令一键安装(参考菜鸟教程)
curl -fsSL https://get.docker | bash -s docker --mirror Aliyun

特别注意

1号坑:安装需要管理员权限比较方便。安装完成后,如果个人登录账户没有管理员权限,需要让管理员把个人添加到docker用户组才可以正常使用docker,可参考各种CSD教程[2]

2号坑:要在服务器(CentOS7系统)上运行自己创建的docker并调用服务器上的GPU资源,需要安装VIDIA Container Toolkit。同时在docker run的时候,还需要指定--gpus all(当然也可以指定某几块GPU)

2. 拉取Docker基础镜像并编写Docker File

  • 因为Docker Hub中很多镜像已经包含了需要的环境比如CUDA、Conda等。因此直接将这些镜像拉取(即下载)到本地,然后在它们的基础上进行修改配置,会方便很多。比如,此次拉取的nvidia-cuda的基础镜像,使用docker pull命令可直接拉取到本地(不用纠结这个东西在本地存到哪里,只要拉取成功就可以在本地运行它)
https://hub.docker/r/nvidia/cuda/​hub.docker
  • 编写dockerfile的示例网上有很多,这里放出我自己的dockerfile,每行命令对应的意思可以参照菜鸟教程-dockerfile。同时,根据不同的dockerfile使用docker build命令可以生成新的镜像,然后你可以运行创建的新镜像,看看自己的代码是不是在指定位置,挂载的目录有没有放进去,不符合要求就重新生成。这里可以多尝试,多锻炼,不会有其他损失不用怕(有可能你会碰到没法使用sudo,dockerfile记得加上如下命名)。
RU apt-get update && apt-get install sudo

特别注意

号坑:Docker Hub中的镜像拉取非常缓慢,因此需要想办法加速。网上有很多教程给出了使用阿里云与或DaoCloud镜像加速,经过测试发现直接使用阿里云的镜像拉取很快,但是在配置完成DaoCloud后,我依然没有获得镜像加速,可能配置方法仍然有小问题。另外,经过测试,还发先一个小技巧。wifi连接手机热点直接从Docker Hub拉取镜像,速度同样很快(之前不修改源使用conda安装环境的时候这一招同样奏效,时间成本很低,值得尝试)

. 运行容器并配置环境

直接使用docker run命令运行即可,同时要注意可传参数,根据自己的需求来(加上-it命令可以进入交互模式,意思就是可以进入docker,比如docker镜像是基于ubuntu系统,加上-it就可以就如这个系统的命令行,下图节选自菜鸟教程-Docker run)。进入命令行后,想怎么配置环境就属于基本操作了,不熟练的同学可参考我的第一篇知乎文。

环境配置完成后,确保代码可以在该docker中按照自己的预想实现(我的预期就是能调用所有的服务器GPU),然后使用docker commit将该容器打包(是在本地其他命令行打包,不是在这个docker里的命令行打包),就会在本地生成一个新的镜像,要将该镜像传给别人也不用费尽周折去这个镜像在本地的哪个位置,直接使用docker save命令将该镜像压缩为tar,输出到指定位置,交付后,使用docker load即可提取该tar中的镜像到本机。

总结展望
  1. 梳理了一遍打包流程后,现在来看其实也没有很复杂,但每个坑都是自己一点点查出来解决的,还是很耗时,很烦躁。网上到的都是些零散的片段,因此将此流程完整记录期望节省后来者采坑的时间
  2. 本次探索流程中,对于使用Docker的优劣体会:个人认为其优势在于自己可以根据自己的代码安装好环境,换用多台机器无需重复安装环境,只需安装docker即可(通常只有一句命令),其劣势在于打包好的镜像压缩包很大,无论是使用百度网盘/微云/邮件传送都不是太友好,还是很耗时的。
  3. 将导出的镜像压缩包(通常几个G)传送给别人其实也没有一个很好的工具,主要缺陷在于后续镜像版本的迭代更新本文也还没有考虑到(因为本文的docker在其他机器运行后是我本人继续维护使用,所以非常了解,本文流程已足够)。未来,将抽空继续探索如何在阿里云进行docker版本的统一管理和迭代更新,将会更新在本篇文章下。
鸣谢
  1. 特别感谢导师和师兄的大力支持
  2. 感谢舍友的入坑教程[](舍友博客做的很酷炫做的很酷炫,欢迎大家踊跃访问)
  3. 感谢 @顾阳 提供的参考资料——”菜鸟教程“,很全很整洁。
  4. 感谢服务器管理员,周六大半夜不离不弃帮我安装测试,为工作稳步推进给予了充分保障。
参考
  1. ^https://www.runoob/docker/docker-architecture.html
  2. ^https:///u01948858/article/details/78429954
  3. ^https://bravey.github.io/2020-0-24-%E5%A4%A9%E6%B1%A0Docker%E7%BB%8%E4%B9%A0%E5%9C%BA%E5%AE%9E%E8%B7%B5.html#%E4%BB%BB%E5%8A%A1%E6%8F%8F%E8%BF%B0

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1075266.html

相关标签:无
上传时间: 2025-07-09 21:50:20
留言与评论(共有 7 条评论)
本站网友 adc0809
14分钟前 发表
MacOS直接到Docker下载MacOS桌面客户端,运行软件后,命令行中即可使用相应的docker指令进行pull/run等
本站网友 全球快乐国度排行榜
1分钟前 发表
Conda等
本站网友 光气是什么
10分钟前 发表
另外,经过测试,还发先一个小技巧
本站网友 桂林新房
21分钟前 发表
进入命令行后,想怎么配置环境就属于基本操作了,不熟练的同学可参考我的第一篇知乎文
本站网友 问谁领风骚
5分钟前 发表
因此直接将这些镜像拉取(即下载)到本地,然后在它们的基础上进行修改配置,会方便很多
本站网友 微博易
30分钟前 发表
未来,将抽空继续探索如何在阿里云进行docker版本的统一管理和迭代更新,将会更新在本篇文章下