【雑記】Dockerとマイクロサービス


前置きとモノシリックアーキテクチャ

だいぶ前に「マイクロサービスアークテクチャ」という名前は聞いたことあるものの、具体的な例がイメージできなかったです。

でも、今回何も知らずにDockerに手を出しました。
で、なんかアプリを作ってみたいと思って、
「せっかくだから、フロントはAngularで〜、サーバーサイドはGolangで〜」
とか呑気に考えていたところ、

。。。あれ? Dockerfile のFROM(ベースのイメージ?)って、
1個しか設定できない?!

Goは「FROM golang:1.9」だし、
Angularは「FROM node:10.8.0-stretch」とか書くの?

え?え?

ってなりました。

長年Javaとかでやってきた自分としては、1つのプロジェクトのなかに、サーバの処理も画面(htmlやcss、js含め)も全部入ってる、というのが普通でした。
で、それらをeclipseとかでボーンって全部開いて全部触る、的な。

なんなら、それら全部が一つのサーバで管理されていて、
下手したらDBすら1台の物理サーバにはめ込まれてしまう。

こんなのが モノシリックアーキテクチャ というのだそうです。
モノシリック(monolithic)とは英語で「一枚岩」っていう意味の形容詞だそうな。
そのままのイメージですね。
一枚岩のようなサーバの上に、全部乗っかってる。
全部のせ。

じゃあ、そもそもマイクロアーキテクチャってなんなの?

マイクロサービスアーキテクチャ

これについては、以下を参照ください。
(きっとこっちをみてもらうとめっちゃわかりやすい)

マイクロサービス(Microservices)は、個々に開発された複数の小さな(マイクロ)サービスを連携させて管理、運営をおこなっていくソフトウェアのアーキテクチャです。
ソフトウェアのエンジニアであるマーチン・ファウラー氏らによって書かれた2014年の記事に登場して以来、一種のバズワードとして知られるようになりました。
https://ec-orange.jp/ec-media/?p=23458

Dockerはよくよく調べてみると、マイクロアーキテクチャを実現するための重要な要素だったようです。
訳もわからないまま、それとは知らずマイクロサービスの入り口に立ってたってことですね。

で、本題に戻る。
じゃあ、AngularとGoでDockerを使うためには、どんな構成にすべきなのか?
ってなったらこんな感じなのでしょうか?

なんか、フロント、サーバサイド、データ、ってな感じで小さい単位になった気がする。。。
フロントとサーバサイドを通信させる、っていう頭はなかったので、目からウロコでした。

というわけで、もう少し色々勉強してアプリ作成まで頑張ります!