へっぽこITエンジニア@名古屋のブログ

Follow me on GitHub

Docker、k8sまとめ[第1回] Docker、k8sとは

Dockerとk8sを最近遊んでいます。 ここでは、学んだことを少しずつまとめていこうと思います。

今回はDocker(コンテナ技術)など最近注目されていますが、
Dockerとはどういったものなのか、なぜ注目されているのか、
またk8sとは何なのかをまとめます。

目次

Dockerとは

Dockerのまえにコンテナについて コンテナとは、仮想化技術の1つで、アプリケーションと動作環境をまとて管理できます。

Dockerは、Docker社が開発している、コンテナを管理するソフトウェアです。
なんかコンテナ=Dockerみたいに感じてしまっていた(‘ω’)恥ずかしい。

WindowsのOSが動くコンテナとLinuxのOSが動くコンテナがあり
Dockerは基本Linuxのコンテナです。
ただ、Windowsのコンテナもできて切り替えられるとか。詳細は知りません・・・
また勉強します。

以降はコンテナ一般の話というよりDockerに絞って話していきます。

仮想環境なら仮想マシンとかもあるとおもいますが、
そういった従来の仮想環境より軽量で起動が早いです。

理由はよく見る以下の図の通りで、仮想マシンだとホストOSの上にゲストOSがあり
Dockerだとそれがなくなっています。 OSはホストOSのカーネルを利用しています。

Dockerの構造

というより、ホストOSの上にゲストOSを立てて、
その上にDockerEngineを載せることが多い?ので、
起動がOSを含んでいないから早いといったほうがいいのかな?

軽量で起動が早いと、AWSなどのクラウドサービスでは有利になります。
クラウドサービスだと、どれだけリソースを使ったかで料金が決まります。
使えば使うほども料金が増えていきます。
それを減らせるので、Dockerを使うと有利になってきますね。

また、Linuxはとても優秀で、カーネルが一緒で上に載っているフォルダ構成が
CentOSならCentOSとして、UbuntuならUbuntuとして動きます。

なのでコンテナ内でそのフォルダ構成を保持しておけば、別のところに
移しても同じように動くというのです。すごい・・・

Dockerの役割とk8sの必要性

では、Dockerの役割はどこまででしょうか?
基本的には、Dockerは1つのサーバのコンテナを起動するのが役割です。
docker-composeやnetworkなどで、APとDBを連携などはできますが、
以下のようなことは不得意です。

  • APサーバのスケールアウト、スケールイン
  • オートヒーリング
  • 無停止でデプロイ
  • 不具合があった場合の前バージョンへの戻し

そこで登場するのがコンテナオーケストレーションです。

コンテナオーケストレーションとは複数のコンテナを効率的に運用管理するため仕組みのことです。 その代表ツールがKubernetes(ぼくはクバネティスって呼んでます。)略してk8s
8の理由は8文字だからだそうで・・・以降はk8sと書きます。
他にも、Docker Swarmなどがありますが、一番よく聞くのはk8sですね。

しかし、k8sは若干運用が難しいです。なので、そのあたりをクラウドにお任せしましょうということで、
AWSならEKS、GCPならGKE、AzureならAKSといったのが各クラウドサービスに用意されています。

AWSにはAWS独自のECSというのがあります。AWSの他サービスと親和性が高いとか。
ECSのほうが先にあって、EKSを出していたような?

なぜ注目されているか

Dockerの

  • 軽量で起動が早い。
  • 別のところに移しても同じように動く。

k8sで複数のDockerを管理できるというとこから、
今注目されているマイクロサービスというのに
とても相性が良いようです。

マイクロサービスとは、ざっくりいうと独立した機能ごとに小さく作って
それを(疎)連携させてアプリを作るという手法です。

逆がモノリスで、機能をすべて1つのアプリとして 作る手法です。
1つのwarファイルや実行可能なjarファイルとしてWEBアプリを作る感じですかね。

マイクロサービスにすることで、いろいろメリットがるといわれているようです。

たとえば、

  • 機能ごとにリポジトリを分けられるのでチームを分けられる。
  • 独立性の高い機能ごとに分けることで影響範囲を限定できる
  • 機能を小さくすることでリリースを頻繁にできる
  • スケールする際に部分的にスケールできる
    (モノリスだと丸っとスケールしないといけない)
  • 機能ごとに違う言語にできる

ただ、機能ごとに分けてもお互いに密に連携したら、結局影響範囲もあちこちに出てくるし、同じ気もしますが・・・
そこは、設計の腕の見せ所ということでしょうか?
そのあたりは実際にやっていって感じたことをまた書こうと思います。

Dockerにすることで軽量・起動が早いことでポコポコ作れる。
機能を小さく複数をまとめて1つのアプリを作るので、
ツールがないと管理が大変→k8sで管理していくということですね。

まとめ

Dockerは(基本)1つのサーバでコンテナを管理するソフトウェアで、
従来の仮想化と違いゲストOSがなくなっていて軽量
k8sは複数のコンテナを連携・管理するツール

これらにより今注目のマイクロサービスに必須?の技術になっています。

まだまだ勉強中ですが、少しずつ学べて行けたらと思っています。

作成日:2021-06-04  更新日:2021-06-13