ubuntu20.04中docker容器及容器中使用gpu的安装和配置_ZM_L的博客-程序员信息网

技术标签: 配置经验  

一、安装docker-19.03

1.查看ubuntu内核

uname -r

2.安装docker

sudo apt-get install docker.io

3.查看版本

docker version 或 docker -v

4.启动

sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker.service

5.查看状态

sudo systemctl status docker

二、修改docker源:

sudo gedit /etc/docker/daemon.json

添加以下内容:(使用阿里源)

{
    
    "registry-mirrors":[
         "https://emasu4pd.mirror.aliyuncs.com",
         "http://hub-mirror.c.163.com"
    ],
    "runtimes": {
    
        "nvidia": {
    
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

三 、docker中使用gpu:

方法一: 使用nvidia-container-runtime:

1.添加库: Link

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update

新建script.sh,写入上述内容,执行sh script.sh。

2. 安装nvidia-container-runtime:

sudo apt-get install nvidia-container-runtime
systemctl restart docker #重启docker

3.测试验证:(启动命令中添加参数:–gpus all 或 --gpus "device=1"指定):

docker run --gpus all --rm nvidia/cuda:11.0-base nvidia-smi

方法二: 使用nvidia-docker2:

1.添加库: Link

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

新建script.sh,写入上述内容,执行sh script.sh。

2. 安装nvidia-container-runtime及查看:

sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

3.测试验证:(启动命令中添加参数:–runtime=nvidia):

docker run --runtime=nvidia --rm nvidia/cuda:11.0-base nvidia-smi

测试nvidia-docker

以上便完成docker和nvidia-docker的安装。

四、修改镜像root密码:

当需要更新镜像或安装文件时,需要在root下执行。

#运行容器
docker run --rm --gpus all -p 8000:3000 -it --ipc=host  <REPOSITORY:TAG> /bin/bash
#在容器运行的基础上,打开另一个终端窗口,执行一下命令
docker exec -it --user root <CONTAINER ID> /bin/bash
#修改root密码:
passwd root
#在镜像中完成操作后,打开另一个终端,commit镜像
docker commit -m "change passwd root" -a "Amelia" <CONTAINER ID> <REPOSITORY:TAG> #<REPOSITORY:TAG>可自己指定

五、将本地环境打包成docker镜像:

过程参考

文件组成:

Dockerfile
library.txt

1. 将项目的依赖库进行导出:

#激活环境
source activate torch1.7
#执行
pip freeze > library.txt

2.创建Dockerfile,编写内容如下:

#基础镜像
FROM python:3.8.5 
#创建用户目录
RUN useradd -m workspace
#处理指定目录以及其子目录下的所有文件
RUN chown -R workspace /home/workspace
#工作目录
USER workspace
WORKDIR /home/workspace
#将库文件拷贝到工作路径
#COPY library.txt /home/workspace/library.txt
ADD library.txt /home/workspace
#安装指定的库
RUN pip install -r library.txt

3.创建镜像:

docker build -t test:v1 .

4.测试启动容器:

docker run --rm -p 8000:3000 -it --ipc=host test:v1 /bin/bash

六、docker常用命令:

#启动
systemctl start docker
#重启docker服务
sudo service docker restart
#关闭
sudo systemctl stop docker
#卸载
sudo apt-get remove docker docker-engine docker-ce docker.io
命令 操作
镜像列表查看 docker images
删除镜像 docker rmi IMAGE ID
容器列表查看 docker ps -a
删除容器 docker rm -f CONTAINER ID
搜索镜像 docker search 镜像 //也可以从官网搜索:https://hub.docker.com/
dockerHub镜像库中拉取镜像 docker pull 镜像
拷贝本地文件到容器中去 docker cp 本地目录 CONTAINER ID:容器目录
在基础容器中做完修改后保存镜像的命令 docker commit -m “说明” -a “作者” CONTAINER ID 镜像名字:标签 //自己指定(镜像名字:标签)[[REPOSITORY]:[TAG]]只能用小写字母
查看镜像的详细信息 docker inspect IMAGE ID
镜像保存 docker save -o path/name.tar IMAGE //容器列表中的IMAGE
镜像加载 docker load -i path/name.tar
启动已存在的容器 docker attach CONTAINER ID
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuzhuomei0911/article/details/115176455

智能推荐

UE4-注册已序列化Shader流程_RapdoZoro的博客-程序员信息网

文章为本人学习虚幻4引擎源码所整理笔记,如有纰漏欢迎指正交流。1.UMaterial::PostLoad( ) 时,进入注册: (Material.cpp)LoadedMaterialResources、MaterialResources为UMaterial成员变量: (Material.h)2.PostLoad( )中调用了ProcessSerializedInlineShaderMaps( )方法:在该方法中会: 1).遍历所有LoadedMat...

Embedding词嵌入层的原理_あずにゃん的博客-程序员信息网

日萌社人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)Embedding keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embed...

php 下拉刷新上拉加载更多,MaterialRefreshLayout实现下拉刷新上拉加载更多_耄先森吖的博客-程序员信息网

通过本文可以了解以下几方面:1、MaterialRefreshLayout是什么2、MaterialRefreshLayout怎么使用3、一个简单的小小demo带你实现下拉刷新上拉加载更多首先看下效果图:这里写图片描述MaterialRefreshLayout是什么简介:这是一个下拉刷新控件,它比SwipeRefreshLayout更漂亮和强大,使用也比较简单。支持android 3.0 以上。希...

ubuntu安装日志_weixin_34128839的博客-程序员信息网

默认 桌面有2个文档 一个是示例,我们选择 开始安装Ubuntu 14.10 LTS ,记得在这之前 要按Ctrl+Alt+T 打开终端,输入代码:sudo umount -l /isodevice这一命令取消掉对光盘所在 驱动器的挂载(注意,这里的-l是L的小写,-l 与 /isodevice 有一个空格。),否则分区界面找不到分区。 命令执行两次 选安装类型,我们用其他选项...

matlab自定义ros消息类型,ROS与Matlab语言入门教程-专业ROS消息的使用_动物志的博客-程序员信息网

一些常见的ROS消息存储的格式,后期在使用之前需要进行转换。MATLAB能够帮助你转换常见的ROS消息格式,有利于简化应用。在本例,你可以探索激光扫描仪的消息类型,有关解压和压缩图片以及点云方面的处理工作。 预备知识:基本ROS消息的使用。载入消息实例首先,载入本例将使用的消息样例,这些消息来自多种机器人传感器。调用“exampleHelperROSLoadMessages”载入消息: examp...

SpringBoot整合RabbitMQ ——Direct模式_·梅花十三的博客-程序员信息网_direct模式

背景上篇博文讲述了fanout广播模式,只要绑定该类型的交换机的所有队列,都会接收到该交换机的消息。而direct模式是针对广播模式的一种升级,对绑定的队列进行分类,投递消息时指定一个RountingKey,只有RountingKey 与 BindingKey 匹配的队列,消息才会被投递进去。假设我们有一个订单系统,用户进行下单支付,下单成功后,根据业务处理一般都会消息通知用户相关信息。例如通过邮件+手机+qq 等方式进行消息推送支付成功信息。由上图可知,每个队列与交换机都绑定

随便推点

Android实现自定义字体格式液晶数字_a315823806的博客-程序员信息网_android 液晶数字

最近在研究点心省电,想做个类似的产品,看到界面听炫的,在实现过程中发现android不支持液晶显示的数字格式,一时陷入困境。最后自己,通过查看Linux系统下的字库ttf,查看实现了起功能,顺便搜集了下其他格式的字体格式,皆可以个性化自己的程序,变得与众不同。看实现的代码:// 必须事先在assets底下创建一fonts文件夹 并放入要使用的字体文件(.ttf)

初步认识MDL_aoxuely的博客-程序员信息网_mdl映射

一、内存描述符列表 (MDL) 是一个系统定义的结构,通过一系列物理地址描述缓冲区。执行直接 I/O 的驱动程序从 I/O 管理器接收一个 MDL 的指针,并通过 MDL 读写数据。一些驱动程序在执行直接 I/O 来满足设备 I/O 控制请求时也使用 MDL。驱动程序编写人员不应该假设 MDL 描述的内存页的顺序或内容。驱动程序不得依赖于 MDL 指向的任何位置的数据值,并且不应该直接取消...

夏令营经验分享_风正呆新的博客-程序员信息网

夏令营流程介绍(我们那年因为疫情的原因,所有流程基本上都是线上进行的,今年可以会有稍微的变化,而且可能需要到目标学校参加夏令营,本文内容仅供参考):X学校发布夏令营开营通知按照要求准备材料并提交申请X学校发布入营名单,同时公布笔试、机试、面试安排准备笔试、机试、面试(各个学校安排不太一样,有的学校可能缺少一些环节,比如机试。而且有的学校是笔试淘汰一批人,面试淘汰一批人;有的学校是综合笔试面试的成绩再淘汰)因为疫情需要线上进行,所以进行了双机位测试,来测试设备和笔面试环境参加笔面试X学校发布优

计算机原理第7版答案,计算机组成原理-第7章以后作业答案.doc_大不留是一只狐狸的博客-程序员信息网

文档介绍:第七章指令系统ღ7-1指令,程序名词解释指令:计算机执行某种操作的命令程序:由有序的指令串构成,程序要解决一个具体的问题指令系统:一台计算机能执行的全部指令的集合指令系统的重要性:软件编程的基础,硬件设计的依据,综合考虑计算机的软硬件是计算机设计的关键因素。ღ7-2操作码设计定长,变长操作码用来指明该指令所要完成的操作。通常位数反映了机器的操作种类,即机器允许的指令条数,如7位→2^7=...

HDU2072 单词数 {字符串}【字典树】_岛上的黄鸡的博客-程序员信息网

HDU2072 单词数(字典树)Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。Input有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。Output每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。Sample Inputyou are my friendSample Ou

总线宽度与内存地址的计算(以8086为例)_阿达King的博客-程序员信息网_地址总线宽度怎么算

内存地址的计算(以8086为例)概述尽管当前的计算机的内存大小和访问长度已经远远超过了8086计算机的大小,但是其内存的访问原理还是来自于8086,并且8086的内存大小比较小,容易说明问题。总线的位数和计算总线的英文是Bus,在计算机中的作用是数据传输,所谓总线就是所有的数据,不管来自于哪里,都是从总线走,相当于一条公共的高速公路。总线的宽度表示了一次传输数据的大小。例如:总线宽度为1位,表示这根总线只有一根导线连接各个部件,每个次只能表达一次0或者1,那么它访问内存只能访问1位。+---+