詳細はこちら
全体像
全体像(長編)
安全にDocker
Dockerネットワーク
Docker複数サービス
結局何してるの?
時代の変化です。もっとこうしたらええやんがDockerの時代を呼びました。
おそらく様々な現場で、以下が当たり前でした。
- ローカル開発環境は自PC
- 検証、商用環境はLinuxのサーバ
- APサーバにリリースして、1アプリ1サーバ
これは1つの大きなシステムに対して1つのVMリソースをまるごとあてがっており
まぁいいんですけど、、
昨今、マイクロサービスが流行っており、AWSでもマイクロサービスを推奨している感じです。
そこで、複数の小さめなサービスを組み合わせて運用したいというときに
1つのVMをマンションとし、部屋割りをしてアプリを複数運用したらいいじゃんという
まぁVPSみたいな発想を
構築済み環境を丸ごとお届けが目的だったDockerコンテナで部屋割りしてやろう
という使われ方で実現してる感じです。
元来のDocker
VMと違い、ホストOSのカーネルをコンテナ間で共有するので、ここにあるように軽量ながらも、OSに依存しないコンポーネント化、カプセル化、オブジェクト指向、、、etcが実現できるという素敵アイテムです。
もろこのコンテナのイメージを持てばよい。

パソコンのなかに↑コレが入ってて、コンテナ1つ = パソコン って認識でOK
仕組みだどうだは、結局使う上で気にしない
増えまくった結果
コンテナ自体めっちゃいいじゃん!!!じゃあいっぱい組み合わせて使おうぜ!!
ってなるでしょ
そうなると、コンテナ間で通信したりすることになる。例えば
コンテナ1がJavaアプリ、コンテナ2がCアプリで、互いにlocalhostで起動したとして
ホスト上のポートを使って通信する

2個だからまだいいが、これがいっぱいあるとポートぐっちゃぐちゃになる。
じゃあ接続情報であったり、コンテナの依存関係たちを綺麗にまとめちゃおう!
ということで、
Pythonがインデント最強!括弧なんていらねぇ!で流行ったように
同じような書き方のymlまたはyamlファイルで定義する発案がなされる
こんなかんじ
DockerCompose
DockerComposeという、Docker強くしてやるぜヤツを使うとymlで複数コンテナを一括定義でき

こんな感じに、より簡単にまとめられるようになる
ただ、コンテナ1つはやっぱりパソコンなのである
いくらマイクロサービスといってもアプリによって、サイズが違うから
全部のコンテナが同じサイズでは、無駄があったり、サイズ不足があったりする
それに冗長化構成したければ、これ複数枚書くの。。。?
ただ複数コンテナを一括定義できるだけじゃたりない!!もっと便利にしたい!!わーわー!!
オーケストレーション
はい。人類はわがまま。Dockerを極めようぜという猛者たちのおかげで
コンテナオーケストレーションツールが台頭しました。
これはコンテナのスケーリングやクラスタ構成などを自動(設定できるが)でガツガツやってくれる便利ツール。
代表的なのがKubernetesです。当初Googleが作って、いまは別の会社が開発してます。
みんな大好きGoogleが作ったんだから両手あげて飛び込みましょう。Googleは世界征服してます。
ここまで具体的なことを一切書きませんでしたが、一連の歴史を理解したうえでkubernetesを使いこなせればよいですね。