一文快速入门docker和nvidia-docker
docker和nvidia-docker介绍目录docker和nvidia-docker介绍docker介绍nvidia-docker介绍docker快速入门Docker架构Docker生命周期Docker常用命令创建容器Nvidia-docker使用容器资源创建前台运行容器容器生命周期停止容器暂停容器杀死容器docker sto...
docker和nvidia-docker介绍
目录
参考:
nvidia-docker官网
docker 官网
docker介绍
- 容器级别的虚拟化
- 不是基于硬件虚拟化
- 和宿主机共享操作系统内核和资源
- 轻量
- 方便的构建&部署应用程序
- 采用虚拟化控制
nvidia-docker介绍
docker原生并不支持在他生成的容器中使用Nvidia GP资源。nvidia-docker是对docker的封装,提供一些必要的组件可以很方便的在容器中用GPU资源执行代码。从下面的图中可以很容器看到nvidia-docker共享了宿主机的CUDA Driver。
docker快速入门
docker 引擎
Docker Engine是一个客户端-服务端应用程序,包含以下主要组件:
- 一个长时间运行的程序被称作守护进程(这个docker命令)
- 一个REST API,它指定程序可以用来与守护进程通信并指示它做什么。
- 一个命令行接口(CLI)客户端(这个docker命令)
CLI使用Docker REST API控制Docker守护进程或者通过脚本/直接CLI命令和Docker守护进程交互。
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>
更多推荐
所有评论(0)