docker-composeを使ってマイクロサービスをやってる時に便利だったデバッグ手法
現在のプロジェクトで便利なデバッグ手法出てきたので備忘録として記載します。
今回例に挙げるフォルダ構成とdocker-composeファイルを下記に記載します。
フォルダ構成
workフォルダがrootでその下に、それぞれのマイクロサービスのdocker-compose.ymlがある感じ。
app開発するならappに移動してdocker-compose up。
analyze開発するならanalyzeに移動してdocker-compsoe up。
work └ app ├ docker-compose.yml └ migration ├ docker-compose.yml └ analyze └ docker-compose.yml
docker-compsoeファイル
appマイクロサービス
appはバックとフロントどっちも入ってるRailsみたいなのを想像してください
appの開発に使用するdocker-compsoe.ymlを記載します
version: "3" services: migration: image: xxx container_name: migration tty: true app: build: xxx volumes: xxx container_name: app analyze: image: mock_xxx(openAPIから作ったmock) container_name: analyze
migrationマイクロサービス
migrationはRailsのmigration機能を引っこ抜いて単体で動かせるようにしたのを想像してください
migrationの開発に使用するdocker-compsoe.ymlを記載します
version: "3" services: migration: volumes: xxx container_name: migration tty: true
analyzeマイクロサービス
analyzeはappマイクロサービス から叩かれる分析用のAPIサーバーを想像してください
analyzeの開発に使用するdocker-compsoe.ymlを記載します
version: "3" services: migration: image: xxx container_name: migration tty: true analyze: build: xxx volumes: xxx container_name: analyze
問題点
例で挙げたようなdocker-composeファイルを利用したマイクロサービスの開発は連携部分をチェックする事が多くなるかと思います。
連携部分をチェックする時に、都度ビルドしてイメージで固めてタグ付けてdocker-composeファイル修正するのが非常に面倒です。
具体的には下記のような要望を満たしたいのです。
新規のmigration回しながらappで確認したい
analyzeで修正した内容をイメージで固める前にappで確認したい
analyzeをmockでなくて実体で起動してapp側で確認したい
そこで以下で紹介するデバッグ手法を開発に取り入れました。
デバッグ手法
イメージではなく実体でデバッグしていけるようにdocker-compose.debug.ymlファイルを作成します。
docker-compsoe.debug.ymlファイル
appマイクロサービス
migrationとanalyzeを実体で起動できるようにします。 パス指定を環境変数にします。
version: "3" services: migration: build: ${PATH_TO_MIGRATION} volumes: - ${PATH_TO_MIGRATION}:xxx container_name: migration tty: true app: build: xxx volumes: xxx container_name: app analyze: build: ${PATH_TO_ANALYZE} volumes: - ${PATH_TO_ANALYZE}:xxx container_name: analyze
他マイクロサービスを実体で起動する時は以下のコマンドを実行します
PATH_TO_MIGRATION=../migration PATH_TO_ANALYZE=../analyze docker-compose -f docker-compose.debug.yml up
これでanalyzeやmigrationをイメージで固めなくてもフォルダをいじっただけで即反映される環境が出来上がります
migrationマイクロサービス
連携部分がないのでdocker-compose.debug.ymlを作成する必要はありません。
analyzeマイクロサービス
migrationを実体で起動できるようにします。 そパス指定を環境変数にします。
version: "3" services: migration: build: ${PATH_TO_MIGRATION} volumes: - ${PATH_TO_MIGRATION}:xxx container_name: migration tty: true analyze: build: xxx volumes: xxx container_name: analyze
他マイクロサービスを実体で起動する時は以下のコマンドを実行します
PATH_TO_MIGRATION=../migration -f docker-compose.debug.yml up
この手法を取り入れてから実体で確認できるようになったので開発効率も向上し楽になりました。
1人の人間が複数マイクロサービス を担当していて確認作業を実施する回数が多い場合、効果を発揮するかと思います。