Docker配置DL envs教程

news/2024/9/22 18:20:42/

Docker容器与镜像的区别

Docker镜像类似于虚拟镜像,是一个只读的文件,包括进程需要运行所需要的可执行文件、依赖软件、库文件、配置文件等等。
而容器则是基于镜像创建的进程,可以利用容器来运行应用。
总结来说,镜像只读,容器是动态的,我们又可以基于容器创建新的镜像,而docker就是帮助我们实现这些功能的应用引擎。

本教程实现在深度学习环境下安装配置docker

配置一个镜像只需要执行

  1. 从docker hub 上面下载一个基础镜像; 2. 然后在这个基础镜像的基础上安装python代码所需要的package; 3. 更新镜像。

一、安装Docker

直接使用官网脚本自动安装即可

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

测试docker是否安装成功

sudo docker help

二、Docker镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。例如:科大镜像,阿里云等等。

以阿里云为例:阿里云镜像获取地址

然后在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请健该文件)

{“registry-mirrors":["https://XXX.mirror.aliyuncs.com/"]}

之后重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

三、登录Docker hub

1.首先注册一个账号,然后在本地登录

sudo docker login

登录成功后,我们就可以在docker hub 直接拉去自己账号下的全部镜像

四、从Docker hub上面下载基础镜像

如果需在服务器上跑深度学习算法,需要下载pytorch-cuda 包镜像,执行一下命令:

sudo docker search torch1.9

选择一个合适的镜像下载即可

sudo docker pull lingjunlh/torch1.9.1-cuda11.1

这样我们就把这个镜像下载到了本地,使用如下命令进行查看

sudo docker images

五、根据镜像创建容器

镜像只是一个可读文件,需要创建容器来运行程序,因此根据镜像创建一个容器

sudo docker run -it lingjunlh/torch1.9.1-cuda11.1:v1 /bin/bash
  1. i:交互式操作
  2. t:终端
  3. lingjunlh/torch1.9.1-cuda11.1:v2: 镜像名字: 镜像标签
  4. /bin/bash: 命令操作
    在这里插入图片描述
    这样就进入了容器,该容器的ID为26…, 一个容器就相当于一个进程,是镜像的实例化,利用包含了程序运行的环境和配置环境,例如python, cuda, list。 我们可以在容器中执行命令,例如pip list。

六、在容器内安装所需要的包

通常情况下,为了达到我们自己的目标,还需要在基础镜像的基础上安装新的包,这一过程可以直接在容器内进行,具体操作和在本地命令行操作一样,即直接在容器内通过conda install或者pip install。安装完之后用exit命令退出容器。

七、更新镜像

容器动态,镜像静态。我们在容器中更新了python包,如果以后可以持久化使用,还需要使用commit将容器打包为镜像。

docker commit -m="update packages" -a="XXX" 26.... XXX/pymarl:v1

-m: 提交描述信息
-a: 指定镜像作者
26…: 容器ID
XXX/pymarl:v1:作者名/镜像名:标签

在这里插入图片描述
查看镜像,可以看到我们已经成功的构建了自己的镜像pymarl:v1

在这里插入图片描述

之后我们就可以直接利用该镜像创建容器,在容器里跑代码啦~

八、在本地使用容器运行代码

为了测试镜像能否正常运行我们的代码,可以先在本地用容器测试一下。

首先我们需要创建一个本地Ubuntu系统和docker容器共享的文件夹:

sudo mkdir /data
sudo docker run -v /data :/data-itd  zhouxuanhan/pymarl:v1 bash

在这里插入图片描述
然后将代码cp到/data 下,这样该目录下就和容器中的/data 目录互通,查看此时正在运行的容器。

sudo docker ps

在这里插入图片描述
该容器就是我们刚刚所创建的用于本地测试代码的容器,用docker attach进入容器

sudo docker attach 500...

之后的步骤就是与在本地系统命令行的操作一样,进入代码的文件夹,用python命令执行代码

九、安装nvidia-cuda

这里直接根据官方教程安装即可。

Installation Guide — NVIDIA Cloud Native Technologies documentation

安装完nvidia-cuda之后,再创建容器时加上**–gpus all**,即可在容器内调用cuda,即

sudo docker run -v /data:/data -itd --gpus all zhouxuanhan/pymarl:v1 bash

十、推送镜像到Docker Hub

sudo docker push XXX/pymarl:v1

常见命令

1. 查看所有镜像  docker images
2. 查找镜像         docker search XXXimage
3. 下载镜像         docker pull XXXimages:tag
4. 删除镜像         docker rmi XXXimages:ta
5. 启动容器         docker run -it aimge:tag /bin/bash
6. 退出容器         exit
7. 查看正在运行的容器 docker ps
8. 进入正在运行的容器 docker attach container-ID
9. 查看已停止运行的容器  docker ps -a
10.启动已停止的容器   docker start container-ID
11.停止容器   docker stop container-ID
12.重启已停止的容器 docker restart container-ID
13.退出容器终端 docker exec
14.更新镜像    1.先用镜像创建容器 docker run -it image:tag /bin/bash2.在容器内操作,然后commit 提交容器副本创建新的镜像docker commit -m=‘description' -a='author' container-ID author/image:tag2 

总结

总结一下,镜像实际上就是一个虚拟的操作系统,容器是镜像的实例化,在容器里操作和在本地系统的命令行操作没有任何区别,容器如果发生了改变,可以直接commit成新的镜像,方便下一次使用~


http://www.ppmy.cn/news/40370.html

相关文章

Linux_vim编辑器

Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windows系统下的notepad(记事本)编辑器,由于在Unix及Linux系统的任何版本,Vi编辑器是完全相同的,因此可以在其他任何介绍vi的地方都能进一步了解它&…

MATLAB算法实战应用案例精讲-【智能优化算法】强度帕累托进化算法 2 (SPEA2)(附MATLAB代码实现)

目录 前言 算法原理 算法思想 基于SPEA2的改进算法 原始 K 近邻方法

ios native 接入穿山甲sdk

【记录】穿山甲广告iOS版SDK接入记录_ios 集成穿山甲_sanjieshenwu1987的博客-CSDN博客 1、pod导入外部文件; 2、appDelegate文件中 3、 代码文件 class AskViewController: UIViewController,BUNativeExpressRewardedVideoAdDelegate{ 增加协议代理 4、广告加…

kotlin的一些标准函数

文章目录1. this 上下文withrunapply2. it 上下文letalso3. 其他好用的函数mapfilterreduceflatMapkotlin的标准函数有 run,let,with 等等,平时用的时候没有太在意他们之间的差异,现在来总结对比一下。 将他们分成 this 上下文和 …

rust网络编程以及unsafe模块

网络层目前 IPv4 和 IPv6 分庭抗礼,IPv6 还未完全对 IPv4 取而代之;传输层除了对延迟非常敏感的应用(比如游戏quic协议),绝大多数应用都使用 TCP;而在应用层,对用户友好,且对防火墙友…

网络安全之入侵检测

目录 网络安全之入侵检测 入侵检测经典理论 经典检测模型 入侵检测作用与原理 意义 异常检测模型(Anomaly Detection) 误用检测模型(Misuse Detection) 经典特征案例 ​编辑自定义签名 ​编辑 签名检查过程 检测生命周期…

什么是Windows数据恢复?[数据恢复操作指南]

什么是Windows数据恢复及其工作原理? Windows用户通常都会将他们重要工作和生活文件存储在他们的存储设备上。随着存储空间的缩小,相当多的人可能会删除一部分不需要的或旧的文件来释放空间。或者,他们也可能不小心删除了仍然有用的文件。 …

Java多线程:ThreadLocal源码剖析

ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样的思路。 三个理论基础 在剖析ThreadLo…