ECSをなんとなく理解したい(その2)
docker-composeについての理解
コンテナを(1つでもいいけどね)よしなに管理してくれるものっていう認識
基本的には複数コンテナをまとめるものだと理解してる
で、何を気をつけないといけないのかっていうのはコンテナ間の名前解決の部分
注意事項っぽいやつ
- Dockerは同一のネットワークに所属してる場合、名前で通信を取ることが可能
- composeではup時に既存のnetwork指定がない場合,デフォルトでネットワークを作成するため通信が取れる
- dockerインストール時のデフォルトbridgeでは名前解決してくれない
- もしくは自分で作成も可能
- 以前はlinkを使っていたがこちらは非推奨になってるので使わないこと
- composeもバージョンがあって機能増えたりするので追従する必要はあるっぽい
- ある程度互換性は考慮されてるみたい
- docker-composeコマンドはdocker-compose.ymlファイルがあるところで使ったほうがいちいちファイル指定のオプションがいらないので楽だとは思う
awesome-compose/nginx-golang at master · docker/awesome-compose · GitHub
注意事項を踏まえた上で、上記githubのfrontend/nginx.confをみると
proxy_passのbackendとdocker-composeのservice name(services:の下に書いてあるやつ)が
同じになってることがわかる
# networkの確認 docker network ls # 実際に挙動の確認をしてみる cd ~ git clone https://github.com/docker/awesome-compose cd awesome-compose/nginx-golang docker-compose up -d curl localhost # 専用にnetworkが作成されてるか確認 # 確認後、イメージ等削除(dockerでの`--rm`オプションっぽい感じ?) docker network ls cd ~/awesome-compose/nginx-golang docker-compose down # nginx.confのbackendの部分を適当な文字列に変更後リビルド # upstreamでホスト名が見つからないためエラーになることを確認 # 確認後 Ctrl+C でキャンセルすること cd ~/awesome-compose/nginx-golang docker-compose up --build # 停止と停止したイメージの削除 docker-compose down # docker-composeでやってくれてるのは # dockerコマンド的には以下となる # まずはいろいろごっそり全部初期化 docker system prune -a # nerwork作成(network名は適当) docker network create test # イメージ作成 cd ~/awesome-compose/nginx-golang/backend docker build -t nginx-golang_backend:latest . cd ~/awesome-compose/nginx-golang/frontend docker build -t nginx-golang_frontend:latest . # docker-compose.ymlにdepends_onがあるのでbackendから起動 # --nameでの指定部分がdocker-compose.ymlでのsevice nameにあたる # デフォルトのbridgeネットワークで接続したい場合は非推奨の--linkオプションをつかうと # frontendのコンテナは起動可能 docker run -d --rm --name backend --network test nginx-golang_backend # frontendを起動 docker run -d --rm -p 80:80 --name frontend --network test nginx-golang_frontend # 接続確認 curl localhost # おそうじ docker system prune -a
まとめ(みたいなやつ)
Dockerに限ったことではないけども、dockerとdocker-composeのバージョンで
書き方や機能が増えていたりするので、気をつけないといけない
今どき?のものだとfrontとbackendと機能がわかれてることが多いので
dockerでやるよりdocker-composeで管理したほうが何かと楽
ここらへんまではローカルでの検証環境構築にも使うかなと思う