コンテナのいじり方


ここではコンテナの各種操作を体験してみましょう。

docker run - コンテナの起動

Docker コンテナの起動のためのコマンドです。

$ docker run alpine echo hello world!
hello world!

このコンテナはecho "Hello Docker"を実行して終了しています。
この時、ローカルにイメージが存在しない場合、自動的にDocker Hubからイメージを取得した後、コンテナを起動します。

docker runを実行するときに-i(キーボード入力可能)-t(ttyを確保する)のオプションをつけると実行したターミナル上でコンテナを操作することができます。まとめて-itで記述できます。

$ docker run -it alpine /bin/sh
# uname -a
Linux 568b642580eb 4.9.30-moby #1 SMP Wed May 31 05:30:34 UTC 2017 x86_64 Linux
# exit

exitを入力すると、コンテナのターミナルを終了し、ホストターミナルに戻ります。
実行したshが終了したためコンテナも停止します。

docker ps - コンテナの稼働状況確認

現在稼働しているコンテナの一覧を見ることができます。先程動かしたwordpressのイメージが動いていますね。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
bcf000b1a41c        wordpress:latest    "docker-entrypoint..."   2 hours ago         Up 2 hours          0.0.0.0:80->80/tcp   wordpress_wordpress_1
8626ff5ac374        mysql:5.7           "docker-entrypoint..."   2 hours ago         Up 2 hours          3306/tcp             wordpress_db_1

-aオプションをつけて実行すると、先程起動したコンテナが Exitedステータスで残っていることがわかります。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                NAMES
568b642580eb        alpine              "/bin/sh"                2 minutes ago       Exited (127) 19 seconds ago                        mystifying_kare
bcf000b1a41c        wordpress:latest    "docker-entrypoint..."   2 hours ago         Up 2 hours                    0.0.0.0:80->80/tcp   wordpress_wordpress_1
8626ff5ac374        mysql:5.7           "docker-entrypoint..."   2 hours ago         Up 2 hours                    3306/tcp             wordpress_db_1

dockerのコンテナは終了した後も明示的に指示しない限り残り続けます。これはコンテナに対して少しでも作業が行われたものはイメージとして利用する可能性があるため、残すように配慮されているものと思われます。実際に、Exitedなコンテナから新たにイメージを作成することもできます。

docker inspect - コンテナ情報の取得

すぐに終了するコンテナと、動き続けるコンテナ。どんな違いがあるのでしょう。
これはイメージの起動時に実行されるコマンドに違いが有ります。inspectコマンドで確認してみましょう。

$ docker inspect alpine
[
...
        "Config": {
            "Hostname": "9ac68176ac52",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/sh\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:a96393421091145abdc0ce8f02691166ed0fe7f769b4dfc7f700b4b11d4a80df",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
...
]

$ docker inspect wordpress | grep CMD
                "CMD [\"apache2-foreground\"]"

CMDで指定されているものが違います。alpineがshであるのに対し、wordpressはapacheが指定されています。
apacheは起動後もhttpリクエストを待ち続けるのでコンテナは終了せずUPステータスになっているようです。

inspectコマンドはコンテナだけでなく、dockerで扱われる様々なオブジェクトに対して利用できます。
volumeの詳細を確認する例は次のとおりです。

$ docker volume ls
DRIVER              VOLUME NAME
local               24e8addfe7e17b0b32edb89a0110bc73fdb89b74ebe47b0fc5d0c755ec61e465
local               wordpress_db-data

$ docker inspect wordpress_db-data
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/wordpress_db-data/_data",
        "Name": "wordpress_db-data",
        "Options": {},
        "Scope": "local"
    }
]

docker exec - コンテナの稼働状況確認

execを使うと起動中のコンテナに接続してコマンド操作が行えます。名前もしくはコンテナIDで接続できます。
どちらもdocker psコマンドで確認できます。

コンテナ内でps -elを実行するとapache2が動作していることが実際に分かります。

$ docker exec -it wordpress_wordpress_1 /bin/bash
# ps -el
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 - 78770 -      ?        00:00:00 apache2
# exit

docker stop & rm - コンテナの終了と削除の仕方

サービス化したプロセスが動作するコンテナはそのまま動き続けます。終了するにはstopコマンドを使います。

$ docker stop wordpress_wordpress_1
wordpress_wordpress_1
$ docker stop wordpress_db_1
wordpress_db_1

コンテナの状態を確認します。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
568b642580eb        alpine              "/bin/sh"                About an hour ago   Exited (137) 22 seconds ago                       mystifying_kare
bcf000b1a41c        wordpress:latest    "docker-entrypoint..."   3 hours ago         Exited (0) 3 minutes ago                          wordpress_wordpress_1
8626ff5ac374        mysql:5.7           "docker-entrypoint..."   3 hours ago         Exited (0) 10 seconds ago                         wordpress_db_1

残ったもので不要なコンテナはrmコマンドで削除できます。稼働中のコンテナは削除できませんのであしからず。

$ docker rm mystifying_kare
mystifying_kare

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
bcf000b1a41c        wordpress:latest    "docker-entrypoint..."   3 hours ago         Exited (0) 9 minutes ago                       wordpress_wordpress_1
8626ff5ac374        mysql:5.7           "docker-entrypoint..."   3 hours ago         Exited (0) 6 minutes ago                       wordpress_db_1

wordprssとmysqlのコンテナはもう少しとっておきましょう。

docker system prune - お掃除の仕方

dockerはその性質上、知らない間に色々なデータを残します。意外とリソースに優しくありません。

どれだけリソースを消費しているかdocker system dfコマンドで確認しましょう。

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              12                  2                   4.87GB              4.304GB (88%)
Containers          2                   0                   187B                187B (100%)
Local Volumes       2                   2                   232.4MB             0B (0%)

最近のdockerさんは自信が管理するリソース(イメージ、コンテナ、ボリューム、ネットワーク)のうちどこからも参照されていないものを一気に削除できるコマンドdocker system pruneを用意してくれました!

$ docker system prune
WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all networks not used by at least one container
    - all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
bcf000b1a41cad0d98753f44bf83ba332ce0eae2f8336158c4bf96c40af10331
8626ff5ac374332c41a1e02df603736e873e394f74cbea6750ef9d628cc5da01

Deleted Volumes:
24e8addfe7e17b0b32edb89a0110bc73fdb89b74ebe47b0fc5d0c755ec61e465
wordpress_db-data

Deleted Networks:
wordpress_flat-network

Total reclaimed space: 232.4MB

これはうれしい機能です!まめに実行しておいてください。

results matching ""

    No results matching ""