Golangで共通の構造体を複数のDockerコンテナで利用する方法
Golangなどの言語を使って、複数のDockerコンテナで連携するようなアプリケーションを作成しています。
そこで質問なのですが、データベースのモデルの構造体など複数のコンテナで共通で利用したいものがあります。そういった場合にどのように実装すればよいのでしょうか。
例えば1つのシステムの中に2つのA,Bというアプリケーションがある場合2つのDockerfileでそれぞれのコンテナを定義しています。この2つのアプリケーションは同様のデータベースにアクセスしているため共通の構造体ModelA
を利用します。
現在、それぞれのアプリケーションA,BにModelA
が定義されたmodel.go
を配置しています。
コードが共通なので1つのソースコードで済むようにしたいのですが、どのように実装すればよいのでしょうか。
考えられる方法として、DockerのコンテキストをA,Bの親ディレクトリにしてA,Bのディレクトリの兄弟ディレクトリに共通のライブラリのディレクトリを作成し、そこにmodel.go
を配置する方法があります。
しかしこの方法では例えばコンテナAに必要のないアプリケーションBのソースコードも含まれてしまいます。
もう1つの方法として、共通ライブラリを別のリポジトリにして、ビルド時にgo get
で取得する方法を考えました。この手法はパブリックリポジトリに共通ライブラリがある場合は簡単に実装できるのですが、プライベートリポジトリの場合は少し複雑になってしまいます。
そこで、現在はそれぞれのコンテナに共通のコードを書くという方法を採用しています。
他に良い方法がありましたらお教えいただけますでしょうか。