Docker 実践の理解から基礎原理へ (6-2)|Docker コンテナの運用例

ここに画像の説明を挿入します

序文

そこで、ブロガーが役立つ情報が満載のコラムをいくつか紹介します。

まずはブロガーの質の高いブログのまとめです。このコラムのブログはどれもブロガーが丁寧に書いており、役立つ情報が満載です。皆様のお役に立てれば幸いです。

そして、ブロガーが最近最も多くの時間を費やしているコラム「Docker の実現から実践、そして基礎原理まで」ですので、ぜひ皆さんにも注目していただければと思います。


コンテナ運用事例

コンテナの基本操作

コンテナを引っ張りながら始動します。

ここに画像の説明を挿入します

コンテナの情報を確認して、コンテナが正常に動作しているかどうかを確認します。

ここに画像の説明を挿入します

docker container inspect mynginx001 > tmp.json # 查看信息,重定向到一个json文件中
[
    {
    
    
        "Id": "6a1a254beda42a72127867e68474c30673829bbdcdaf5f6c4a3ac05aab5355e0",
        "Created": "2023-09-15T08:44:54.599522581Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
    
    
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 532,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-09-15T08:44:55.79180895Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:08a1cbf9c69edd2ab8e5250ae97703f60b9393fc5a4827cedda4b7387a5cfc6a",
        "ResolvConfPath": "/data/var/lib/docker/containers/6a1a254beda42a72127867e68474c30673829bbdcdaf5f6c4a3ac05aab5355e0/resolv.conf",
        "HostnamePath": "/data/var/lib/docker/containers/6a1a254beda42a72127867e68474c30673829bbdcdaf5f6c4a3ac05aab5355e0/hostname",
        "HostsPath": "/data/var/lib/docker/containers/6a1a254beda42a72127867e68474c30673829bbdcdaf5f6c4a3ac05aab5355e0/hosts",
        "LogPath": "/data/var/lib/docker/containers/6a1a254beda42a72127867e68474c30673829bbdcdaf5f6c4a3ac05aab5355e0/6a1a254beda42a72127867e68474c30673829bbdcdaf5f6c4a3ac05aab5355e0-json.log",
        "Name": "/mynginx001",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
    
    
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
    
    
                "Type": "json-file",
                "Config": {
    
    }
            },
            "NetworkMode": "default",
            "PortBindings": {
    
    
                "80/tcp": [
                    {
    
    
                        "HostIp": "",
                        "HostPort": "8080"
                    }
                ]
            },
            "RestartPolicy": {
    
    
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                31,
                108
            ],
            "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",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "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": 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": "/data/var/lib/docker/overlay2/23661dd6ebb5c432ce3f1448ac08d038e59ad101b29efe29addefd165b4104a0-init/diff:/data/var/lib/docker/overlay2/e5d076862da7aee474d0550d60c5851dc793757e7ed03fa5fb817c2fa5f1a408/diff:/data/var/lib/docker/overlay2/0351e0d22c137be4b1410c4ba4266d7f7933196345b27d5d9bc22045dfee3d75/diff:/data/var/lib/docker/overlay2/72ccc6676d75d479366ce8182c4ce7be156e8b6e3543ce2e6732b6274a79e4d7/diff:/data/var/lib/docker/overlay2/67bfca339fd7a87963e91b7eb415c9599dbcc18ce95cdbf8c9ef2335e38e5d1a/diff:/data/var/lib/docker/overlay2/9a7b148946cfeb69cb1037446f607a2da6a59c0f1bda46e7d68ed378a8f760e9/diff:/data/var/lib/docker/overlay2/23faacc4402854b8f869f2398bd4efcf323359b9e04830f7c177936c216a6de4/diff",
                "MergedDir": "/data/var/lib/docker/overlay2/23661dd6ebb5c432ce3f1448ac08d038e59ad101b29efe29addefd165b4104a0/merged",
                "UpperDir": "/data/var/lib/docker/overlay2/23661dd6ebb5c432ce3f1448ac08d038e59ad101b29efe29addefd165b4104a0/diff",
                "WorkDir": "/data/var/lib/docker/overlay2/23661dd6ebb5c432ce3f1448ac08d038e59ad101b29efe29addefd165b4104a0/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
    
    
            "Hostname": "6a1a254beda4",
            "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.22.0",
                "NJS_VERSION=0.7.6",
                "PKG_RELEASE=1~bullseye"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx:1.22.0",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
    
    
                "maintainer": "NGINX Docker Maintainers <[email protected]>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
    
    
            "Bridge": "",
            "SandboxID": "555fb0c11fc23cf0aa2b6b3a21399152208941da805c2428a1a2c844aa3871ec",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
    
    
                "80/tcp": [
                    {
    
    
                        "HostIp": "0.0.0.0",
                        "HostPort": "8080"
                    },
                    {
    
    
                        "HostIp": "::",
                        "HostPort": "8080"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/555fb0c11fc2",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "9b30e85ff2551851435264a5ef8517887c4a5f38603cba90fe9dd1a4ca1bbdde",
            "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": "c628e2b0d777ee8674106b75d24bc0ba856047abced6d2ad84e101611461092a",
                    "EndpointID": "9b30e85ff2551851435264a5ef8517887c4a5f38603cba90fe9dd1a4ca1bbdde",
                    "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
                }
            }
        }
    }
]

容器を掃除します。

ここに画像の説明を挿入します

コンテナ状態の移行

コンテナを作成します。

ここに画像の説明を挿入します

この時のステータスは ですCreated

ここに画像の説明を挿入します

現在実行中です。

もちろん、一時停止や開始などの各種操作も可能です。

ここに画像の説明を挿入します

コンテナのバッチ処理のヒント

コンテナの一括検索

注文 説明する
docker container ls -qf name=xxx 名前でフィルターしてコンテナ番号を取得します
docker container ls --filter status=running ステータスに基づいてコンテナ情報をフィルタリングする
docker container ls -aq すべてのコンテナ ID をサイレントに取得する
docker container ls --filter ancestor=xxx コンテナ情報をイメージ名 xxx でフィルタリングします
-a :表示打印所有的容器信息, 包括正在运行和已经退出的
-q : 表示只返回容器 ID
-f : 表示基于给的条件过滤 等价于 --filter 选项

まず、いくつかのコンテナを起動し、いくつかの準備をします。

ここに画像の説明を挿入します

1つ止めてください。

ここに画像の説明を挿入します

フィルタリングを開始します。

名前付きのフィルターmynginx003コンテナー。

[root@ALiCentos7:~]$ docker ps -f name=mynginx003
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
d4f00f4a7544   nginx:1.21.4   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   80/tcp    mynginx003
[root@ALiCentos7:~]$ 

実行中のコンテナをフィルタリングします。

[root@ALiCentos7:~]$ docker ps -f status=running
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                   NAMES
64f920d38e0f   nginx:1.21.4   "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                                  mynginx004
d4f00f4a7544   nginx:1.21.4   "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                                  mynginx003
447d44e1d5b3   nginx:1.22.0   "/docker-entrypoint.…"   3 minutes ago    Up 3 minutes    80/tcp                                  mynginx002
38b14c5cd3d3   nginx:1.21.4   "/docker-entrypoint.…"   17 minutes ago   Up 16 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   mynginx001
[root@ALiCentos7:~]$ 

フィルターイメージはnginx:1.21.4コンテナーです。

[root@ALiCentos7:~]$ docker ps -f ancestor=nginx:1.21.4 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                   NAMES
64f920d38e0f   nginx:1.21.4   "/docker-entrypoint.…"   3 minutes ago    Up 3 minutes    80/tcp                                  mynginx004
d4f00f4a7544   nginx:1.21.4   "/docker-entrypoint.…"   4 minutes ago    Up 4 minutes    80/tcp                                  mynginx003
38b14c5cd3d3   nginx:1.21.4   "/docker-entrypoint.…"   19 minutes ago   Up 18 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   mynginx001
[root@ALiCentos7:~]$

-qただ戻ってくださいid

[root@ALiCentos7:~]$ docker ps -f ancestor=nginx:1.21.4 -q
64f920d38e0f
d4f00f4a7544
38b14c5cd3d3
[root@ALiCentos7:~]$

コンテナのバッチ操作

これを取得した後id、コンテナーに対してバッチ操作を実行できます。

docker stop `docker ps -q` # 把docker ps -q的搜索结果送给docker stop

ここに画像の説明を挿入します

コンテナインタラクションモード

付属モード

ここに画像の説明を挿入します

すべてのログはbashサーバーに出力され、^Cこの時点でネットワークが切断されている場合、コンテナは終了します。

通常、アタッチ モードは運用環境では使用できず、通常は運用環境で使用されます。

分離モード

ここに画像の説明を挿入します

これは bash の影響を受けず、バックグラウンドで実行され、デーモン プロセスです。

では、バックグラウンドで実行されているコンテナーのログを表示するにはどうすればよいでしょうか?

ここに画像の説明を挿入します

切り離された実行中のコンテナに接続する

docker attach mynginx001

この時点で、コンテナはフォアグラウンドで実行されます。

インタラクティブモード

インタラクティブモード。

ここに画像の説明を挿入します

ただし、これはnginx現時点では開始されていないため、bashコンテナ内で手動で開始する必要があります。

もちろん、docker execコマンドを使用して、バックグラウンドで実行されているコンテナーと対話することもできます。

コンテナとホストのコンテンツのコピー

まずindex.htmlコンテナ内のコンテンツをホストにコピーし、ホスト上で特定の変更を行った後、それらをコンテナにコピーして戻します。

まずコンテナを起動します。

ここに画像の説明を挿入します

コンテナ内でこれを見つけますindex.html

ここに画像の説明を挿入します

ローカルにコピーします。

ここに画像の説明を挿入します

タイトルを変更します。

ここに画像の説明を挿入します

コピーして戻します。

ここに画像の説明を挿入します

今すぐもう一度アクセスして見てください。

ここに画像の説明を挿入します

修正は完了しました。

注: コンテナ間でのファイルのコピーはサポートされていません。

コンテナが自動的に削除されました

--rmオプションを持参する

  • コンテナへのフォアグラウンド実行を作成し、終了して何が起こるかを確認します
  • コンテナーへのバックグラウンド実行を作成しdocker stop、何が起こるかを確認します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

この時点で、自動的に削除されていることがわかりました。

--rmコンテナが停止するとアイテムがなくなってしまうため、オプションを使用する際は注意して使用する必要があります。

コンテナが自動的に再起動します

コンテナの再起動オプションは次のとおりです。

docker run --restart=no [容器名] :默认值不自动重启
docker run --restart=on-failure:3 [容器名] : on-failure # 若容器的退出状态非 0,则docker 自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃。
docker run --restart=always [容器名] :always # 容器退出时总是重启
docker run --restart=unless-stopped [容器名] unless-stopped # 容器退出时总是重启,但不考虑 Docker 守护进程启动时就已经停止的容器。

コンテナーの起動時に –restart パラメーターが設定されていない場合は、次のコマンドを使用して更新します。

docker update --restart=always [容器名]

コンテナ環境変数の設定

コマンドを学習するときにも触れましたが、-eオプションで環境変数を設定できます。

複数設定したい場合は2つの方法があります。

  • -e複数のオプションで設定する
  • 設定ファイルを使用する

ここに画像の説明を挿入します

設定ファイルを設定します。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

コンテナの詳細を表示する

docker container inspect 容器

コンテナは単一行コマンドを実行します

Docker コンテナ環境を直接使用して、いくつかのコマンドを実行できます。たとえば、特定のコマンドがコンテナにはあるがホストには存在しない場合、コンテナを使用して特定のタスクを完了できます。

コンテナイメージのインポートとエクスポート

docker exportそしてdocker import

docker saveそしてdocker load

コンテナログの表示

docker logsコマンドの詳細な説明を参照してください。

コンテナリソースビュー

docker topHeduコマンドの詳しい説明をご覧いただけますdocker stats

おすすめ

転載: blog.csdn.net/Yu_Cblog/article/details/132987278