詳細はこちら
全体像
全体像(長編)
安全に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を使いこなせればよいですね。