Docker
コンテナの管理
サーチ…
構文
- docker rm [オプション]コンテナ[コンテナ...]
- ドッカー添付[オプション]コンテナ
- ドッカーexec [オプション]コンテナコマンド[ARG ...]
- ドッカーps [オプション]
- ドッカーログ[オプション]コンテナ
- docker inspect [オプション] CONTAINER | IMAGE [CONTAINER | IMAGE ...]
備考
- 上記の例では、containerがdockerコマンドのパラメータである場合、
<container>
またはcontainer id
または<CONTAINER_NAME>
として記述されています。これらのすべての場所で、コンテナ名またはコンテナIDを渡してコンテナを指定することができます。
コンテナのリスト表示
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
は、現在実行中のコンテナのみを出力します。すべてのコンテナ(停止したものを含む)を表示するには、 -a
フラグを使用します。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
特定のステータスのコンテナを表示するには、 -f
コマンドラインオプションを使用して結果をフィルタリングします。ここでは、終了したすべてのコンテナを列挙する例を示します。
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
-q
スイッチを使用してコンテナIDのみを表示することもできます。これにより、他のUnixユーティリティ( grep
やawk
)で結果を操作するのが非常に簡単になります:
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
docker run --name mycontainer1
をdocker run --name mycontainer1
てコンテナを起動するときdocker run --name mycontainer1
を指定すると、(mood_famousという形式の、nostalgic_stallmanのような)ランダムな名前ではなく特定の名前が与えられます。このようなコマンドで簡単に見つけることができます
docker ps -f name=mycontainer1
コンテナの参照
コンテナの名前を取るDockerコマンドは3つの異なる形式を受け取ります:
タイプ | 例 |
---|---|
完全なUUID | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
短いUUID | 9cc69f11a0f7 |
名 | berserk_wozniak |
docker ps
を使用して、システム上のコンテナのこれらの値を表示します。
UUIDはDockerによって生成され、変更することはできません。 docker run --name <given name> <image>
を起動するときにコンテナに名前を指定するには、--name docker run --name <given name> <image>
ます。 Dockerは、コンテナの開始時に指定していない場合、コンテナにランダムな名前を生成します。
注 :UUIDの値(または「短い」UUID)は、指定された値が1つのコンテナに対して一意である限り任意の長さにすることができます
コンテナの起動と停止
実行中のコンテナを停止するには:
docker stop <container> [<container>...]
これは、コンテナ内のメインプロセスをSIGTERMに送信し、猶予期間内に停止しない場合はSIGKILLを送信します。各コンテナの名前は停止して印刷されます。
停止しているコンテナを開始するには:
docker start <container> [<container>...]
これは、バックグラウンドで渡された各コンテナを開始します。各コンテナの名前は開始時に表示されます。フォアグラウンドでコンテナを開始するには、 -a
( -a
--attach
)フラグを--attach
ます。
カスタム形式のコンテナを一覧表示する
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
特定のコンテナを見つける
docker ps --filter name=myapp_1
コンテナIPを検索
コンテナのIPアドレスを調べるには、次のようにします。
docker inspect <container id> | grep IPAddress
ドッカー検査を使用する
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
ドッカーコンテナの再起動
docker restart <container> [<container>...]
オプション--time : コンテナを強制終了するまで待機する秒数(デフォルトは10)
docker restart <container> --time 10
コンテナの削除、削除、およびクリーンアップ
docker rm
を使用すると、次のような特定のコンテナを削除できます。
docker rm <container name or id>
すべてのコンテナを削除するには、次の式を使用します。
docker rm $(docker ps -qa)
デフォルトでは、ドッカーは実行中のコンテナを削除しません。実行中のコンテナは警告メッセージを生成し、削除されません。他のすべてのコンテナは削除されます。
あるいは、 xargs
を使うこともできます:
docker ps -aq -f status=exited | xargs -r docker rm
docker ps -aq -f status=exited
は、ステータスが "Exited"のコンテナのコンテナIDのリストを返します。
警告:上記の例では、「停止した」コンテナのみが削除されます。
コンテナを削除するには、コンテナが停止しているかどうかにかかわらず、forceフラグ-f
:
docker rm -f <container name or id>
状態に関係なく、すべてのコンテナを削除するには:
docker rm -f $(docker ps -qa)
dead
ステータスのコンテナのみを削除する場合は、次のようにdead
ます。
docker rm $(docker ps --all -q -f status=dead)
exited
ステータスのコンテナのみを削除する場合は、次のようにします。
docker rm $(docker ps --all -q -f status=exited)
これらは、 コンテナの一覧を表示するときに使用されるフィルタのすべての順列です。
バージョン1.3以降にスペースを使用する不要なコンテナとダングル画像を削除するには、次のようにします(Unixツールdf
似ています):
$ docker system df
未使用のデータをすべて削除するには:
$ docker system prune
既存のドッカーコンテナでコマンドを実行する
docker exec -it <container id> /bin/bash
すでに実行中のコンテナにログインして、簡単なテストを行うか、アプリケーションが何をしているかを確認するのが一般的です。多くの場合、ログや変更されたファイルのためにコンテナの使用方法が悪いことを示します。この例では、コンテナにログインできます。これは/ bin / bashがコンテナ内で利用可能であると仮定し、/ bin / shまたは何か他のものとすることができます。
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
この例では、データディレクトリの内容をtarにアーカイブします。それからdocker cp
それを取得することができます。
コンテナログ
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
例えば:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
デーモンとして実行中のインスタンスに接続する
これを達成するには2つの方法がありますが、最初に最もよく知られていることは次のとおりです。
docker attach --sig-proxy=false <container>
これは文字通りあなたのbashをコンテナのbashに接続します。つまり、実行中のスクリプトがあれば結果が表示されます。
切り離すには、次のように入力します: Ctl-P Ctl-Q
しかし、よりフレンドリーな方法が必要で、新しいbashインスタンスを作成できるようにするには、次のコマンドを実行してください:
docker exec -it <container> bash
ファイルのコンテナへのコピー
コンテナからホストへ
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
ホストからコンテナへ
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
jess / transmissionを使って
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
コンテナ内のファイルは/ transmission / downloadにあります
ホストの私の現在のディレクトリは/ home / $ USER / abcです。
docker cp transmission_id_or_name:/transmission/download .
私はファイルをコピーします
/home/$USER/abc/transmission/download
docker cp
を使って1つのファイルだけをコピーして、ディレクトリツリーとファイルをコピーすることはできません
ドッカーボリュームの削除、削除、クリーンアップ
ドッカーボリュームは、コンテナが停止しても自動的に削除されません。コンテナを停止したときに関連するボリュームを削除するには:
docker rm -v <container id or name>
-v
フラグが指定されていない場合、ボリュームはディスク上に「未使用ボリューム」として残ります。ダングリングボリュームをすべて削除するには:
docker volume rm $(docker volume ls -qf dangling=true)
docker volume ls -qf dangling=true
filterは、コンテナに接続されていないタグなしボリュームを含むドッカーボリューム名のリストを返します。
あるいは、 xargs
を使用することもできます:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Dockerコンテナファイルシステムのエクスポートとインポート
Dockerコンテナのファイルシステムの内容をtarballアーカイブファイルに保存することは可能です。これは、コンテナファイルシステムを異なるホストに移動する場合に役立ちます。たとえば、データベースコンテナに重要な変更があって、他の場所で変更を複製できない場合などに便利です。コンテナのファイルシステムをエクスポートおよび移動するのではなく、 docker run
コマンドまたはdocker-compose.yml
ファイルを使用して、更新されたイメージからまったく新しいコンテナを作成することが望ましいことに注意してください 。ドッカーの力の一部は、画像とコンテナを作成する宣言的スタイルの監査可能性と説明責任です。 docker export
とdocker import
を使用することで、コンテナのファイルシステムの内部で元の状態から変更が難読化されているため、この電力は抑制されます。
docker export -o redis.tar redis
上記のコマンドは、空のイメージを作成し、この空のイメージにredis
コンテナのファイルシステムをエクスポートします。 tarballアーカイブからインポートするには、以下を使用します。
docker import ./redis.tar redis-imported:3.0.7
このコマンドを実行すると、 redis-imported:3.0.7
イメージが作成され、そこからコンテナを作成できます。コミットメッセージを設定するだけでなく、インポート時に変更を加えることもできます。
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
-c
コマンドラインオプションで使用できるDockerfileディレクティブは、 CMD
、 ENTRYPOINT
、 ENV
、 EXPOSE
、 ONBUILD
、 USER
、 VOLUME
、 WORKDIR
です。