目录

容器常用命令

docker image ls

无仓库名的是悬空镜像,docker image ls -f dangling=true 查看悬空镜像, docker image prune 删除悬空镜像。

该命令默认,仅仅显示顶层镜像,docker image ls -a , 可以显示中间层镜像。

过滤参数

shell

// 指定仓库名
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

显示格式

shell

docker image ls -q

docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

--filter 配合 -q 产生出指定范围的 ID 列表,然后送给另一个 docker 命令作为参数,从而针对这组实体成批的进行某种操作的做法在 Docker 命令行使用过程中非常常见。

shell

docker image rm [选项] <镜像1> [<镜像2> ...]

镜像标识可以是 长id,短id,镜像名,镜像名:标签等。

Untagged 和 Deleted,untagged 表明镜像和删除标签的关联已经被取消,可能还有其余的标签在镜像上,所有镜像没有被删除。当镜像上的所有标签都被删除后,则触发 delete 行为。

与 docker image ls -q  命令的配合

shell

// 删除所有仓库名为 redis 的镜像
docker image rm $(docker image ls -q redis)

// 删除所有在 mongo:3.2 之前的镜像
docker image rm $(docker image ls -q -f before=mongo:3.2)
  1. 基于镜像新建一个容器并启动

shell

docker run ubuntu:18.04 

// -t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。
docker run -t -i ubuntu:18.04
  • 检查本地是否存在指定的镜像,不存在就从 registry 下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止
  1. 将一个终止(exited)状态的容器重新启动

shell

//  传入容器id 即可
docker container start [options] containerID

shell

// 获取正在运行的容器
docker container ls

// 获取所有容器
docker container ls -a

shell

// 停止
docker container stop containerID
// 重启
docker container restart containerID

-d 参数运行容器时候,容器启动后会进入后台。

shell

// 方式1 , ps:如果在 stdin 中 exit,会导致容器的停止
docker attach containerID

// 方式2 , ps: exit 不会导致容器停止
docker exec [options] containerID command

shell

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • 数据卷 信息在 “Mounts” Key 下面

导出

shell

// 导入容器快照到本地文件
docker export 7691a814370e > ubuntu.tar

导入

shell

// 从容器快照导入为镜像
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 将保存镜像的完整记录,体积也要大。

shell

// 删除一个处于终止状态的容器, -f 可以删除一个运行中的容器
docker container rm [options] containerID

// 清理掉所有处于终止状态的容器
 docker container prune

数据卷是可以一个或多个容器使用的特殊目录,它绕过了 UFS , 可以提供很多特性:

  • 容器间共享和重用
  • 对数据卷的修改会立即生效
  • 对数据卷的更新,不影响镜像
  • 容器删除后,数据卷还会存在

shell

docker volume create my-vol

shell

docker volume ls

// 查看特定数据卷信息
docker volume inspect my-vol

启动一个挂载有数据卷的容器

shell

docker run -d -p --name \
# -v my-vol:/usr/share/nginx/html \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine

shell

docker volume rm my-vol

// 删除容器时一起删除
docker container rm -v containerID

// 批量删除无主的数据卷
 docker volume prune

docker system df