毎日学習記録 9/1 dockerの環境について考える
今日学んだこと
Docker使う際のディレクトリ構成について考える
内容
概要
最近、仕事や趣味どちらでもDockerを使った環境構築をすることがあり、どのような構成にするのがいいか考える機会が多かった。
9/1時点でこの構成がいいのではないかと考える構成について記載したいと思います。
注意) まだ、自分も本番は一旦構築したところなので、運用するなかで変更する可能性があります
前提
- プロダクションでDB以外のコンポーネントが複数動作する
- docker-composeを利用する
- GCPを利用し、CloudRunでデプロイを予定している
構成
本番の構築イメージ
ディレクトリ構成
|-- docker-copose.yml
|-- env
|-- local.yml
|-- production.yml
|-- web-app (submodule)
|-- Dokcerfile
|-- api-app (submodule)
|-- Dokcerfile
|-- db
ビルドについて
今回はCloudRunにてビルドを行う
- web-app
- api-app
それぞれでmaster push時のイベントを設定しビルドを行う。
環境変数などは、CloudRun上に記載しているがdocker-composeで動作させる際は、envのディレクトリにあるファイルをロードすることで、環境ごとに変更を想定している。
今回の課題点
今回、dockerリポジトリにそれぞれのアプリケーションをサブモジュールにして構成している。
現状CloudRunでは、それぞれのリポジトリごとにビルドして展開するため問題はおきていないが、 GKEやECSなどを使った際に、docker-composeを使って展開することを想定する場合、サブモジュールをアップデートなどどのようにするか考える必要があるのではないかと思う。
ただ、今は必要がない項目なので上記構成にて進めていき、変更があれば追記していきたい。
今までやったことのあるパターンと反省
- 複数アプリケーションが動作する中で、アプリケーションの配下に入れる
|– docker |– src
このようにすると、単一のアプリケーションの時は問題ないが、今回のように複数アプリケーションを動作させる場合、
- docker networkを使用するなど対策しないと、別リポジトリのアプリケーションを動作させられない
- DBなど共通部分はいいが、web-appなど個別のアプリケーションを立ち上げるためのdocker-composeを用意するなどしないといけない
※ ただし、MVCで単体のリポジトリで動作する場合は、該当の構成でも問題ないこともあるので、そこはプロジェクトに合わせて判断が必要
- そもそもディレクトリが別
これは、何となく察せると思うがそもそも管理がしづらいし、docker-syncは絶対パスでの指定のため、個人ごとにディレクトリが異なる場合、かなり厄介になってしまう。
|– docker-repo
|- docker-compose.yml
|- docker-sync.yml
|– web-app
|– src
|– api-app
|– src