Docker-学习笔记

资料

docker.org.cn
知乎资料
Docker — 从入门到实践
docs docker
docs nvivida docker

Image,Container,Rigistry基本概念

镜像image:Docker Image 相当于一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

容器container:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

注册服务器,仓库: 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是管理仓库的具体的服务器。
一个 Docker Registry 中可以包含多个仓库(Repository),一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像

install docker

step 1: install docker and nvidia docker2
docker install
nvidia-docker2

#安装curl
$ sudo apt install curl

$ curl https://get.docker.com | sh   && sudo systemctl --now enable docker

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
>    && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
>    && 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

$ sudo apt-get install -y nvidia-docker2

$ sudo systemctl restart docker

# test by running a base CUDA container:
$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
Unable to find image 'nvidia/cuda:11.0-base' locally

step 2: 建立docker用户组

$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ newgrp docker

# 查看镜像
$ docker images

创建 image

# pull 一个镜像下来
docker pull pytorch/pytorch:1.9.0-cuda11.1-cudnn8-devel
1.9.0-cuda11.1-cudnn8-devel: Pulling from pytorch/pytorch

# 基于这个镜像,根据Dockerfile配置一个新的镜像
## step1 写一个Dockerfile文件
## step2 
$ cd DockerFile
$ docker build -t test:v1 .
# 这样就生成了一个test的镜像,tag为v1

# 新建container名为mmdetection
$ docker run -it --gpus all -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 -p 8080:8080 -p 8888:8888 -d -v /home/si/SIINNO/:/SIINNO/ --shm-size='8g' --name mmdetection test:v1

# 查看是否建好
$ docker ps -a
# 进入容器
$ docker attach mmdetection

# Expose the X server on the host.
$ xhost +local:root

# 配置容器环境
$ docker run \
  -it \
  --gpus all \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e DISPLAY=$DISPLAY \
  -e QT_X11_NO_MITSHM=1 \
  glvnd-x \
  bash

#Inside the container, a good way to test that the GPU is being used is to install and run the OpenGL benchmark application glmark2.
$ apt-get update \
  && apt-get install -y -qq glmark2 \
$ glmark2

在container上配置环境

跑的网络所需要的环境配置,一般会根据 docker/requirestment.txt
下载最好用阿里源,在command后面加 -i https://mirrors.aliyun.com/pypi/simple/
安装时注意修改对应的 cuda/pytorch version

导出/导入/删除容器

docker export mmdetection > mmd.tar

#从容器快照文件中导入镜像
$ cat mmd.tar | docker import - test/mmd:v2

$ docker container rm mmdetection

$ docker commit my_container my_image

指令

# start a container, while docker is stopped
$ docker start ContainerName
$ docker container start
$ docker container stop
$ docker container restart
# log-in to a running container, when it is log-out before
$ docker attach ContainerName


# 退出容器
$ exit
# 查看运行过的容器
$ docker ps -a
# 查看镜像
$ docker images

# push image to Docker Hub
$ docker push imageName:Tag

数据卷, 本地文件挂载

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  1. 数据卷 可以在容器之间共享和重用

  2. 对 数据卷 的修改会立马生效

  3. 对 数据卷 的更新,不会影响镜像

  4. 数据卷 默认会一直存在,即使容器被删除
    创建/挂载/删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值