docker基础用法

docker基础用法


Docker使用了C/S体系架构,Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。

G15hGo.png

docker镜像与镜像仓库

为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。

G1BGgu.jpg

镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

docker对象

When you use docker, you are creating and using images, containers, networks, volumes, pluginns, and other objects.

  • IMAGES
    • An image is a read-only template with instructions for creating a docker container.
    • Often, an image is based on another image, with some additional customization.
    • You might create your own images or you might only use those created by others and published in a registry.
  • CONTAINERS
    • A conntainer is a runnable instance of an image.
    • You can create, run, stop, move, or delete a container using the docker API or CLI.
    • You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state.

当您使用 docker 时,您正在创建和使用镜像、容器、网络、卷、插件和其他对象。

  • 镜像
    • 镜像是一个只读模板,其中包含创建 docker 容器的说明。
    • 通常,一个镜像基于另一个镜像,并带有一些额外的自定义。
    • 您可以创建自己的镜像,也可以使用其他人创建并在仓库中发布的镜像。
  • 容器
    • 容器是镜像的可运行实例。
    • 您可以使用 docker API 或 CLI 创建、运行、停止、移动或删除容器。
    • 您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新镜像。

安装及使用docker

docker安装

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@localhost yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@localhost yum.repos.d]# yum -y install docker-ce

docker加速

docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。

docker的加速有多种方式:

  • docker cn
  • 中国科技大学加速器
  • 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)

这里使用阿里云的加速器进行加速

登录阿里云账号后点击控制台

G15yjC.png

点击左上角按钮

G1BBxQ.png

找到容器镜像服务

G15u0S.png

点击镜像工具——>镜像加速器,找到适合自己的系统,根据下面进行配置

G1BC9t.png

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://4nrel0nr.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker常用操作

命令功能
docker searchSearch the Docker Hub for images
docker pullPull an image or a repository from a registry
docker imagesList images
docker createCreate a new conntainer
docker startStart one or more stopped containers
docker runRun a command in a new container
docker attachAttach to a runninng container
docker psList containers
docker logsFetch the logs of a container
docker restartRestart a container
docker stopStop one or more running containers
docker killKill one or more running containers
docker rmRemove onne or more containers
docker execRun a command in a running container
docker infoDisplay system-wide information
docker inspectReturn low-level information on Docker objects

docker search命令

docker search:从docker hub查找镜像

语法

docker search [OPTIONS] TERM

OPTIONS说明:

  • –automated:只列出 automated build类型的镜像;
  • –no-trunc:显示完整的镜像描述;
  • -f <过滤条件>:列出收藏数不小于指定值的镜像。

从docker hub中查找所有镜像名包含nginx并且收藏数大于1000的镜像

[root@localhost ~]# docker search -f stars=1000 nginx
NAME                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                 Official build of Nginx.                        15893     [OK]       
jwilder/nginx-proxy   Automated Nginx reverse proxy for docker con…   2098                 [OK]

参数说明:

NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。

docker pull命令

docker pull:从镜像仓库中拉取或者更新指定镜像

语法

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

  • -a:拉取所有 tagged 镜像
  • –disable-content-trust:忽略镜像的校验,默认开启

从docker hub下载nginx的最新版镜像

[root@localhost ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
eff15d958d66: Already exists 
ba1caf8ba86c: Pull complete 
ab86dc02235d: Pull complete 
0d58b11d2867: Pull complete 
e88da7cb925c: Pull complete 
Digest: sha256:1d71eef54c08435c0be99877c408637f03112dc9f929fba3cccdd15896099b02
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    ad17c88403e2   12 days ago   143MB

docker images命令

docker images:列出本地镜像

语法

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • –digests:显示镜像的摘要信息;
  • -f:显示满足条件的镜像;
  • –format:指定返回值的模板文件;
  • –no-trunc:显示完整的镜像信息;
  • -q:只显示镜像ID。

查看本地镜像列表

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    ad17c88403e2   12 days ago   143MB
nginx        latest    ea335eea17ab   13 days ago   141MB

docker create命令

docker create:创建一个新容器但不启动它

语法

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –name=“nginx-lb”: 为容器指定一个名称;
  • –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=“ritchie”: 设置环境变量;
  • –env-file=[]: 从指定文件读入环境变量;
  • –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
  • -m:设置容器使用内存最大值;
  • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • –link=[]: 添加链接到另一个容器;
  • –expose=[]: 开放一个端口或一组端口;
  • –volume , -v: 绑定一个卷

使用docker镜像nginx:latest创建一个容器,并将容器命名为web

[root@localhost ~]# docker create --name web nginx:latest 
3f19feaf30938f7f7a87921e774b7f2ee483f8bd7f543712e30d1898d60aa775

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   12 seconds ago   Created             web

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...]

停止运行中的容器web

[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS     NAMES
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   4 minutes ago   Up 1 second   80/tcp    web
[root@localhost ~]# docker stop web 
web

启动被停止的容器web

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker start web 
web
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   5 minutes ago   Up 2 seconds   80/tcp    web

重启容器web

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS              PORTS     NAMES
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   6 minutes ago   Up About a minute   80/tcp    web
[root@localhost ~]# docker restart web 
web
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS     NAMES
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   6 minutes ago   Up 1 second   80/tcp    web

docker run命令

docker run:创建一个新的容器并运行一个命令

语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –name=“nginx-lb”: 为容器指定一个名称;
  • –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=“ritchie”: 设置环境变量;
  • –env-file=[]: 从指定文件读入环境变量;
  • –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
  • -m:设置容器使用内存最大值;
  • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • –link=[]: 添加链接到另一个容器;
  • –expose=[]: 开放一个端口或一组端口;
  • –volume , -v: 绑定一个卷

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机的80端口

[root@localhost ~]# ss -antl
State      Recv-Q      Send-Q           Local Address:Port           Peer Address:Port     Process     
LISTEN     0           128                    0.0.0.0:22                  0.0.0.0:*                    
LISTEN     0           128                       [::]:22                     [::]:*          

[root@localhost ~]# docker run -p 80:80 -d nginx:latest
9cf5c11a91bc406f746aaafcd153b8231f6d7403d7776f0d2b7251b1093e8e48

[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
9cf5c11a91bc   nginx:latest   "/docker-entrypoint.…"   27 seconds ago   Up 26 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   amazing_golick
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   13 minutes ago   Up 6 minutes    80/tcp                              web

[root@localhost ~]# ss -antl
State      Recv-Q      Send-Q           Local Address:Port           Peer Address:Port     Process     
LISTEN     0           128                    0.0.0.0:80                  0.0.0.0:*                    
LISTEN     0           128                    0.0.0.0:22                  0.0.0.0:*                    
LISTEN     0           128                       [::]:80                     [::]:*                    
LISTEN     0           128                       [::]:22                     [::]:*       

docker attach命令

docker attach:连接到正在运行中的容器

语法

docker attach [OPTIONS] CONTAINER

要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕(与screen命令的attach类似)。

官方文档中说attach后可以通过CTRL-C来detach,但实际上经过我的测试,如果container当前在运行bash,CTRL-C自然是当前行的输入,没有退出;如果container当前正在前台运行进程,如输出nginx的access.log日志,CTRL-C不仅会导致退出容器,而且还stop了。这不是我们想要的,detach的意思按理应该是脱离容器终端,但容器依然运行。好在attach是可以带上–sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器。

docker ps命令

docker ps:列出容器

语法

docker ps [OPTIONS]

OPTIONS说明:

  • -a:显示所有的容器,包括未运行的。
  • -f:根据条件过滤显示的内容。
  • –format:指定返回值的模板文件。
  • -l:显示最近创建的容器。
  • -n:列出最近创建的n个容器。
  • –no-trunc:不截断输出。
  • -q:静默模式,只显示容器编号。
  • -s:显示总的文件大小。

列出所有正在运行的容器信息

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
9cf5c11a91bc   nginx:latest   "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp   amazing_golick
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   17 minutes ago   Up 11 minutes   80/tcp                              web

输出详情介绍:

CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。

容器状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

列出所有创建的容器ID

[root@localhost ~]# docker ps -a -q
9cf5c11a91bc
3f19feaf3093

docker logs命令

docker logs:获取容器的日志

语法

docker logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f : 跟踪日志输出
  • –since:显示某个开始时间的所有日志
  • -t : 显示时间戳
  • –tail:仅列出最新N条容器日志

跟踪查看容器web的日志输出

[root@localhost ~]# docker logs -f web
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/12/01 07:55:32 [notice] 1#1: using the "epoll" event method
2021/12/01 07:55:32 [notice] 1#1: nginx/1.21.4
2021/12/01 07:55:32 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2021/12/01 07:55:32 [notice] 1#1: OS: Linux 4.18.0-257.el8.x86_64
......

docker kill命令

docker kill:杀掉一个运行中的容器

语法

docker kill [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -s:向容器发送一个信号

杀掉运行中的容器web

[root@localhost ~]# docker kill -s kill web
web
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
9cf5c11a91bc   nginx:latest   "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   amazing_golick

docker rm命令

docker rm:删除一个或多个容器

语法

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -f:通过 SIGKILL 信号强制删除一个运行中的容器。
  • -l:移除容器间的网络连接,而非容器本身。
  • -v:删除与容器关联的卷。

强制删除容器amazing_golick

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
9cf5c11a91bc   nginx:latest   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   amazing_golick
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   26 minutes ago   Exited (137) 2 minutes ago             web
[root@localhost ~]# docker rm -f amazing_golick
amazing_golick
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                       PORTS     NAMES
3f19feaf3093   nginx:latest   "/docker-entrypoint.…"   26 minutes ago   Exited (137) 2 minutes ago             web

docker exec命令

docker exec:在运行的容器中执行命令

语法

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

  • -d:分离模式: 在后台运行
  • -i:即使没有附加也保持STDIN 打开
  • -t:分配一个伪终端

在容器web中开启一个交互模式的终端

[root@localhost ~]# docker exec -it web /bin/bash
root@3f19feaf3093:/# ls
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr

docker info命令

docker info:显示docker系统信息,包括镜像和容器数量

语法

docker info [OPTIONS]

查看docker系统信息

[root@localhost ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)
  scan: Docker Scan (Docker Inc., v0.9.0)

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 2
 Server Version: 20.10.11
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc version: v1.0.2-0-g52b36a2
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-257.el8.x86_64
 Operating System: CentOS Stream 8
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.622GiB
 Name: localhost.localdomain
 ID: DCGU:VWQD:HHG7:BJAE:DRR5:TCVW:PKKH:ZJK4:6NII:MPRC:ZCUL:K66C
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://4nrel0nr.mirror.aliyuncs.com/
 Live Restore Enabled: false

docker inspect命令

docker inspect:获取容器/镜像的元数据

语法

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

  • -f:指定返回值的模板文件。
  • -s:显示总的文件大小。
  • –type:为指定类型返回JSON。

获取镜像nginx:latest的元信息

[root@localhost ~]# docker inspect nginx:latest
[
    {
        "Id": "sha256:ea335eea17ab984571cd4a3bcf90a0413773b559c75ef4cda07d0ce952b00291",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-11-17T10:38:14.652464384Z",
        "Container": "8a038ff17987cf87d4b7d7e2c80cb83bd2474d66e2dd0719e2b4f7de2ad6d853",
        "ContainerConfig": {
            "Hostname": "8a038ff17987",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.4",
                "NJS_VERSION=0.7.0",
                "PKG_RELEASE=1~bullseye"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "Image": "sha256:2fb4060b053a39040c51ff7eadd30325de2c76650fc50aa42839070e16e8bdcb",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "DockerVersion": "20.10.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.4",
                "NJS_VERSION=0.7.0",
                "PKG_RELEASE=1~bullseye"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "sha256:2fb4060b053a39040c51ff7eadd30325de2c76650fc50aa42839070e16e8bdcb",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 141490847,
        "VirtualSize": 141490847,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/9490eafebc539d4b4589552e158d45b2cd04548dbb2cdad39c3fec06463130cc/diff:/var/lib/docker/overlay2/85cda0a4c04320f334498a9362a08ccb9bcf4f7e0dc02a9315e07179433dffda/diff:/var/lib/docker/overlay2/bc62167fdc3835636bbc9ec60015cd0bc0dc11d5fa08159c49cbef2f1e593e87/diff:/var/lib/docker/overlay2/1fec61f8ea6d992b44f5dc26311f50d13c653363dd782c2d6677b0e0a7eeec85/diff:/var/lib/docker/overlay2/082874ad1b85c5ee26795cacb75d9a24048871579e07df9690c861b96807a61d/diff",
                "MergedDir": "/var/lib/docker/overlay2/d8935147eb3459bdd91c91511abb4d14677c642b3b01673de828fdf2e894c281/merged",
                "UpperDir": "/var/lib/docker/overlay2/d8935147eb3459bdd91c91511abb4d14677c642b3b01673de828fdf2e894c281/diff",
                "WorkDir": "/var/lib/docker/overlay2/d8935147eb3459bdd91c91511abb4d14677c642b3b01673de828fdf2e894c281/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:e1bbcf243d0e7387fbfe5116a485426f90d3ddeb0b1738dca4e3502b6743b325",
                "sha256:37380c5830feb5d6829188be41a4ea0654eb5c4632f03ef093ecc182acf40e8a",
                "sha256:ff4c727794302b5a0ee4dadfaac8d1233950ce9a07d76eb3b498efa70b7517e4",
                "sha256:49eeddd2150fbd14433ec1f01dbf6b23ea6cf581a50635554826ad93ce040b68",
                "sha256:1e8ad06c81b6baf629988756d90fd27c14285da4d9bf57179570febddc492087",
                "sha256:8525cde30b227bb5b03deb41bda41deb85d740b834be61a69ead59d840f07c13"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

docker event state

G1BZav.jpg