dockerコンテナ

dockerコンテナ

状態/ライフサイクル

dockerコンテナはイメージと違い、状態を持っている。状態は、実行中・停止・破棄がある。

実行中

docker container runで起動させると実行中となり、Dockerfileに記述されたCMDのコマンドを実行し終わるまで自動中となる。
よって、デーモン/サーバー系のコマンドであれば任意に停止、もしくは異常終了するまでそのコンテナは実行中となるが、そうでない場合(lsコマンドなど即座に終了するもの)は、そのコマンドを終えるまでが実行中となる。
CMDの実行が完了すると、コンテナは停止の状態へ移行する。

停止

実行中であったコンテナが停止した状態。停止した状態なので、再利用が可能。停止した時点の情報を持っているので、ディスクなどの容量は使用している。

破棄

停止状態のコンテナは明示的に破棄をしない限りディスクに残り続ける。頻繁に実行->停止を繰り返す運用の場合には、停止されたコンテナがたまるため(再利用されない限りは実行のたびに新たなコンテナが立ち上がる)、ディスク容量を圧迫していくことになる。完全に不要となったコンテナは削除を行った方がいい。
ただし、一度破棄したコンテナを再び利用することはできないため、退避しなければいけない情報がないか確認してから行うこと。

コンテナ操作

dockerのコンテナは、dockerイメージから作成を行う。作成が完了されると実行状態となる。
イメージの指定方法は、イメージ名かイメージに割り振られたIDを指定することができる。

イメージ名での作成

1
docker container run [options] イメージ名[:タグ] [コマンド] [コマンド引数...]

イメージIDでの作成

1
docker container run [options] イメージID [コマンド] [コマンド引数...]

名前付きコンテナ

イメージからコンテナを作成した場合、コンテナの名前は自動で割り振られる。

docker container ls [--all]を行った際にNAMES列に記載されているのが自動で割り振られたコンテナの名前。
オプション--allを指定することで、停止中のコンテナについている名前も確認することができる。この名前を利用して、再利用することも可能。
また、コンテナ起動時にオプションで名前を付けることもできる。

1
docker container run --name [任意のコンテナ名] [イメージ名]:[タグ]

イメージの指定の仕方はコンテナの起動の項目を参照。
ホスト側のポートは省略することができ、省略時は自動で空いているエフェメラルポートが割り当てられる。
割り当てられたポートはdocker container lsで表示されるportsの項目で確認できる。

実行中コンテナの標準出力を取得

1
docker container logs [-f] コンテナID/コンテナ名

-fをつけるとtail -fのように、指定したコンテナの標準出力を取得し続ける。

実行中コンテナでコマンドの実行

1
docker container exec [options] コンテナID/コンテナ名 コンテナで実行したいコマンド

-i -i / -it sh で実行中のコンテナにシェルで操作ができる。

コンテナとのファイルコピー

コンテナからホスト

1
docker contaner cp [options] コンテナID/コンテナ名:コピー元パス コピー先ホストパス

ホストからコンテナ

1
docker container cp [option] コピー元ホストパス コンテナID/コンテナ名:コピー先パス

コンテナの破棄

1
docker container prune [options]

停止中のコンテナを一括削除できる。

イメージの削除

1
docker image prune [options]

不要そうなdockerイメージをdockerが判断して削除してくれる。

いろいろ削除

1
docker system prune

停止中のコンテナ、ネットワーク、イメージ、ビルドキャッシュといった内容の削除をしてくれる。

コンテナの統計情報を取得

docker container stats [options] コンテナ名/コンテナID[ ...(複数指定可)]