docker查看,删除,停止,暂停,恢复容器详解

发布于:2024-10-17 ⋅ 阅读:(7) ⋅ 点赞:(0)

一,查看容器(假设你有一个名为 `my_app_container` 的容器)。

 1. 查看所有容器(包括已停止的)

docker ps -a

输出示例:

CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS                      PORTS     NAMES

123456789abc   my_app_image   "npm start"              2 hours ago    Up 2 hours                  3000/tcp  my_app_container

def4567890ab   another_image  "python app.py"          3 days ago     Exited (0) 3 days ago                another_container

 2. 获取容器的详细信息

docker inspect my_app_container

输出示例(部分):

[

    {

        "Id": "123456789abc",

        "Created": "2023-10-10T12:34:56.789Z",

        "Path": "npm",

        "Args": ["start"],

        "State": {

            "Status": "running",

            "Running": true,

            "Paused": false,

            "Restarting": false,

            "OOMKilled": false,

            "Dead": false,

            "Pid": 1234,

            "ExitCode": 0,

            "Error": "",

            "StartedAt": "2023-10-10T12:35:00.123Z",

            "FinishedAt": "0001-01-01T00:00:00Z"

        },

        "Image": "sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",

        "ResolvConfPath": "/var/lib/docker/containers/123456789abc/resolv.conf",

        "HostnamePath": "/var/lib/docker/containers/123456789abc/hostname",

        "HostsPath": "/var/lib/docker/containers/123456789abc/hosts",

        "LogPath": "/var/lib/docker/containers/123456789abc/123456789abc-.log",

        "Name": "/my_app_container",

        "RestartCount": 0,

        "Driver": "overlay2",

        "Platform": "linux",

        "MountLabel": "",

        "ProcessLabel": "",

        "AppArmorProfile": "",

        "ExecIDs": null,

        "HostConfig": {

            "Binds": null,

            "ContainerIDFile": "",

            "LogConfig": {

                "Type": "-file",

                "Config": {}

            },

            "NetworkMode": "default",

            "PortBindings": {

                "3000/tcp": [

                    {

                        "HostIp": "",

                        "HostPort": "3000"

                    }

                ]

            },

            "RestartPolicy": {

                "Name": "no",

                "MaximumRetryCount": 0

            },

            "AutoRemove": false,

            "VolumeDriver": "",

            "VolumesFrom": null,

            "CapAdd": null,

            "CapDrop": null,

            "CgroupnsMode": "private",

            "Dns": [],

            "DnsOptions": [],

            "DnsSearch": [],

            "ExtraHosts": null,

            "GroupAdd": null,

            "IpcMode": "private",

            "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,

            "DeviceRequests": null,

            "KernelMemory": 0,

            "KernelMemoryTCP": 0,

            "MemoryReservation": 0,

            "MemorySwap": 0,

            "MemorySwappiness": null,

            "OomKillDisable": false,

            "PidsLimit": null,

            "Ulimits": null,

            "CpuCount": 0,

            "CpuPercent": 0,

            "IOMaximumIOps": 0,

            "IOMaximumBandwidth": 0,

            "MaskedPaths": [

                "/proc/asound",

                "/proc/acpi",

                "/proc/kcore",

                "/proc/keys",

                "/proc/latency_stats",

                "/proc/timer_list",

                "/proc/timer_stats",

                "/proc/sched_debug",

                "/proc/scsi",

                "/sys/firmware"

            ],

            "ReadonlyPaths": [

                "/proc/bus",

                "/proc/fs",

                "/proc/irq",

                "/proc/sys",

                "/proc/sysrq-trigger"

            ]

        },

        "GraphDriver": {

            "Data": {

                "LowerDir": "/var/lib/docker/overlay2/abcdef1234567890/diff:/var/lib/docker/overlay2/ghijklmnopqrstuv/diff",

                "MergedDir": "/var/lib/docker/overlay2/123456789abc/merged",

                "UpperDir": "/var/lib/docker/overlay2/123456789abc/diff",

                "WorkDir": "/var/lib/docker/overlay2/123456789abc/work"

            },

            "Name": "overlay2"

        },

        "Mounts": [],

        "Config": {

            "Hostname": "123456789abc",

            "Domainname": "",

            "User": "",

            "AttachStdin": false,

            "AttachStdout": false,

            "AttachStderr": false,

            "ExposedPorts": {

                "3000/tcp": {}

            },

            "Tty": false,

            "OpenStdin": false,

            "StdinOnce": false,

            "Env": [

                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",

                "NODE_ENV=production"

            ],

            "Cmd": [

                "npm",

                "start"

            ],

            "Image": "my_app_image",

            "Volumes": null,

            "WorkingDir": "/app",

            "Entrypoint": null,

            "OnBuild": null,

            "Labels": {}

        },

        "NetworkSettings": {

            "Bridge": "",

            "SandboxID": "123456789abc",

            "HairpinMode": false,

            "LinkLocalIPv6Address": "",

            "LinkLocalIPv6PrefixLen": 0,

            "Ports": {

                "3000/tcp": [

                    {

                        "HostIp": "0.0.0.0",

                        "HostPort": "3000"

                    }

                ]

            },

            "SandboxKey": "/var/run/docker/netns/123456789abc",

            "SecondaryIPAddresses": null,

            "SecondaryIPv6Addresses": null,

            "EndpointID": "123456789abc",

            "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": "123456789abc",

                    "EndpointID": "123456789abc",

                    "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

                }

            }

        }

    }

]

 3. 获取容器的IP地址

docker inspect -f '{{ .NetworkSettings.IPAddress }}' my_app_container

输出示例:

172.17.0.2

 4. 查看容器的日志输出

docker logs --tail 100 -f my_app_container

输出示例:

> my_app@1.0.0 start

> node app.js

Server running on port 3000

 5. 查看容器内的所有进程

docker top my_app_container

输出示例:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD

root                1234                0                   0                   12:35               ?                   00:00:00            npm start

node                1235                1234                0                   12:35               ?                   00:00:01            node app.js

 6. 实时显示容器的资源使用统计信息

docker stats my_app_container

输出示例:

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS

123456789abc   my_app_container   0.10%     10.5MiB / 1.952GiB   0.52%     1.2kB / 0B        0B / 0B           2

 7. 列出容器的端口映射

docker port my_app_container

输出示例:

3000/tcp -> 0.0.0.0:3000

 8. 在容器中执行命令(进入容器的 Bash 终端)

docker exec -it my_app_container /bin/bash

输出示例(进入容器后的终端):

root@123456789abc:/app# ls

app.js  package.  node_modules

 9. 在容器中后台执行命令(创建一个测试文件)

docker exec -d my_app_container touch /tmp/testfile

验证:

docker exec -it my_app_container ls /tmp

输出示例:

testfile

 10. 实时显示 Docker 守护进程产生的事件(仅显示容器启动事件)

docker events --filter 'event=start'

输出示例:

2023-10-10T12:35:00.123456Z container start 123456789abc (image=my_app_image, name=my_app_container)

 11. 定期检查容器资源使用情况

watch -n 5 'docker stats --no-stream

输出示例(每5秒更新一次):

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS

123456789abc   my_app_container   0.10%     10.5MiB / 1.952GiB   0.52%     1.2kB / 0B        0B / 0B           2

 12. 结合 `jq` 处理 `docker inspect` 输出

docker inspect my_app_container | jq '.[0].NetworkSettings.IPAddress'

输出示例:

"172.17.0.2"

 13. 查看容器的前100条日志,并显示时间戳

docker logs --tail 100 -t my_app_continer

输出示例:

2023-10-10T12:35:00.123456Z my_app_container Server running on port 3000

 14. 查看从某个时间点之后的容器日志

docker logs --since "2023-10-10" my_app_container

输出示例:

Server running on port 3000

 15. 查看容器的资源使用情况,不持续更新

docker stats --no-stream my_app_container

输出示例:

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS

123456789abc   my_app_container   0.10%     10.5MiB / 1.952GiB   0.52%     1.2kB / 0B        0B / 0B           2

 16. 过滤显示特定类型的事件(例如容器启动事件)

docker events --filter 'event=start'

输出示例:

2023-10-10T12:35:00.123456Z container start 123456789abc (image=my_app_image, name=my_app_container)

 17. 查看容器的详细信息,格式化输出

docker inspect -f '{{ .Name }} {{ .State.Status }}' my_app_container

输出示例:

/my_app_container running

 18. 查看容器的磁盘使用情况

docker inspect -s my_app_container

输出示例:

false

 19. 在容器中以特定用户身份执行命令

docker exec -u root -it my_app_container /bin/bash

输出示例(进入容器后的终端):

root@123456789abc:/app# whoami

root

 20. 查看容器的环境变量

docker inspect -f '{{ .Config.Env }}' my_app_container

输出示例:

[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NODE_ENV=production]

 21. 查看容器的挂载点

docker inspect -f '{{ .Mounts }}' my_app_container

输出示例:

[]

 22. 查看容器的网络配置

docker inspect -f '{{ .NetworkSettings }}' my_app_container

输出示例(部分):

{

    "Bridge": "",

    "SandboxID": "123456789abc",

    "HairpinMode": false,

    "LinkLocalIPv6Address": "",

    "LinkLocalIPv6PrefixLen": 0,

    "Ports": {

        "3000/tcp": [

            {

                "HostIp": "0.0.0.0",

                "HostPort": "3000"

            }

        ]

    },

    "SandboxKey": "/var/run/docker/netns/123456789abc",

    "SecondaryIPAddresses": null,

    "SecondaryIPv6Addresses": null,

    "EndpointID": "123456789abc",

    "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": "123456789abc",

            "EndpointID": "123456789abc",

            "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

        }

    }

}

 23. 查看容器的镜像信息

docker inspect -f '{{ .Image }}' my_app_container

输出示例:

sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

 24. 查看容器的创建时间

docker inspect -f '{{ .Created }}' my_app_container

输出示例:

2023-10-10T12:34:56.789Z

 25. 查看容器的重启策略

docker inspect -f '{{ .HostConfig.RestartPolicy }}' my_app_container

输出示例:

{Name:no MaximumRetryCount:0}

二.删除容器

示例:

删除所有容器

docker ps -aq |xargs docker rm -f  或者 docker rm -f `docker ps -aq`

删除停止状态容器

docker rm `docker ps -qf status=exited`

三.容器启动和停止 暂停恢复

批量启动所有容器

docker start `ps -aq`

批量停止所有容器

docker stop `ps -aq`

 批量暂停所有容器

docker pause `ps -aq`

 批量恢复所有容器

docker unpaus`ps -aq`