ubuntu20.04中docker容器及容器中使用gpu的安装和配置_Amelia0911的博客-程序员秘密

技术标签: 配置经验  

一、安装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

智能推荐

vue项目屏幕自适应(有大屏)_是云呀!的博客-程序员秘密_vue屏幕自适应

目前做项目都是基于1920*1080窗口大小有的要求屏幕自适应我一直这样子做,挺简单的,今天分享给大家第一步安装一个包只在开发环境需要第二步在vue.config.js文件中加入以下内容(没有就创建一个,与src目录同级)module.exports={css:{extract:false,//false表示开发环境,true表示生成环境sourceMap:false,loaderOptions...

七.项目管理基础知识_邵亮的博客-程序员秘密

@(项目经理考试学习笔记)七.项目管理基础知识(考2到3分,了解基本概念)1. 项目与项目管理基本概念和特点1.1 项目特点:临时性,独特性,渐进明细性1.2 项目的目标2. 项目管理的概念2. 项目经理2.1 项目经理知识体系2.2 项目经理需要的经验3. 项目干系人4. 项目管理办公室(PMO)5....

Halcon例程分析10:仿射变换物体的测量_苏林同学的博客-程序员秘密

打开halcon,按下ctrl+e打开halcon自带例程。方法-&gt;模板匹配(基于形状)-&gt;pm_measure_board.hdev********************************************************************************** This example program shows the use of pa...

《让程序员成为正常人》(笔记)_ITdavid的博客-程序员秘密

电子邮件天天来,从早到晚不复回。电脑辐射催发白,廿如青丝卅如雪。应该对任务采用队列管理,而不是堆栈。每天在开始工作之前先指定一个计划,将要做的工作根据紧急程度(截至日期)进行排序,做成一个队列。做完一项,再做下一项。除非特别紧急,否则新任务一律放到队尾。选出今天能够完成的工作,不要将时间流出休息和Buffer。

linux 设备驱动之8250串口驱动分析_冰枫的博客-程序员秘密

linux 设备驱动之 8250 串口驱动   ------------------------------------------  本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ -----------

URL重定向(跳转)漏洞_bylfsj的博客-程序员秘密

转自:https://landgrey.me/open-redirect-bypass/下面是owa...

随便推点

BP神经网络_ChengyuanM.的博客-程序员秘密_bp神经网络

BP(Back Propagation) 算法是神经网络深度学习中最重要的算法之一,了解BP算法可以让我们更理解神经网络深度学习模型训练的本质,属于内功修行的部分。

html+css基础入门学习教程之HTML 样式_html前端基础入门教程的博客-程序员秘密

HTML 样式通过使用 HTML4.0,所有格式化代码均可移出 HTML 文档,然后移入一个独立的样式表。先来看一个例子,代码如下:&lt;head&gt; &lt;style type="text/css"&gt; h1 {color: red} p {color: blue} &lt;/style&gt;&lt;/head&gt;...

javascript ajax_msnetc的博客-程序员秘密

/*url-loading object and a request queue built on top of it*//* namespacing object */var net=new Object();net.READY_STATE_UNINITIALIZED=0;net.READY_STATE_LOADING=1;net.READY_STATE_LOADED=2;net.REA

Maven全局设置jdk的版本_man_to_home的博客-程序员秘密

&lt;!-- 全局jdk配置,settings.xml --&gt; &lt;profile&gt; &lt;id&gt;jdk18&lt;/id&gt; &lt;activation&gt; &lt;activeByDefault&gt;true&lt;/activeByDefault&gt; ...

3分钟告诉你如何成为一名黑客|零基础到黑客入门指南,你只需要掌握这五点能力_普通网友的博客-程序员秘密_黑客编程入门先学什么

站在计算机角度上解释,黑客就是去寻找网站、系统、软件等漏洞,并利用漏洞来取得一些数据或达到控制,让对方程序崩溃等效果。刚入门的黑客大部分从事渗透工作,而渗透大部分属于web安全方向。因此换个淳朴点的名字称呼他们就是——安全工程师。是不是一下子就没那么神秘了?不过,所谓职称仅仅是代号。我认为黑客真正的魅力在于他们对于代码的痴迷与热爱,对自己能力近似于傲慢的自信以及打破陈规的创造力与勇气。当然不包括触犯法律。...

STL:容器—栈_wyc_zzr的博客-程序员秘密

栈(Stack)又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,它是操作受限的线性表,因此,可称为限定性的数据结构。限定它仅在表尾进行插入或删除操作。表尾称为栈顶,相应地,表头称为栈底。栈的基本操作除了在栈顶进行插入和删除外,还有栈的初始化,判空以及取栈顶元素等。