前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Docker-容器详细信息

Docker-容器详细信息

作者头像
运维小路
发布2024-12-19 21:32:50
发布2024-12-19 21:32:50
10300
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况(本小节属于)

Docker基本命令

Dockerfile

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

为什么把这个小节放到比较靠后来讲解呢,主要是因为我们需要对docker有一定理解,才能更好的理解这个信息。在讲Docker-镜像操作&容器操作命令讲过一个参数inspect,它可以显示某个容器的详细信息,今天我们就来讲解下这个命令执行以后显示的内容。

运行一个容器

代码语言:javascript
代码运行次数:0
复制
#尽量使用多的参数
docker run -d \
--name my_centos_container \
--hostname my_container_hostname \
--privileged \
-m 512m \
--cpu-shares 512 \
--cpus 2 \
-p 8080:80 \
-v /data/host:/data/container1 \
-v my_named_volume:/data/container2 \
--network bridge \
-e "MY_VARIABLE=value" \
--restart always \
192.168.31.43:5000/centos:7

解析这个容器

代码语言:javascript
代码运行次数:0
复制
# 除去大括号实际里面就是一个json
[
    {
        "Id": "d60b8f0ef35ed89bff1ba45283e8240ef4d6abac7f6618da178ed1eee03ce98f",
        "Created": "2024-12-12T16:00:45.206440876Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
 #以上部分是基本信息,包括容器id,创建时间,启动命令,和参数
 #其中path就是ENTRYPOINT
 #args 就是CMD
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 938,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-12-12T16:00:45.348834106Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
#以上部分就是状态信息,包括容器状态,pid和上次退出的状态码和启动时间
#ExitCode是上一次退出状态码,可以用来分析历史问题
#Pid 用于使用nsenter命令进入不同的ns空间
#OOMKilled是否因为oom被kill
        "Image": "sha256:3b25b682ea82b2db3cc4fd48db818be788ee3f902ac7378090cf2624ec2442df",
        "ResolvConfPath": "/mnt/containers/d60b8f0ef35ed89bff1ba45283e8240ef4d6abac7f6618da178ed1eee03ce98f/resolv.conf",
        "HostnamePath": "/mnt/containers/d60b8f0ef35ed89bff1ba45283e8240ef4d6abac7f6618da178ed1eee03ce98f/hostname",
        "HostsPath": "/mnt/containers/d60b8f0ef35ed89bff1ba45283e8240ef4d6abac7f6618da178ed1eee03ce98f/hosts",
        "LogPath": "/mnt/containers/d60b8f0ef35ed89bff1ba45283e8240ef4d6abac7f6618da178ed1eee03ce98f/d60b8f0ef35ed89bff1ba45283e8240ef4d6abac7f6618da178ed1eee03ce98f-json.log",
        "Name": "/my_centos_container",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
#以上部分是包括写配置文件,4个特殊文件路径,容器名字,重启次数
#4个路径分别是dns,主机名,hosts,日志路径
#Name则是容器名字   
        "HostConfig": {
            "Binds": [
                "/data/host:/data/container1",
                "my_named_volume:/data/container2"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "8080"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                26,
                142
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": true,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": [
                "label=disable"
            ],
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 512,
            "Memory": 536870912,
            "NanoCpus": 1000000000,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 1073741824,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": [],
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": null,
            "ReadonlyPaths": null
        },
#以上是主机部分,包括磁盘挂载,端口映射,重启方式,资源限制,日志格式
#Binds是磁盘挂载,这里有2种,直接端口映射和使用volume
#LogConfig是日志格式,容器可以单独注入日志格式可以和其他容器不一样
#RestartPolicy配置重启方式,包括最大重启次数

        
        "GraphDriver": {
            "Data": {
                "LowerDir": "/mnt/overlay2/4f2f7474fefe170661331a0744e58a761fb1bfcaba0a24e54965da0386eb174c-init/diff:/mnt/overlay2/606dc92a91914337d5c1fcd6ae3678e81994291cb92ea15eb4139445af98199f/diff:/mnt/overlay2/e2c5910fbd71a9ab11770ba645d6fbfca42510ec05e334773b5dd6148d8587e7/diff:/mnt/overlay2/2006c249381840034b2deefcd93dba27899c8cb34cda2423f720f28420c89299/diff:/mnt/overlay2/c46904127f2107e4bbbb0283048f321e0a35e8ec844b181748f97529c4f780b3/diff:/mnt/overlay2/a5a40868f2ccecb37f62eec6de0b8fd09519c8486e4c018045828949c173d0ab/diff:/mnt/overlay2/364a52d437e1764d9d6c8034ee0da528816c3e320b9f5a9f44238251fd796a3f/diff:/mnt/overlay2/df7a3537996d5e39519acee5e029c43e91c10003eb7d4a5c2feca0d7c8348755/diff",
                "MergedDir": "/mnt/overlay2/4f2f7474fefe170661331a0744e58a761fb1bfcaba0a24e54965da0386eb174c/merged",
                "UpperDir": "/mnt/overlay2/4f2f7474fefe170661331a0744e58a761fb1bfcaba0a24e54965da0386eb174c/diff",
                "WorkDir": "/mnt/overlay2/4f2f7474fefe170661331a0744e58a761fb1bfcaba0a24e54965da0386eb174c/work"
            },
            "Name": "overlay2"
        },
#上面就是联合文件系统的几个层
#LowerDir只读层
#MergedDir就是展示层(只读+读写+上面那3个特殊文件)
#UpperDir就是读写层

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/data/host",
                "Destination": "/data/container1",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "my_named_volume",
                "Source": "/mnt/volumes/my_named_volume/_data",
                "Destination": "/data/container2",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
#磁盘挂载详细信息
#Type挂载类型,包括直接挂载bind,volume映射
#RW 是否读写模式,挂载可以只读挂载
        "Config": {
            "Hostname": "my_container_hostname",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "MY_VARIABLE=value",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.27.2",
                "NJS_VERSION=0.8.6",
                "NJS_RELEASE=1~bookworm",
                "PKG_RELEASE=1~bookworm",
                "DYNPKG_RELEASE=1~bookworm"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "192.168.31.43:5000/centos:7",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
#上面是一个主机名,环境变量,镜像名字,cmd等详细信息
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "fee38d8b900be4e8653918b7cab63a7f4acb395cfbfab8ebaad688fa084529bb",
            "SandboxKey": "/var/run/docker/netns/fee38d8b900b",
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8080"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "8080"
                    }
                ]
            },
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "be69dcf061e8f5b926d4d8adf8a529bf18ac0ad8c33418161aacde339f3045b8",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:11:00:03",
                    "NetworkID": "a3fc72b15a533a1b0b52dcc30f0a6e77c0170d9221ac84b4c1e69b6e21149e6e",
                    "EndpointID": "be69dcf061e8f5b926d4d8adf8a529bf18ac0ad8c33418161aacde339f3045b8",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null,
                    "DNSNames": null
                }
            }
        }
    }
#上面是一些网络相关信息,比如IP,网关,mac和端口映射
#在宿主机外面看不到ip地址,我最常用用它看ip地址
]

能阅读和理解这个文件,其实你对docker的运行情况就会比较了解,就可以基本还原出来这个容器的运行参数,因为如果你接受了别人交接给你的容器平台,如果需要删除容器重建,可以通过这个方式还原出来对应的参数。

当然你也可以用第三方开源的工具去还原:比如runlike,其实我也也用rust写了个类似的工具(全程gpt生成代码)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档