Docker Commands

1. 查看docker信息(version、info)

docker version
docker info
docker inspect -f '' name  # lookup the container's IP

2. 操作docker image

$ docker images  # 列出镜像
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>                 <none>              128d249664a0        7 weeks ago         5.445 GB
$ docker tag 128d249664a0 yakun-gpu:latest  # 给镜像打tag,命名
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
yakun-gpu              latest              128d249664a0        7 weeks ago         5.445 GB
$ docker history yakun-gpu  # 查询image历史
IMAGE               CREATED              CREATED BY                                      SIZE
128d249664a0        7 weeks ago          /bin/bash                                       39.08 MB
e0aca483823a        5 months ago         /bin/bash                                       24.88 MB
9516a43a7bd5        6 months ago         /bin/bash                                       21 MB
ab33a0ce9258        9 months ago         /bin/sh -c apt-get -y install bash-completion   5.294 MB

$ docker search caffe-gpu  # 从docker hub上检索镜像
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tleyden5iwx/caffe-gpu-master                                                   20                   [OK]
nakosung/caffe-gpu                                                             0                    [OK]
$ docker pull image-name  # download image
$ docker rmi image_name  # delete image
$ docker rmi $(docker images -a -f "dangling=true" -q)  # dangling的镜像

#导出image,并在其他的机器导入
$ docker save  -o save-img.tar image-name:tag
$ docker load -i save-img.tar

3. 操作docker container

# 启动container,挂载GPU卡和本地目录(本地主机目录:image内目录),进入交互式bash
docker run -ti $DOCKER_NVIDIA_DEVICES --name container-name -v $(cd "$(dirname $0)/.."; pwd):/mnt_data1 image-name bash
# 退出但不停止container: ctrl p + ctrl q; exit 和 ctrl d都会暂停container,之后需要运行start启动
# 之后进入docker(-it 交互式伪终端),ctrl+D/exit退出都不会退出container
docker exec -it 102d3e949a37 bash
# 删除所有已经exit的container -q(id号) -f(filter) -v:移除挂载目录(如果不加,会残留垃圾文件)
docker rm -v $(docker ps -a -q -f status=exited)

# 查看运行的container
docker ps [-a]
# 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message  
docker commit ID new_image_name 

4. docker占用资源查询

docker stats [docker names]  // 查看CPU,Memory,Network使用
docker内存限制可以在创建docker时使用-m参数:-m 256m,容器里程序可以跑到256m*2=512m后会被oom给杀死
目前cpu限制可以使用绑定到具体的线程,或者是在绑定线程基础上对线程资源权重分配。绑定线程可以使用参数--cpuset-cpus=7

5. Dockerfile

# 可以从Dockerfile,自己建立image:
FROM docker/whalesay:latest  # 基于哪个镜像
# 安装软件用,常用,不要忘记清空lists目录,可以缩小image大小
RUN apt-get -y update && apt-get install -y fortunes && rm -rf /var/lib/apt/lists/*
ENV PATH ${PATH}:/opt/tools  # 设置环境变量
COPY requirements.txt /tmp/  # copying local files into the container 
WORKDIR /root/workdir  # 设置之后所有RUN命令的工作目录
CMD /usr/games/fortune -a | cowsay # container启动时执行的命令,但只能有一条CMD命令,多条则只执行最后一条
# 之后基于此构建image whale-yk
docker build -t whale-yk . # 当前目录找dockerfile

对于Centos机器,不同的地方:

RUN curl -o /etc/yum.repos.d/CentOS7-Base-163.repo  http://mirrors.163.com/.help/CentOS7-Base-163.repo \
&& curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 \
&& yum clean all \
&& yum makecache \
&& yum -y -t groupinstall "Development Tools" \
。。。
&& yum clean all

另,Dockerfile中每一条命令是一个step,在image中新加一层(新建一个container,然后操作,然后rm掉container,得到一个加一层的image) 所以修改某一条命令后,之前的Cache,之后的丢掉重新建

Loading Disqus comments...
Table of Contents