この記事はSFC-RG Advent Calendar 2019の12日目です。
対象読者
「docker-compose upってなんだよ?トレンドに取り残されたくねええ!!」という人々
トレンド入りしたっけ?
時代はdocker-compose up
昨日、あるツイートが投稿されました。
新人Vtuberの希来里パイです
— 希来里パイ / 自己紹介動画あげました @新人Vtuber (@piepielielie) December 11, 2019
自己紹介動画を作りました
この度xxxxxxを始めさせていただきます
至らない点もあるかと思いますがどうぞお楽しみくださいませ
⬇︎⬇︎⬇︎https://t.co/05rcTye2CV#自己紹介 #ππ来来 #はじめまして #新人Vtuber #Vtuber #Vtuberはじめました #Awaken #拡散希望 pic.twitter.com/5beqhH3HUk
とりあえず見ればわかります。VTuberがDockerで動く時代が来たようです。
了解!docker-compose up!
で、そもそもdocker-copose up
って何をするものなのよっていう疑問。お答えしましょう。
docker-composeとは
Dockerという、様々なソフトウェアを動作環境ごとパッケージングして、どんなパソコンでも手軽に動かせるようにした仕組みがあります。
docker-composeはそのDockerのパッケージを複数組み合わせて動かす時に使うものです。
ちなみにDockerのパッケージの事をイメージと呼びます。
docker-compose upが何してるのさ
docker-compose up
はdocker-composeを使ってイメージを元にソフトウェアを動かす際に用いるコマンドです。雑に言えば起動コマンドです。
イメージを元に起動した物をコンテナと呼びます。イメージとコンテナの関係は金型と生成物の関係に似ていますね。
少しCUIに触れたことのある人「いや待てよ?docker-compose up
以外に何か引数がないと、どんなイメージを元にコンテナを作ればいいのかわからないじゃないか!」
いい質問ですねぇ。実際、docker-composeを使う時は特に引数は指定しません。
なのにdocker-compose up
だけで目的のコンテナ達が期待通りに動きます。
地獄からの使者、docker-compose.yml
docker-composeがどうやって起動するイメージを把握するのか。答えはdocker-composeを使うディレクトリにあります。
docker-compose up
を使うと、使ったディレクトリにあるdocker-compose.ymlというファイルと、docker-compose.override.ymlという二つのファイルを(存在していれば)自動で読み取ります。
これらのファイルにどんなコンテナを動かせばいいのかが書いてあるという訳です。
優秀な点として、docker-compose.yml達にイメージの名前を書いておけば、例えイメージが手元になくても、イメージが必要になった段階で自動でダウンロートして来てくれます。
つまりdocker-compose.ymlさえ手に入れられれば、お手元のパソコンで希来里パイが動かせる。
あなたはn人目の希来里パイです
ここまで読んできた読者、鋭い人なら気づくかもしれません。
???「コンテナはイメージを元に起動するもの。つまりdocker-compose up
をする度にそれまでの記憶を失って希来里パイが発生する?なにそれエモい。」
実際コンテナはデータの保存はしてくれません。イメージという金型を元に生み出される存在なので、docker-compose down
という、作ったコンテナを削除するコマンドを実行すれば、彼女は電子の海に消えてしまいます……
そうは問屋がおろしません!!
Dockerはそういった点もきちんと考慮しています。コンテナはボリュームと言う、データを保管する為の場所を持てるようになっているのです。
このボリュームはどんなコンテナでも接続できるようになっているので、例えdocker-compose down
によりコンテナが消えたとしても、新しく生まれたコンテナがボリュームに再び接続することで、保管した大切な記憶が無事、次の希来里パイに引き継がれるという訳です。「逆にエモいな?」
強引にまとめ
これで今日から君も「docker-compose up完全に理解した1」視聴者だ!!!
筆者「docker-compose up
について触れて欲しい機能、項目があればコメントいただければどんどん追記します。」
-
"完全に理解した"とはチュートリアルを流し読みしたレベルなので多分名乗っていいはず。 ↩