nul-point

完全に自分用の備忘録です。

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で管理したほうが何かと楽
ここらへんまではローカルでの検証環境構築にも使うかなと思う