しゃちの備忘録

プログラミングを中心とした技術関連の備忘録です(今のところ)

dockerのコンテナ&イメージ 個人的まとめ

イメージとコンテナの違い、それぞれを作成するコマンドのまとめ。

そのうちちゃんと表やオプションもまとめるつもりですけど、現時点での覚書をまとめておく。

作られるもの

image(イメージ)

rootファイルシステムなどのイメージレイヤーと実行するコマンドや開放するポート設定などの情報であるメタデータの集合であり読み込み専用。

dockerhubなどのDocker Registryからpullすることで取得できたり、 Dockerfileでbuildしたりして自分で作ることもできる。

だからイメージを取得といったり作成したりという。

container(コンテナ)

上で取得したイメージ上に実際に読み書き可能なレイヤを追加し、指定されたプロセスを隔離実行された状態でシステムリソース上で実行すること。 イメージ+読み書き用のレイヤ=コンテナ。

実際に動くものを実行するのはここ、なのでコンテナを実行という。

作る系コマンド

コマンドに関しては、Docker 1.13以降でdocker container ~系のコマンドがサポートされたことで、等価なコマンドがいくつか存在している認識です。 その辺の対応は後で作るとして、いったん知っているコマンドとそれで起こることをまとめます。

teratail.com

docker-compose build

イメージを作成するところまで行う、コンテナの作成、実行はしない。

Dockerfileを更新した時は、キャッシュを使用せずbuildして欲しいので、docker-compose build --no-cachを使うべき。

docker create

イメージIDを指定し、コンテナを作成する。 コンテナの実行はしない。

docker-compose up

(イメージがなければ)イメージの作成、コンテナの作成、コンテナの実行まで全て行う。 docker-compose.ymlに記述された内容をもとに全てのコンテナを動かすので、複数コンテナのサービスを立ち上げるときに使う。

イメージの再作成を行わせたい場合は、docker-compose up --build

デーモンによるバックグラウンド実行の場合は、docker-compose up -d

docker-compose start

作成済みのコンテナを実行するコマンド。 イメージの作成、コンテナの作成はしない。

docker-compose run

こちらもイメージの作成、コンテナの作成、コンテナの実行まで全て行う、が、引数で特定のコンテナを指定し実行する必要がある。 それはこのコマンドがアドホックでの単発実行のためだからである。 引数で指定したコンテナ、およびそれに依存したコンテナを起動できる。

デフォルトではdocker-compose run -ti(stdin(iオプション)、tty(tオプション))と同じであり、コンテナのシェルが表示される

止める系コマンド

docker-compose stop

コンテナを停止するためのコマンド。 作成したコンテナは残る。

docker-compose kill

コンテナを強制停止するためのコマンド。 作成したコンテナは残る。

docker rm

停止中のコンテナを削除するためのコマンド。

docker rmi

イメージを削除するためのコマンド。

docker-compose down

コンテナを停止、削除するためのコマンド。 作成したコンテナは消える。

イメージまで削除したい場合は、docker-compose down --rmi all イメージもボリュームも削除したい場合は、docker-compose down--rmi all --volumes

docker-compose restart

docker-compose stopからdocker-compose startを行うコマンド。

その他コマンド

docker-compose exec

実行されているコンテナのシェルに接続するためのコマンド。

docker ps

起動中のコンテナ一覧を取得。 docker ps -aで停止中含め全コンテナを取得。

docker images

作成したイメージの一覧を取得。

最後に

コンテナ一覧の出力がdocker psからdocker container lsに、 イメージ一覧の出力がdocker images から docker image lsになってたりと、 個人的に1.13以降のコマンドの方がわかりやすいので、頑張って対応表作りたい……。