基础概念

Docker 引擎主要的组件构成为:

  • Docker client
  • Docker daemon
  • containerd
  • runc

它们的关系如下:

Docker daemon 实现了 Docker 引擎的 API,默认情况下,Docker client 与 Docker daemon 之间的通信有本地的 IPC/UNIX socket 完成(/var/run/docker.sock)。

Cheat Sheet

Image

列出本地镜像

$ docker image ls # 列出本地镜像
$ docker images # 两条命令等效

可以使用--filter来过滤docker image ls返回的镜像列表:

  • dangling:true/false,是否为悬虚镜像。
  • before:<image name or id>,返回在其之前被创建的全部镜像
  • since:<image name or id>,返回在其之后被创建的全部镜像
  • label:标注(label)的名称或值。标注在Dockerfile通过 LABEL 指定,但是docker image ls不显示。
  • reference:用正则表达式对镜像名称和标签过滤

Example:

$ docker image ls --filter dangling=true
$ docker image ls -f before=alpine # -f 是 --filter 的简写
$ docker image ls -f reference="*:latest"

使用--format可以对输出内容镜像格式化输出:

$ docker image ls --format "{{.Size}}" # 只输出 SIZE

如果只是想要IMAGE ID的话,可以直接用-q,这个和删除命令结合可以快速删除所有镜像:

$ docker image ls -q # 只输出 IMAGE ID
$ docker image rm $(docker image ls -q) # 删除所有镜像

拉取镜像

$ docker pull ubuntu:latest # 拉取镜像
$ docker image pull <repository>:<tag> # 加上 -a 表示拉取所有标签
  • 如果没有指定标签,则默认为 latest
  • latest 不保证这是仓库中最新的镜像。
  • 从非官方仓库中拉取镜像需要在仓库名称加上 Docker Hub的用户名或组织名,如docker image pull wuxiaobai24/demo:v2
  • 如果希望在第三方镜像仓库服务获取镜像,则需要在仓库名称前面加上第三方镜像仓库服务的 DNS 名称,如docker image pull grc.io/wuxiaobai24/demo:v2

我们可以用docker search来对 Docker Hug 进行搜索:

$ docker search alpine
  • 搜索时可以使用过滤器:
    • is-official:true/false,是否为官方镜像
    • is-automated:true/false,是否为自动创建的镜像
  • 搜索结果默认返回 25 个结果,可以用--limit来指定个数

删除镜像

$ docker image rm 0267 # 通过镜像ID来删除 docker 镜像
$ docker image rm $(docker image ls -q) # 删除所有镜像
$ docker image rm -f 0267 # -f mean --force
  • 一个Docker镜像是由多个镜像层组成的,如果一个在删除某个镜像时,其中某个镜像层还被本地某个镜像引用的话,那么该镜像层不会被删除。
  • 如果某个镜像存在正在运行的容器的话,删除操作不会被允许
  • 可以用docker image prune来移除所有悬挂镜像。
    • 悬虚镜像:没有标签的镜像,<none>:<none>。通常是因为构建了一个新的镜像并为该镜像打了一个已经存在的标签。这时候旧镜像就会变成悬虚镜像。

构造镜像

# Dockerfile 在当前目录(注意最后面那个`.`), -t 表示设置镜像
$ docker image build -t web:latest .
$ docker image tag web:1.0 wuxiaobai24/web:latest # 给镜像重新打标签
$ docker image build --squash # 将多个镜像层合并成一层

Container

启动容器

$ docker container run <image> <app> # 基础格式
$ docker container run -it <image> <app> # -it 表示启动一个交互性程序,并将当前终端连接到容器的Shell终端上
$ docker container run -d <image> <app> # -d 表示以后台的方式启动容器
$ docker container run -d --name <container-name> <image> <app> # --name 给容器命名
$ docker container run -d -p <host-port>:<container-port> <image> # -p 配置端口转发,不指定 <app>的话会运行默认应用
$ docker container run -it 67fa /bin/bash # -it 表示以交互模式启动,并attach到tty上

在容器中可以用 Ctrl-PQ 来退出容器(同时保持容器继续运行)

在退出容器后可以用下面的命令来attach到已运行的容器:

$ docker container exec -it <container name or id> bash # 连接到在运行中的容器

列出镜像

$ docker container ls # 查看系统内处于运行状态的容器
$ docker ps # 同上
$ docker container ls --all # 查看系统内所有容器,包已经stop的。
$ docker container ls -a # 同上
$ docker container ls -q # 显示运行中容器的 id

停止/删除容器


$ docker container stop <container name or id> # 停止容器
$ docker container start <container id or name> # 再次启动该容器
$ docker container rm <container name or id> # 删除容器
$ docker container rm $(docker container ls -aq) -f # 快速删除所有容器

Others

查看 Docker 相关信息:

$ docker system info

将用户加入到本地 Docker 组中

这样可以将sudo docker ...省略成docker ...

$ usermod -aG docker <user>

查看 Image 信息

$ docker image inspect <image> # 显示关于 Image 的信息,可以用来看默认运行的应用

作者:wuxiaobai24

发表日期:7/18/2020

本文首发地址:Docker Quick Start

版权声明:CC BY NC SA 4.0