文章目录
- 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