如何管理Docker容器?

时间:2020-02-23 14:40:37  来源:igfitidea点击:

如何运行不同的Docker容器。

在向我们展示一些管理Docker容器的命令行示例之前,让我简要介绍一下重要术语

  • Docker守护程序:管理Docker容器和镜像的守护程序。
    我们简称为Docker。

  • Docker引擎:这是Docker基础架构和工作流程

  • Docker主机或者Docker节点:这是运行Docker引擎的机器。

  • Docker 镜像:这是我们可以作为容器运行的内容或者包。
    它提供了基本的操作系统和应用程序,并且仅包含只读层,不包含读写层。

  • Container:镜像的实例化版本。
    这是我们在图像顶部运行的实例,它包含所有只读层以及添加在顶部的读写层。

注意:因此,镜像被实例化,并且在Docker上运行时称为容器。
图像只是不可变的内容,实例化了容器,在顶部添加了一个可变层,它可以具有停止,启动和运行等状态。

检查Docker的状态

在开始配置之前,重要的是要确保我们的docker服务正在运行

[root@node1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-12-20 20:20:49 IST; 16h ago
     Docs: https://docs.docker.com
 Main PID: 1153 (dockerd)
    Tasks: 32
   Memory: 147.3M
   CGroup: /system.slice/docker.service
           ├─1153 /usr/bin/dockerd -H unix://
           ├─1289 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
           └─4299 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc71...
Dec 21 12:29:12 node1.example.com dockerd[1153]: time="2016-12-21T12:29:12.179448931+05:30" level=info msg="shim reaped" id=9c79938cb73755e96de571bcd3a513a6262e1005f5e2679...25b48357aa2
Dec 21 12:29:12 node1.example.com dockerd[1153]: time="2016-12-21T12:29:12.189968766+05:30" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/task...TaskDelete"
Dec 21 12:29:22 node1.example.com dockerd[1153]: time="2016-12-21T12:29:22.762710751+05:30" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/e2...se pid=3843
Dec 21 12:29:23 node1.example.com dockerd[1153]: time="2016-12-21T12:29:23.180260570+05:30" level=info msg="shim reaped" id=e28f5a6fd1cbf8c04cefd94fdf8cdf8cdc40dd7723f83e8...4ee43925900
Dec 21 12:29:23 node1.example.com dockerd[1153]: time="2016-12-21T12:29:23.190553007+05:30" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/task...TaskDelete"
Dec 21 12:29:41 node1.example.com dockerd[1153]: time="2016-12-21T12:29:41.052677343+05:30" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/9e...se pid=3957
Dec 21 12:29:41 node1.example.com dockerd[1153]: time="2016-12-21T12:29:41.383996326+05:30" level=info msg="shim reaped" id=9edcb088fe31716fc727b7291e7972f4cb030ff51e29db8...cdaa53bd807
Dec 21 12:29:41 node1.example.com dockerd[1153]: time="2016-12-21T12:29:41.394072301+05:30" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/task...TaskDelete"
Dec 21 12:31:31 node1.example.com dockerd[1153]: time="2016-12-21T12:31:31.571196111+05:30" level=error msg="Error setting up exec command in container 9edcb088fe31716fc72...ot running"
Dec 21 12:33:12 node1.example.com dockerd[1153]: time="2016-12-21T12:33:12.263039550+05:30" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/13...se pid=4299
Hint: Some lines were ellipsized, use -l to show in full.

使用普通用户管理Docker

一旦安装了docker,我们的系统上就会有一个组" docker"可用。
属于docker组的任何用户都将被允许执行docker相关命令

[root@node1 ~]# grep docker /etc/group
docker:x:980:hynman

因此,让我们将"hynman"添加到Docker组中

[root@node1 ~]# usermod -aG docker hynman

下一步将用户切换为'hynman'

[root@node1 ~]# su - hynman
Last login: Wed Dec 19 15:41:51 IST 2016 from 10.0.2.2 on pts/1

获取有关可用Docker容器的信息

Docker信息提供了有关我们正在运行的当前Docker环境的信息。
因此,我们没有存储在该计算机上的容器和镜像,我们可以看到刚刚配置的"存储驱动程序",以及所有不同的存储容量,例如所使用的数据空间,并且可以找到有关该磁盘的更多信息。
整个docker环境。
docker info命令是一个有用的命令,用于验证docker当前正在执行的操作到底是什么

[hynman@node1 ~]$docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.0
Storage Driver: devicemapper
 Pool Name: vg_docker-thinpool
 Pool Blocksize: 524.3kB
 Base Device Size: 10.74GB
 Backing Filesystem: xfs
 Udev Sync Supported: true
 Data Space Used: 20.45MB
 Data Space Total: 8.154GB
 Data Space Available: 8.133GB
 Metadata Space Used: 8.434MB
 Metadata Space Total: 83.89MB
 Metadata Space Available: 75.45MB
 Thin Pool Minimum Free Space: 815.3MB
 Deferred Removal Enabled: true
 Deferred Deletion Enabled: true
 Deferred Deleted Device Count: 0
 Library Version: 1.02.149-RHEL7 (2016-07-20)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-957.1.3.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.701GiB
Name: node1.example.com
ID: 2JHJ:HICZ:HHVG:NUOA:FCAK:EFJI:RDAF:LFPH:XZUA:WFER:DI7I:LOEI
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

Docker Hello World

现在让我们从第一个命令开始,即docker run hello-world。
Docker Hub提供了一个名为hello world的docker镜像,允许我们运行hello world。

由于docker镜像在我们的系统上不可用,因此它正在从存储库中提取(下载)该镜像,这将需要一些时间。

[hynman@node1 ~]$docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

我们可以在屏幕上看到此图片的摘要。

  • 所以Docker client连接了Docker daemon

  • Docker daemon从Docker Hub中拉开了世界,

  • 和Docker daemon从该镜像创建了一个新容器,该容器运行可执行文件,该可执行文件生成我们当前正在读取的输出。

"因此,基本上,它下载了一个图像,启动了容器,运行了命令,然后退出了。
"

要获得当前正在运行的Docker容器的概述,请使用'docker ps'

[hynman@node1 ~]$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

如果我们想获得所有正在运行但已退出的Docker容器的概述,请使用'docker ps -a'

[hynman@node1 ~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ea540759dd3c        hello-world         "/hello"            31 seconds ago      Exited (0) 29 seconds ago               eloquent_chandrasekhar

现在这也是有用的信息,因为我们可以看到用来运行命令" hello"的hello世界图像。
它是在31秒前创建的,而在29秒前退出的,其逻辑名称是eloquent_chandrasekhar。
这些逻辑名称是自动生成的,我们可以使用它们以更简单的方式来管理容器。
我的意思是,令人眼花gate乱的盖茨比该容器ID的键入要容易一些。

下载ubuntu容器镜像

要尝试更具野心的东西,我们可以使用" bash"运行" Ubuntu容器"。
如果本地计算机上尚不存在Ubuntu镜像,则此命令将下载Ubuntu镜像,它将启动"交互"终端模式,在该模式下执行bash命令,结果是我们突然进入了bash shell。

[hynman@node1 ~]$docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
32802c0cfa4d: Pull complete
da1315cffa03: Pull complete
fa83472a3562: Pull complete
f85999a86bef: Pull complete
Digest: sha256:6d0e0c26489e33f5a6f0020edface2727db9489744ecc9b4f50c7fa671f23c49
Status: Downloaded newer image for ubuntu:latest
root@3cf05b3c26b7:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.3  0.0  18496  2004 pts/0    Ss   05:53   0:00 bash
root        10  0.0  0.0  34388  1464 pts/0    R+   05:53   0:00 ps aux

另外,其他命令的确与该容器中的内容有关。
我们可以看到此容器正在使用的精简配置卷,大小为10 GB,使用的大小为107 MB。
它是精简配置的,因此实际上并没有使用计算机上的任何存储。

root@3cf05b3c26b7:/# df -h
Filesystem                                                                                        Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:0-529717-a4cf6f4fbccc8c390d4558e357ecb99574fc8bcebaf6b0df498a6a1811ada898   10G  107M  9.9G   2% /
tmpfs                                                                                              64M     0   64M   0% /dev
tmpfs                                                                                             1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root                                                                            16G  8.2G  6.5G  56% /etc/hosts
shm                                                                                                64M     0   64M   0% /dev/shm
tmpfs                                                                                             1.9G     0  1.9G   0% /proc/acpi
tmpfs                                                                                             1.9G     0  1.9G   0% /proc/scsi
tmpfs                                                                                             1.9G     0  1.9G   0% /sys/firmware

如何从容器中退出?

要从容器中退出,请先使用control + p,再使用control + q,这将使我们回到正常的shell环境。

root@3cf05b3c26b7:/# [hynman@node1 ~]$

现在,如果我们使用ps检查任何正在运行的容器,我们将看到'ubuntu`。

[hynman@node1 ~]$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3cf05b3c26b7        ubuntu              "bash"              2 minutes ago       Up 2 minutes                            suspicious_lamport

如何停止容器?

现在要停止容器,我们只需运行" docker stop",然后运行容器的名称,对我们来说就是" suspicious_lamport"。

[hynman@node1 ~]$docker stop suspicious_lamport
suspicious_lamport

接下来,再次检查状态,什么都不显示。
因此,目前没有正在运行的容器

[hynman@node1 ~]$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

现在让我们获得在系统上运行的容器的历史记录。
它显示" ubuntu"是在" 4分钟前"创建的,但在" 33秒前"退出了。

[hynman@node1 ~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
3cf05b3c26b7        ubuntu              "bash"              4 minutes ago       Exited (0) 33 seconds ago                       suspicious_lamport
ea540759dd3c        hello-world         "/hello"            7 minutes ago       Exited (0) 7 minutes ago                        eloquent_chandrasekhar
[hynman@node1 ~]$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3cf05b3c26b7        ubuntu              "bash"              9 seconds ago       Up 9 seconds                            suspicious_lamport

如何连接到Docker容器?

一旦启动了非交互模式的docker容器,如果要其中运行某些内容,则可以使用docker exec。

[hynman@node1 ~]$docker exec -it suspicious_lamport bash
root@3cf05b3c26b7:/# read escape sequence

因此,docker exec是一个有用的命令,可让我们进入容器并在容器内执行特定任务。
现在要退出容器,请先使用" control + p",再使用" control + q",这将使我们回到正常的shell环境。

如何删除Docker容器?

如果要从系统中删除Docker容器以节省一些磁盘空间,也可以这样做。
我们应该使用docker rm,后跟容器的名称,在本例中为suspicious_lamport。

[hynman@node1 ~]$docker rm suspicious_lamport
suspicious_lamport

这已删除了容器。

[hynman@node1 ~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
ea540759dd3c        hello-world         "/hello"            7 minutes ago       Exited (0) 7 minutes ago                       eloquent_chandrasekhar

如果我们还想删除镜像,那也是可能的,我们将使用docker rmi来删除镜像。
因此docker rmi ubuntu将删除Ubuntu镜像中可用的所有不同层

[hynman@node1 ~]$docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:6d0e0c26489e33f5a6f0020edface2727db9489744ecc9b4f50c7fa671f23c49
Deleted: sha256:93fd78260bd1495afb484371928661f63e64be306b7ac48e2d13ce9422dfee26
Deleted: sha256:1c8cd755b52d6656df927bc8716ee0905853fada7ca200e4e6954bd010e792bb
Deleted: sha256:9203aabb0b583c3cf927d2caf6ba5b11124b0a23f8d19afadb7b071049c3cf26
Deleted: sha256:32f84095aed5a2e947b12a3813f019fc69f159cb5c7eae5dad69b2d98ffbeca4
Deleted: sha256:bc7f4b25d0ae3524466891c41cefc7c6833c533e00ba80f8063c68da9a8b65fe

如何查询Docker Hub?

现在让我们进一步查询Docker Hub
这使我们可以查找可用的不同CentOS镜像。

[hynman@node1 ~]$docker search CentOS
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5062                [OK]
ansible/centos7-ansible            Ansible on Centos7                              119                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64/CentOS-7 7.5.1804 x86…   102                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   73                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              48                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   44
tutum/centos                       Simple CentOS docker image with SSH access      43
gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glust…   38                                      [OK]
openshift/base-centos7             A Centos7 derived base image for Source-To-I…   37
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   35
centos/python-35-centos7           Platform for building and running Python 3.5…   32
kinogmt/centos-ssh                 CentOS with SSH                                 25                                      [OK]
openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use w…   19
centos/php-56-centos7              Platform for building and running PHP 5.6 ap…   17
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   9
openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for use …   6
openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x ima…   4
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
pivotaldata/centos                 Base centos, freshened up a little with a Do…   2
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   2
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   1
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
smartentry/centos                  centos with smartentry                          0                                       [OK]
pivotaldata/centos7-build          CentosOS 7 image for GPDB compilation           0
pivotaldata/centos7-test           CentosOS 7 image for GPDB testing               0

其中我们可以看到名称是CentOS,描述是CentOS的正式版本。

如果说它是CentOS的正式版本,通常是由软件提供者创建的。
开始表示升值水平,它有5,062个开始,这意味着这是一个非常可靠的图像。
我们还可以看到其他图像,例如该图像,这些图像从一开始就没有被欣赏,这意味着到目前为止,还没有人认可它。
这没有任何意义,仅表示这不是常用的容器镜像。
因此,如果我们使用可靠的东西,那可能就是我们想要使用的东西。
正式表明它是正式版本。

同样,如果我们要查找特定的操作系统或者搜索解决方案(例如docker search mariadb),则可以看到正在显示很多mariadb结果。
现在让我们下载mariadb的不同图像层,并在该系统上运行Docker容器。

[root@node1 ~]# docker run mariadb
Unable to find image 'mariadb:latest' locally
latest: Pulling from library/mariadb
32802c0cfa4d: Already exists
da1315cffa03: Already exists
fa83472a3562: Already exists
f85999a86bef: Already exists
a2434d5c8419: Already exists
181debc3d23d: Already exists
7b5b2b6de4ee: Already exists
6f830a8cb936: Already exists
c6becfb25371: Already exists
a57998e3e98d: Already exists
26444682043c: Already exists
9bbb07a72de5: Pull complete
84b75eddf6b1: Pull complete
9f45ae7e5c8d: Pull complete
Digest: sha256:12e32f8d1e8958cd076660bc22d19aa74f2da63f286e100fb58d41b740c57006
Status: Downloaded newer image for mariadb:latest
error: database is uninitialized and password option is not specified
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

现在我们可以看到该容器在抱怨数据库,未指定此未初始化的被动选项,因此该容器显然需要更多信息才能完成其工作。

其中我们可以看到我们的mariadb容器在17分钟前退出了。

[hynman@node1 ~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
4e67a25166ff        mariadb             "docker-entrypoint.s…"   17 minutes ago      Exited (1) 17 minutes ago                          angry_poitras
ea540759dd3c        hello-world         "/hello"                 About an hour ago   Exited (0) About an hour ago                       eloquent_chandrasekhar

如何查看Docker日志?

我还想讨论有关管理容器的另一件事,那就是调试,找出容器中正在发生的事情。
Docker日志可能很有用。
我们可以在容器上使用以下命令从标准输出中获取信息,并在容器的控制台上获取标准错误,前提是已生成任何此类信息

[hynman@node1 ~]$docker logs suspicious_lamport

这里suspicious_lamport是我们的ubuntu容器。
现在,由于没有错误,因此输出为空白。

让我们检查一下mariadb容器的日志

[hynman@node1 ~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
3cf05b3c26b7        ubuntu              "bash"                   2 minutes ago       Up 2 minutes                                       suspicious_lamport
4e67a25166ff        mariadb             "docker-entrypoint.s…"   37 minutes ago      Exited (1) 37 minutes ago                          angry_poitras
ea540759dd3c        hello-world         "/hello"                 About an hour ago   Exited (0) About an hour ago                       eloquent_chandrasekhar

现在,当我们看到运行" mariadb"容器时观察到的错误消息

[hynman@node1 ~]$docker logs angry_poitras
error: database is uninitialized and password option is not specified
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

获取有关容器的更多信息。
这是创建容器时已使用的所有信息。

[hynman@node1 ~]$docker inspect suspicious_lamport
[
    {
        "Id": "3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2",
        "Created": "2016-12-21T07:03:12.007684767Z",
        "Path": "bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 4318,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2016-12-21T07:03:12.548723701Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:93fd78260bd1495afb484371928661f63e64be306b7ac48e2d13ce9422dfee26",
        "ResolvConfPath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/hostname",
        "HostsPath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/hosts",
        "LogPath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2-json.log",
        "Name": "/suspicious_lamport",
        "RestartCount": 0,
        "Driver": "devicemapper",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": [
            "cb6e6974f1513f7ea509a1f657838741b129a167771779c078119dbbc79a6129"
        ],
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/asound",
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "DeviceId": "36",
                "DeviceName": "docker-253:0-529717-1443554881a9ad438000d94d8b883ca60ed5a75ebcdd9e9a1f8ed40b2840b03b",
                "DeviceSize": "10737418240"
            },
            "Name": "devicemapper"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "3cf05b3c26b7",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "bash"
            ],
            "Image": "ubuntu",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "e30994015e7aca47e373bc0a45daed8b46b7b62ee5c78a6842ed35d17513619f",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/e30994015e7a",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "d51c7efd781bbec0524030c731d5bcefe1677a5ddc5a31fde1f51effb23d0ab5",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "5a92284fb69d2fff9dd226e8dd962e199b8e6f76b92737e9cf867f21bbbb84ac",
                    "EndpointID": "d51c7efd781bbec0524030c731d5bcefe1677a5ddc5a31fde1f51effb23d0ab5",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
]

这样我们就可以看到一些当前状态信息。
我们可以看到当前使用的镜像。
我们还可以看到它在var lib容器中使用的存储,然后是容器ID。
我们可以看到有关容器配置的信息,例如,如果向下滚动,还可以看到有关联网的信息。
因此,其中我们可以看到网络设置,包括该容器正在使用的IP地址" 172.17.0.2"。