dockerのコンテナ&イメージ 個人的まとめ
イメージとコンテナの違い、それぞれを作成するコマンドのまとめ。
そのうちちゃんと表やオプションもまとめるつもりですけど、現時点での覚書をまとめておく。
作られるもの
image(イメージ)
rootファイルシステムなどのイメージレイヤーと実行するコマンドや開放するポート設定などの情報であるメタデータの集合であり読み込み専用。
dockerhubなどのDocker Registryからpull
することで取得できたり、
Dockerfileでbuild
したりして自分で作ることもできる。
だからイメージを取得といったり作成したりという。
container(コンテナ)
上で取得したイメージ上に実際に読み書き可能なレイヤを追加し、指定されたプロセスを隔離実行された状態でシステムリソース上で実行すること。 イメージ+読み書き用のレイヤ=コンテナ。
実際に動くものを実行するのはここ、なのでコンテナを実行という。
作る系コマンド
コマンドに関しては、Docker 1.13以降でdocker container ~系のコマンドがサポートされたことで、等価なコマンドがいくつか存在している認識です。 その辺の対応は後で作るとして、いったん知っているコマンドとそれで起こることをまとめます。
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以降のコマンドの方がわかりやすいので、頑張って対応表作りたい……。