docker和nvidia-docker介绍

目录

docker和nvidia-docker介绍

docker介绍

nvidia-docker介绍

docker快速入门

Docker架构

Docker生命周期

Docker常用命令

创建容器

Nvidia-docker使用

容器资源

创建前台运行容器

容器生命周期

停止容器

暂停容器

杀死容器

docker stop与docker kill区别

删除容器

端口映射

数据持久化

容器中环境变量

下载镜像

列出所有的镜像

推送镜像到官方hub中

nvidia-docker 示例

容器中查看GPU显卡信息

启动gpu版本的Tensorflow

批量操作命令

快速删除所有的容器

删除名字是的镜像

删除所有退出的容器

归档所有的镜像

 


参考:

nvidia-docker官网

docker 官网

 

docker介绍

  • 容器级别的虚拟化
  • 不是基于硬件虚拟化
  • 和宿主机共享操作系统内核和资源
  • 轻量
  • 方便的构建&部署应用程序
  • 采用虚拟化控制          
虚拟机和容器虚拟化比较

nvidia-docker介绍

docker原生并不支持在他生成的容器中使用Nvidia GP资源。nvidia-docker是对docker的封装,提供一些必要的组件可以很方便的在容器中用GPU资源执行代码。从下面的图中可以很容器看到nvidia-docker共享了宿主机的CUDA Driver。

nvidia-docker架构设计

docker快速入门

docker 引擎

Docker Engine是一个客户端-服务端应用程序,包含以下主要组件:

  • 一个长时间运行的程序被称作守护进程(这个docker命令)
  • 一个REST API,它指定程序可以用来与守护进程通信并指示它做什么。
  • 一个命令行接口(CLI)客户端(这个docker命令)

CLI使用Docker REST API控制Docker守护进程或者通过脚本/直接CLI命令和Docker守护进程交互。

Docker守护进程创建和管理Docker对象,比如:镜像,容器,网络和卷。

docker management resource

Docker架构

Docker采用主从架构,这个Docker客户端和Docker守护进程通信,后者负责构建,运行和分发Docker容器。

Docker 架构
Docker 架构

Docker生命周期

Docker常用命令

查看版本

$docker version

查看docker serever信息

$ docker info

列出所有的镜像

$ docker images

列出所有的容器

$ docker ps
 
-l: 列出最近创建的容器
-a: 列出所有的容器,包括退出的
-f name=[]:列出指定名字的容器

资源利用率监控

$ docker stats

创建容器

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG....]

Options
-- name: 容器名字
--d: 后台运行容器
--rm: 容器退出后删除容器
-v: 数据卷挂载
-p: 端口映射
-P: 映射所有暴露的端口
-e: 设置容器中的环境变量
-t: 开启终端
-i: 打开标准输入
-u: 设置用户的UID
-w: 设置容器中的工作目录
-m: 内存限制
--cpuset-cpus: 设置容器具体使用的CPU
--add-host: 增加hosts到容器的/etc/hosts
--privileged: 打开特权模式

Nvidia-docker使用

$ nvidia-docker run --rm nvidia/caffe nvidia-smi

NV_GPU参数使能GPU卡

$ NV_GPU=1,3 nvidia-docker run --rm nvidia/caffe nvidia-smi

容器资源

$ docker run -it -d ubuntu:18.04 /bin/bash

创建前台运行容器

$ docker run -it ubuntu:18.04  /bin/bash

容器生命周期

停止容器

$ docker stop <container-name>

暂停容器

$ docker pause <container-name>

杀死容器

$ docker kill <container-name>

docker stop与docker kill区别

docker stop是优雅的退出,先发送SIGTERM信号,一段时间后,再发送SIGKILL信号。容器中进程在收到SIGTERM后,会做一些“善后”工作,比如:保存状态,处理当前请求等。

docker kill,发送SIGKILL信号,应用程序直接退出。

删除容器

先停止容器,后删除容器

$ docker rm <container-name>

端口映射

通过映射的端口可以很方便的把容器中服务暴露给其他节点的访问

$ docker run -it --name:ubuntu -p 1022:22 ubuntu:latest /bin/bash

数据持久化

容器是不稳定的,而容器挂了之后,容器中的数据就丢失了,为了容器的数据持久化。需要把容器中的数据挂载出来,即使是容器挂了,持久化的数据不会丢失。

$ docker run -it --name:ubuntu -v /data:/data ubuntu:latest /bin/bash

容器中环境变量

$ docker run -it -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

下载镜像

$ docker pull ubuntu:18.04

列出所有的镜像

$ docker images

从文件中加载镜像

$ docker load --input {file-name}.tar.bz2

容器打包成镜像

docker commit <container-name> [image][:tag]
--change='ENTRYPOINT ["/start.sh"]':修改启动文件

dockerfile构建镜像

docker build -t IMAGE[:TAG] –f Dockerfile {dockerfile path}

推送镜像到官方hub中

$ docker push [docker hub id]/[image name][:tag]

镜像的打包

$ docker save [image name] | bzip2 > {file-name}.tar.bz2

修改镜像的名字

docker tag [iamge-name][:tag] [new-iamge-name][:tag]

删除镜像

删除镜像之前,先删除基于这个镜像产生的容器

docker rmi <image-name>

快速创建本地镜像仓库

docker run -d -p 5000:5000 --restart=always --name localrepository registry

查看镜像列表:http://localhost:5000/v2/_catalog

nvidia-docker 示例

容器中查看GPU显卡信息

nvidia-docker run --rm nvidia/caffe nvidia-smi

启动gpu版本的Tensorflow

nvidia-docker run -i -p 6006:6006 -p 8888:8888 tensorflow/tensorflow:1.12.0-rc1-py3

容器层限制使用的GPU卡数

#限制启动的TF容器能使用1,3号显卡
NV_GPU=1,3 nvidia-docker run -i -p 6006:6006 -p 8888:8888 tensorflow/tensorflow:1.12.0-rc1-py3

批量操作命令

快速删除所有的容器

$ docker rmi $(docker images -q)

删除名字是<none>的镜像

$ docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

删除所有退出的容器

$ docker rm $(docker ps -a -f status=exited)

归档所有的镜像

docker save $(docker images| awk 'NR!=1 {print $1":"$2}') -o  <image.tar>

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐