容器常用命令
目录
镜像相关
列出镜像
docker image ls
无仓库名的是悬空镜像,docker image ls -f dangling=true
查看悬空镜像, docker image prune
删除悬空镜像。
该命令默认,仅仅显示顶层镜像,docker image ls -a
, 可以显示中间层镜像。
过滤参数
// 指定仓库名
docker image ls ubuntu
// 指定仓库名和标签名
docker image ls ubuntu:18.04
// --filter 简写 -f 过滤
docker image ls -f since=mongo:3.2
docker image ls -f label=com.example.version=0.1
docker image ls -f dangling=true
显示格式
docker image ls -q
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
--filter
配合 -q
产生出指定范围的 ID 列表,然后送给另一个 docker
命令作为参数,从而针对这组实体成批的进行某种操作的做法在 Docker 命令行使用过程中非常常见。
删除镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
镜像标识可以是 长id,短id,镜像名,镜像名:标签等。
Untagged 和 Deleted,untagged 表明镜像和删除标签的关联已经被取消,可能还有其余的标签在镜像上,所有镜像没有被删除。当镜像上的所有标签都被删除后,则触发 delete 行为。
与 docker image ls -q 命令的配合
// 删除所有仓库名为 redis 的镜像
docker image rm $(docker image ls -q redis)
// 删除所有在 mongo:3.2 之前的镜像
docker image rm $(docker image ls -q -f before=mongo:3.2)
容器相关
启动
- 基于镜像新建一个容器并启动
docker run ubuntu:18.04
// -t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。
docker run -t -i ubuntu:18.04
- 检查本地是否存在指定的镜像,不存在就从 registry 下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
- 将一个终止(exited)状态的容器重新启动
// 传入容器id 即可
docker container start [options] containerID
容器列表
// 获取正在运行的容器
docker container ls
// 获取所有容器
docker container ls -a
停止与重启
// 停止
docker container stop containerID
// 重启
docker container restart containerID
进入容器
-d
参数运行容器时候,容器启动后会进入后台。
// 方式1 , ps:如果在 stdin 中 exit,会导致容器的停止
docker attach containerID
// 方式2 , ps: exit 不会导致容器停止
docker exec [options] containerID command
查看容器信息
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
数据卷
信息在 “Mounts” Key 下面
导出和导入
导出
// 导入容器快照到本地文件
docker export 7691a814370e > ubuntu.tar
导入
// 从容器快照导入为镜像
cat ubuntu.tar | docker import - test/ubuntu:v1.0
docker image ls // 会显示 test/ubuntu:v1.0 镜像
// 通过 url 导入
docker import http://example.com/exampleimage.tgz example/imagerepo
docker load
也可以导入镜像存储文件到本地镜像库,区别在于:
docker import
将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),可以重新指定标签等元数据信息。docker load
将保存镜像的完整记录,体积也要大。
删除
// 删除一个处于终止状态的容器, -f 可以删除一个运行中的容器
docker container rm [options] containerID
// 清理掉所有处于终止状态的容器
docker container prune
数据管理
数据卷
数据卷是可以一个或多个容器使用的特殊目录,它绕过了 UFS , 可以提供很多特性:
- 容器间共享和重用
- 对数据卷的修改会立即生效
- 对数据卷的更新,不影响镜像
- 容器删除后,数据卷还会存在
创建数据卷
docker volume create my-vol
查看所有数据卷
docker volume ls
// 查看特定数据卷信息
docker volume inspect my-vol
启动一个挂载有数据卷的容器
docker run -d -p --name \
# -v my-vol:/usr/share/nginx/html \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine
删除数据卷
docker volume rm my-vol
// 删除容器时一起删除
docker container rm -v containerID
// 批量删除无主的数据卷
docker volume prune
挂载主机目录
其他
查看镜像容器和数据卷所占体积
docker system df