1. 程式人生 > 其它 >docker容器生命週期管理

docker容器生命週期管理

檢視容器版本

docker version

[root@node1 ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.9
 API version:       1.41
 Go version:        go1.16.8
 Git commit:        c2ea9bc
 Built:             Mon Oct  4 16:08:14 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.9
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.8
  Git commit:       79ea9d3
  Built:            Mon Oct  4 16:06:37 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.11
  GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

執行容器

docker run ‘image’ 或者docker container run ‘image’

如果docker run 後面指定的映象沒有加tag,那麼預設就會執行tag為latest的映象。

互動式執行容器

docker run -i -t 映象名

-i 表示互動式

-t 表示為容器開啟一個終端

[root@node1 ~]# docker run -i -t centos
[root@5fd531998278 /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  1.1  0.2  12036  2088 pts/0    Ss   06:22   0:00 /bin/bash
root         15  0.0  0.1  44652  1780 pts/0    R+   06:22   0:00 ps aux 

以後臺的形式執行容器(最常使用的)

docker run -dt “image” “command” 後面的command會替代image中構建的最後一個命令

-d 引數是後臺執行

[root@node1 ~]# docker run -dt centos bash
fec14b595a81d8c47f5e81035c883b75147a3f52da51eb8b79298dede4c72945
[root@node1 docker]# docker run -dt --name web nginx  bash  
7c741b579a562d264a4bd0d24ed84405c19476875f579d2f8dc230e183349ec9
[root@node1 docker]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
7c741b579a56   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 7 seconds   80/tcp    web
b713aabd323d   centos    "/bin/bash"              5 minutes ago   Up 5 minutes             dazzling_raman

  

進入一個已執行的容器

docker exec -it ‘容器id或NAMES’ ‘command’

[root@node1 docker]# docker exec -it b713aabd323d bash
[root@b713aabd323d /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  12036  1936 pts/0    Ss+  14:11   0:00 /bin/bash
root         27  0.1  0.2  12036  2100 pts/1    Ss   14:18   0:00 bash
root         41  0.0  0.1  44652  1784 pts/1    R+   14:19   0:00 ps aux

退出容器

exit

臨時退出容器

ctrl+p+q

返回臨時退出的容器

docker attach +容器的id

停止容器

docker stop + 容器id 正常停止一個容器

docker kill + 容器id 強行殺掉一個容器

上圖中容器狀態STATUS可以看到退出容器的狀態碼,docker stop +容器id停止的狀態碼為0,docker kill + 容器id停止的狀態碼是非零

重啟容器

docker restart +容器id

檢視執行的容器

docker ps

docker ps -q 只檢視執行容器id

檢視所有的容器,包括已退出的容器

docker ps -a

docker ps -aq 只檢視所有容器的id

刪除容器

docker container rm +容器id

預設情況下只能刪除已經停止的容器,也可以加-f引數強行刪除正在執行的容器(不建議)

檢視容器log

docker logs

首先執行一個容器nginx,然後執行docker logs web 檢視這個容器的日誌

[root@node1 ~]# docker run -dt --name web nginx                           #啟動一個指定名為web的nginx容器
[root@node1 ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
cd9d8a5a355e   nginx     "/docker-entrypoint.…"   51 seconds ago   Up 50 seconds   80/tcp    web
fec14b595a81   centos    "/bin/bash"              6 hours ago      Up 6 hours                condescending_benz
67c3f5089a59   centos    "/bin/bash"              6 hours ago      Up 6 hours                zealous_greider
[root@node1 ~]# docker logs web                                          #檢視web的容器log
/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/10/20 12:56:57 [notice] 1#1: using the "epoll" event method
2021/10/20 12:56:57 [notice] 1#1: nginx/1.21.3
2021/10/20 12:56:57 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 
2021/10/20 12:56:57 [notice] 1#1: OS: Linux 3.10.0-1062.el7.x86_64
2021/10/20 12:56:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/10/20 12:56:57 [notice] 1#1: start worker processes
2021/10/20 12:56:57 [notice] 1#1: start worker process 31

  

檢視容器的程序

docker top 程序id或者 NAMES

[root@node1 ~]# docker top web
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12080               12061               0                   20:56               pts/0               00:00:00            nginx: master process nginx -g daemon off;
101                 12128               12080               0                   20:56               pts/0               00:00:00            nginx: worker process

  

[root@node1 ~]# docker top condescending_benz
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11236               11218               0                   17:11               pts/0               00:00:00            /bin/bash
[root@node1 ~]# docker top fec14b595a81
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11236               11218               0                   17:11               pts/0               00:00:00            /bin/bash

  

檢視容器內部的詳細資訊

docker spect web #檢視名為web的nginx容器詳細資訊 ,這個命令返回結果為json格式

[root@node1 ~]# docker inspect web
[
    {
        "Id": "cd9d8a5a355e21c423af1c53286af9e4670ec9457f0e22b1a68e0d699bcfa78f",
        "Created": "2021-10-20T12:56:57.15455763Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 12080,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-10-20T12:56:57.915592015Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02",
        "ResolvConfPath": "/var/lib/docker/containers/cd9d8a5a355e21c423af1c53286af9e4670ec9457f0e22b1a68e0d699bcfa78f/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/cd9d8a5a355e21c423af1c53286af9e4670ec9457f0e22b1a68e0d699bcfa78f/hostname",
        "HostsPath": "/var/lib/docker/containers/cd9d8a5a355e21c423af1c53286af9e4670ec9457f0e22b1a68e0d699bcfa78f/hosts",
        "LogPath": "/var/lib/docker/containers/cd9d8a5a355e21c423af1c53286af9e4670ec9457f0e22b1a68e0d699bcfa78f/cd9d8a5a355e21c423af1c53286af9e4670ec9457f0e22b1a68e0d699bcfa78f-json.log",
        "Name": "/web",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "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,
            "CgroupnsMode": "host",
            "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/c34d13e1617f850faa442b48ee067cee6b4c786617a68bc0f14efac09680cf5e-init/diff:/var/lib/docker/overlay2/916b4b09d26638d695f00d92703ea74c3ca25ec2b45553bbbfb8124b94c97d51/diff:/var/lib/docker/overlay2/646e9fdde9960bf6b7751d19d12921668857653cbcbe12ece1f8778560f26fac/diff:/var/lib/docker/overlay2/c23d2e4620ca9dad82d584da266ac08650339db8b0256cb0c6af396f6acf52c9/diff:/var/lib/docker/overlay2/0978fa2b8de789fe52c284e7189c672b1ae149a23a1120cac53764ca58ffc26a/diff:/var/lib/docker/overlay2/1806b9060674b511023a35cb7d2d0eb05f2819bc7af1e884ad6eb5bc21a98fb9/diff:/var/lib/docker/overlay2/0a4ab40a97f3191a3c1ff84f2653499dbf8a4f73f2b771750212eaf5a1355bca/diff",
                "MergedDir": "/var/lib/docker/overlay2/c34d13e1617f850faa442b48ee067cee6b4c786617a68bc0f14efac09680cf5e/merged",
                "UpperDir": "/var/lib/docker/overlay2/c34d13e1617f850faa442b48ee067cee6b4c786617a68bc0f14efac09680cf5e/diff",
                "WorkDir": "/var/lib/docker/overlay2/c34d13e1617f850faa442b48ee067cee6b4c786617a68bc0f14efac09680cf5e/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "cd9d8a5a355e",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": true,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.3",
                "NJS_VERSION=0.6.2",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <[email protected]>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "7e0664529b4530566bb81f703c9ed5cb7c3d2a8d52922fafcd812fcf570a9953",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/7e0664529b45",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "a510f09a369fea8067cd1e9a5f13fc6b1905437246f386395aefa1e7b295651a",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.4",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:04",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "1e97883068f16a7653829f2adc3fa1da86d219b4ce00f9eac7d1c96b66a9aeee",
                    "EndpointID": "a510f09a369fea8067cd1e9a5f13fc6b1905437246f386395aefa1e7b295651a",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }
        }
    }
]
[root@node1 ~]# 
docker inspect web

將主機檔案拷貝到容器中

docker cp

將docker目錄下的ubunto_latest_image.tar 拷貝到名為busy_buck的容器/目錄下

[root@node1 docker]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED              STATUS              PORTS     NAMES
2bb4aeab2410   centos    "bash"    About a minute ago   Up About a minute             busy_buck
[root@node1 docker]# ls
daemon.json  key.json  ubunto_latest_image.tar
[root@node1 docker]# docker cp ubunto_latest_image.tar busy_buck:/
[root@node1 docker]# docker attach 2bb4aeab2410
[root@2bb4aeab2410 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  ubunto_latest_image.tar  usr  var 

將容器檔案拷貝到主機上

[root@node1 docker]# docker cp  dazzling_raman:/ubunto_latest_image.tar ./
[root@node1 docker]# ls
daemon.json  key.json  ubunto_latest_image.tar