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[ ...(複数指定可)]