文章目录

  • 1. 容器管理
  • 1.1 `docker run`
  • 1.2 `docker start/stop/restart`
  • 1.3 `docker kill`
  • 1.4 `docker rm`
  • 1.5 `docker exec`
  • 1.6 `docker import`
  • 1.7 `docker export`
  • 2. 镜像管理
  • 2.1 `docker images`
  • 2.2 `docker rmi`
  • 2.3 `docker tag`
  • 2.4 `docker build`
  • 2.5 `docker history`
  • 2.6 `docker save`
  • 2.7 `docker load`
  • 3. 镜像仓库
  • 3.1 `docker login/logout`
  • 3.2 `docker pull`
  • 3.3 `docker push`
  • 4. 其他常用容器操作
  • 4.1 `docker commit`
  • 4.2 `docker ps`
  • 4.3 `exit`
  • 5. 问题经验记录
  • 5.1 `docker (export、import、save、load)`区别
  • 5.1.1 文件大小不同
  • 5.1.2 是否可以对镜像重命名
  • 5.1.3 是否可以同时将多个镜像打包到一个文件中
  • 5.1.4 是否包含镜像历史
  • 5.1.5 应用场景不同
  • 5.2 修改docker共享内存
  • 6. 参考


1. 容器管理

1.1 docker run

  • 创建一个新的容器
  • 语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 常用参数:
-d:           后台运行容器,并返回容器ID;
-i:           以交互模式运行容器,通常与 -t 同时使用;
-P:           随机端口映射,容器内部端口随机映射到主机的高端口
-p:           指定端口映射,格式为:主机(宿主)端口:容器端口
-t:           为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name:       为容器指定一个名称
-m:           设置容器使用内存最大值;
--net:        指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
-v:           绑定一个卷,相当于目录映射
--rm:         当容器退出时自动地移除容器
--privileged: 获取宿主机root权限
  • 实例:使用一个名为centos7-gcc4.9-torch-py3:1.1的镜像创建容器,并赋予root特殊权限,当容器退出时自动移除。
docker run -it --privileged=true -v data:/data --name=xxxx --shm-size=8g --rm centos7-gcc4.9-torch-py3:1.1

1.2 docker start/stop/restart

  • 功能
  • docker start :启动一个或多个已经被停止的容器
  • docker stop :停止一个运行中的容器
  • docker restart :重启容器
  • 语法:
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]

1.3 docker kill

  • 杀掉一个运行中的容器。
  • 语法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]

1.4 docker rm

  • 删除一个或多个容器。
  • 语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 常用参数:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
  • 实例:删除所有已经停止的容器:
docker rm $(docker ps -a -q)

1.5 docker exec

  • 在运行的容器中执行命令
  • 语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 实例:进入一个已经在运行的容器
$ sudo docker ps  # 查看正在运行的docker,搞清楚自己的那一个,然后将id放到下一条命令中
$ sudo docker exec -it 775c7c9ee1e1 /bin/bash  # 这里的775c7c9ee1e1就是自己的dockerid

1.6 docker import

  • 根据容器 ID 将镜像导出成一个文件
  • 实例:
docker export f299f501774c > my_ubuntu_v3.tar

1.7 docker export

  • 导入使用 docker import 命令导出的镜像。
  • 实例:导入镜像并将其重命名为runoob/ubuntu:v4
docker import  my_ubuntu_v3.tar runoob/ubuntu:v4

2. 镜像管理

2.1 docker images

  • 列出本地镜像。
  • 语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 常用参数:
-a : 列出本地所有的镜像

2.2 docker rmi

  • 删除本地一个或多少镜像。
  • 语法:
docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 常用参数:
-f :强制删除;
  • 实例:强制删除本地镜像 runoob/ubuntu:v4
docker rmi -f runoob/ubuntu:v4

2.3 docker tag

  • 标记本地镜像,将其归入某一仓库。
  • 语法:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
  • 实例:将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像
root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images   runoob/ubuntu:v3
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v3                  4e3b13c8a266        3 months ago        136.3 MB

2.4 docker build

  • 使用 Dockerfile 创建镜像
  • 语法:
docker build [OPTIONS] PATH | URL | -
  • 实例:使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .

2.5 docker history

  • 查看指定镜像的创建历史。
  • 语法:
docker history [OPTIONS] IMAGE

2.6 docker save

  • 将指定镜像保存成 tar 归档文件。
  • 语法:
docker save [OPTIONS] IMAGE [IMAGE...]
  • 常用参数:
-o :输出到的文件。
  • 实例:将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
runoob@runoob:~$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
runoob@runoob:~$ docker save runoob/ubuntu:v3 > my_ubuntu_v3.tar
  • 实例:将多个 image 打包成一个文件
docker save -o images.tar postgres:9.6 mongo:3.4

2.7 docker load

  • 导入使用 docker save 命令导出的镜像。
  • 语法:
docker load [OPTIONS]
  • 实例:
runoob@runoob:~$ docker load < my_ubuntu_v3.tar

3. 镜像仓库

3.1 docker login/logout

  • 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
  • 语法:
docker login [OPTIONS] [SERVER]
docker logout [OPTIONS] [SERVER]
  • 常用参数:
-u/--username :登陆的用户名
-p/--password :登陆的密码

3.2 docker pull

  • 从镜像仓库中拉取或者更新指定镜像
  • 语法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • 实例:从腾讯软件源拉取镜像
sudo docker pull mirrors.tencent.com/nickccnie/pytorch1.6.0_mmcv1.2.0_mmdet2.6.0_mmsegm0.8.0:1.0

3.3 docker push

  • 将本地的镜像上传到镜像仓库
  • 语法:
docker push [OPTIONS] NAME[:TAG]
  • 实例:
sudo docker push mirrors.tencent.com/nickccnie/pytorch1.6.0_mmcv1.2.0_mmdet2.6.0_mmsegm0.8.0:2.0

4. 其他常用容器操作

4.1 docker commit

  • 从容器创建一个新的镜像。
  • 语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • 实例:
runoob@runoob:~$ docker commit a404c6c174a2  mymysql:v1 
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057

4.2 docker ps

  • 列出容器
  • 语法:
-a :显示所有的容器,包括未运行的。
-l :显示最近创建的容器。

4.3 exit

  • 退出容器

5. 问题经验记录

5.1 docker (export、import、save、load)区别

  • 如果使用 import 导入 save 产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。

5.1.1 文件大小不同

  • export 导出的镜像文件体积小于 save 保存的镜像

5.1.2 是否可以对镜像重命名

  • docker import 可以为镜像指定新名称
  • docker load 不能对载入的镜像重命名

5.1.3 是否可以同时将多个镜像打包到一个文件中

  • docker export 不支持
  • docker save 支持

5.1.4 是否包含镜像历史

  • export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
  • 而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。

5.1.5 应用场景不同

  • docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
  • docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。

5.2 修改docker共享内存

python3 train.py 之后报错,显示共享内存不足,这是因为宿主机与docker之间的共享内存默认是64M ,解决办法是如下:

  • 在宿主机中执行命令:
df -h | grep shm
# 返回结果:shm 64M 0 64M 0% /dev/shm
  • 然后对共享内存进行更改:
sudo mount -o remount,size=8G /dev/shm

8G这个大小可以自己调整,你也可以设置成32G, 另外 /dev/shm 对应于你自己的 df -h | grep shm最后一列的结果,当然机器上如果有多个docker打开着,你要区分出来是哪个

6. 参考

https://www.hangge.com/blog/cache/detail_2411.htmlhttps://www.runoob.com/docker/docker-command-manual.html