docker-composeってなんだろうな、と思ってた。複数のdockerを触るんだろうと思ってるけど、よくわかってない。今回は、docker-composeを触ってみて感じたことを書いておく。
docker-composeを触る
docker-composeを触って見るにあたって、いい感じのチュートリアルを探した。
公式のチュートリアルが秀逸すぎたので、他のチュートリアルをやる必要がないと思った。
興味のある人は、公式のチュートリアルをやってみよう。
Docker Compose — Docker-docs-ja 17.06.Beta ドキュメント
やったこと
公式のチュートリアルに以下の二つがあったので、やって見た。
- docker-composeを使って、flaskとredisを使うアプリを作る。
- docker-composeを使って、djangoとpostgresqlを使うアプリを作る。
それぞれ2つずつのホストが起動する。
公式チュートリアルをやった感想とメモ
とりあえず、公式チュートリアルがすごくわかりやすかった。 印象的なことを書く。
docker-composeはpip installできる
docker-composeってpip installできる様子。
公式にインストール手順でそのように書いてあった。
ということは、docker-composeはPythonで実装されているということ。
PyPIでいうとこれだ。
Githubでいうとこれ。
だからなんだという話ではなくて、「自分のよく使ってるPythonが使われてる!!!」みたいな意味だけです。Pythonだと、コードを楽に読めるから嬉しい。ついでに、tox.iniとかrequirementsを見て、以下のような感想をもちました。
- pytestを使ってた
- pyinstallerでインストーラー化されてた
- dockerってライブラリがあるらしい docker · PyPI
- yamlは、PyYAMLで読み込んでいる様子 https://pyyaml.org/wiki/PyYAML
- signalは、標準ライブラリを使ってた 18.8. signal — 非同期イベントにハンドラを設定する — Python 3.6.5 ドキュメント
思ったこと
開発環境を楽に作れる
redisにしてもpostgresqlにしても、とりあえず空っぽでいいから動かしたい。みたいな要求に答えるDockerのコンテナが用意されていて、それをとりあえずダウンロードして起動したら、redisとpostgresqlに接続できる。
みたいな状況になっていたので、驚きました。すごく開発環境を作るのが早そう。
接続するために必要なのは、公式で指定されているであろう、DBの情報とポートだけだと思う。
開発環境以外の利用用途が想像しにくい
本番環境でdocker-composeって使えるのかな、使う場面あるかな、と思ったけど、あんまり想像できなかった。
本番環境でDockerというのは、何と無くイメージができる。
コンテナを破棄したり起動したりを簡単にしたいときに使うんだと思う。 docker-composeはdockerを複数起動したいときに使うんだと思ってる。
本番で動かしてる時は、一つ一つ停止しできる方がいいような気がするんだけど、どうなんだろう?
deployのときに、まとめて決してまとめて展開する、みたいな使い方をするのかな。
ああ、そういう使い方ならイメージできるかも。
例えば、こんな感じになっていて、一つ一つのアプリが独立したプロセスになっているケース。
こんな状況だと、デプロイするときに、docker-composeを使えばまとめてdeployできる。 みたいなイメージ。
わからないけど。
実際、docker-composeってどういうシチュエーションで使われてるんだろう。
追記
メモです。
docker-composeの環境起動
docker-compose up
はdocker-compose.yml
で定義した環境を起動します。- Dockerfileからdockerイメージを作り直して、コンテナを起動します。