粗犷的理解,docker可以看为更加高级的virtual machine
Docker的安装
official guide
Official Install docker engine
配合理解使用Docker install from CSDN
免sudo使用docker
sudo groupadd docker
sudo gpasswd -a $(USER) docker
sudo service docker restart
最后登入注册好的docker hub账号
docker login
Docker的images和container的粗犷理解和使用
粗犷的理解:
images就是创造的环境,layer by layer,可通过dockerfile来搭建的环境,可以理解为一个class,也就是一个类
container就是运行这个images环境的,可以看成类的实例化,赋值给images这个类
各个部分可以进行的基本操作的overview图,摘选自知乎老范
images的基本操作
1. usually,images都是从编写的dockerfile来创建,dockerfile可以理解成编写的cmake file
docker build -t (image name) .
后面需要接一个 . 意思是找到该目录下的dockerfile,more details can be found 菜鸟教程
2. 删除images
# list images
docker images
# remove images
docker rmi (image id)
3. image的发布
# make sure login in docker
docker push (dockerhub id)/(image name)
# Sometimes, you need rename image name
docker tag imageid (dockerhub id)/(image name)
# remove original tag, here the tag mush be specified. otherwise, it will fail
docker rmi (imagename):tag
Container的基本操作
1. 列举container
docker ps
docker ps -a
2. 运行一个container
docker run -it (image name)
这里 -i 是指交互模式运行,-t是指重新分配一个伪输入终端
通常为了让docker在后台也能运行,exit的时候不会停止运行,我们用另一种方式来run container
# run container
docker run -itd (image name) /bin/bash
# check running docker
docker ps
# enter container
docker exec -it (container ID) /bin/bash
更多的解释可查看Docker Run 命令
3. start/stop/rm/restart container
docker start (container ID)
docker stop (container ID)
docker restart (container ID)
docker rm -r (container ID)
# remove all conatiners
docker rm $(docker container ls -aq)
More details:
Docker的镜像和容器的基本操作
Dockerfile的编写
Dockerfile的编写是创建docker环境的最重要一步,基本需要的package之类的都是在这一层一层的搭建起来的,可以通过pip ,apt-get等等来搭建环境。
一般通常来说,都是建立在官方的一些base image来进一步搭建。
1. dockerfile的基本结构
下面是一个带pytorch的环境的dockerfile
FROM nvcr.io/nvidia/pytorch:19.05-py3
LABEL maintainer="xxx@qq.com"
LABEL version="1.0"
LABEL description="hello docker"
WORKDIR /workspace
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y python3-tk python-pip git tree
RUN python -m pip install --upgrade pip
RUN python -m pip install numpy
RUN python -m pip install torch==1.4.0
COPY path/to/localfile path/to/dockerdir
FROM
第一行必须是from来import一个base image。可以通过在docker hub中找一些base image. 通常还有什么ubuntu
LABEL
就是一个docker创造人的相关信息
WORKDIR
设置的工作目录
RUN
一层一层的执行一些命令,有点类似在terminal中的command line
这里的DEBIAN_FRONTEND=noninteractive 是说,执行的时候自动同意,最快速的执行命令
安装了pip,后面的层就可以用pip来打包上去
COPY
这里是指复制local目录的文件到container中
2. 运行
2.1 build image
docker build -t hello-test .
#OR
docker build -t hello-test -f path/to/dockerfile
2.2 GPU container toolkit
因为我想用的是gpu based pytorch,所以还需要安装一个nvidia container toolkit
# Add the package repositories
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-container-toolkit
sudo systemctl restart docker
检查是否安装好,出现你的gpu就可以了
sudo docker run -it --rm --gpus all ubuntu nvidia-smi -L
2.3 docker run
docker run --rm -it --gpus=all hello-test
Finally done!!
More details:
编写dockerfile
Docker的磁盘挂载
参考
作者说这是bind mounting挂载的方式进行数据同步,操作同一个目录,很方便
docker run -v /home/xxx:/root/yyy
Okay! 目前记录的docker的一些基本操作,对于我的意义还主要是设置好的环境容器。。