"BOKU"のITな日常

62歳・文系システムエンジニアの”BOKU”は日々勉強を楽しんでます

Docker/Kubernetes(k8s)とは何か?と、それらを使うメリットを整理してみた。

Docker(ドッカー)とKubernetesクーべネティス :略称は k8s = k-eights)とについてを整理します。

f:id:arakan_no_boku:20190223212816j:plain

 

 

Dockerとは?

 

Dockerは仮想環境を作成・配布・実行するためのプラットフォームです。

仮想環境ですけど「VMWare」とか「Hyper-V」とは違います。

Dockerは「コンテナ型仮想環境」です。

対して、VMWareHyper-Vは「仮想マシン」です。

仮想マシンはゲストOSを動かします。

つまり、VMWareHyper-Vは「ホストOS上で、別のOSを動かす」仮想環境です。

対して。

コンテナ型仮想環境はゲストOSを動かしません

Dockerは「ホストOS(例えばWindows10)上でミドルウエアやアプリを動かす仮想環境」です。

この違いについては、さくらのナレッジの記事(https://knowledge.sakura.ad.jp/13265/)の図が分かりやすかったので、引用します。

f:id:arakan_no_boku:20181008153431j:plain

 

Kubemetesは何か。

 

コンテナ群の運用・管理自動化を行うツールです。

Dockerはひとつの仮想環境内ですべて完結させず、例えば、「Webサーバーコンテナ」「データベースコンテナ」「WordPressコンテナ」みたいに分かれているものを組み合わせてシステムを動かす使い方が推奨です。

当然、結構な数のコンテナを管理・運用することになるので

  • アプリケーションコンテナを運用環境にデプロイする
  • 稼働中のアプリケーションコンテナ数を増減させてスケールする
  • バージョンアップ等で追加機能を提供開始する
  • 各コンテナのハードウェアの利用率を制限して稼働率を高くする

などを効率的にやる必要がでてきます。

この辺の自動化をサポートするが、Kubemetesです。 

コンテナの数の多い大規模システムでのメリットは計り知れないと思います。

20億個ものコンテナを乗せているGoogleみたいに・・。

KubemetesはGoogleが設計したのは、さもありなんです。

www.publickey1.jp

とはいえ。

個人的には・・Kubemetesは今のところ、あまり恩恵をうけることはなさげです。

仕事でそういうのを請け負う可能性もゼロではないですが、それなら、その時に覚えればよい話なので、ここからは「Docker」に絞って整理します。

 

Dockerを使うメリット

 

Dockerのメリットでよく書いてあること。

  • 本体をインストールしてあれば、使いたいアプリケーションやミドルウエアが動くイメージファイルをダウンロードしてくれば、即、動かして使える。
  • 仮想マシンと違い、ゲストOSのオーバーヘッドがないので、軽量で高速に動作する。

などなど。

そこはよくわかりますし、十分なメリットだと思います。

でも。

最近はWebサーバーとかデータベースとかのインストールや環境構築も、それほど大変ではありませんから、単に初期設定だけのことなら、それほどメリットは感じません。

 

企業での実運用ではメリットが多い

 

ですが。

企業等で利用するシステムの実運用をベースに考えてみれば、色々とメリットが多いことがわかります。

例えば、こんな点。

  • Dockerイメージの共有によって、メンバ内の開発環境のズレを防止できる。
  • 開発環境で動作確認済の環境を、そのまま本番環境にデプロイできる。
  • アプリケーションのバージョンアップをコンテナを差し替える形で行える。

特に2番目はいいですね。

実際、開発時の各自の動作確認はWindows環境で、本番環境がLinuxというパターンはよくあります。

その場合、開発環境から本番環境にデプロイした時に、同じバージョンのミドルウエアで同じ設定で構築しても、なぜか環境による差異がでて、運用テスト中にあわてて修正する・・なんてことがままあります。

なので、Dockerを使うことで開発・テストを行った環境を、そのまま本番環境にデプロイすることで環境による差異の発生を減らせるなら、保守・運用面では非常に大きなメリットがあります。 

f:id:arakan_no_boku:20181008215853j:plain

 あと、バージョンアップとかの時もそうですね。

開発環境を新バージョンのコンテナにして、十分にテストしたものを、そのまま本番環境にうつして、本番環境の設定の「コンテナ名称」を新バージョンのコンテナに書き換えればバージョンアップリリースができる。

これも、通常手順でシステムを停止して、バージョンアップして、再起動して動作閣員して・・なんてやっている現行手順から見れば、非常に楽でリスクも減らせます。

 

企業等で継続的に保守・運用していかないといけないシステムの基盤として考えれば、Dockerによるコンテナ化のメリットは大きなものがあるのは間違いなさそうです。

 

Windows10HOMEエディションではDockerをインストールできない

 

実は、Windows10にDockerをインストールして使おうと考えてました。

tensorflowとか、最近はDockerイメージが公開されているものも多いので、それらを使いたいな・・というのもあります。

それで、ダウンロードしてやってみたのですが・・。

自分のPCは「Windows10のHOMEエディション」なので、残念ながら、Dockerをインストールできませんでした。

 

インストーラを動かすと、こんなメッセージがでてきて終わりでした(´;ω;`)。

f:id:arakan_no_boku:20181010000625j:plain

Windows10Pro か Windows10Enterprise か、Windows server 2016 RTMが必要だよということです。

Hyper-VをDocker for windowsは使うみたいです。

だから、それがはいってないHOMEはダメだよということのようです。

インストールに失敗してから、ドキュメントをよく読んでみると、ちゃんと書いてありました。

docs.docker.com

最初から読めよな!って感じです。

でも、こちらにはHyper-Vがない環境の場合の逃げ道も書いてあります。

If your system does not meet the requirements to run Docker for Windows, you can install Docker Toolbox, which uses Oracle Virtual Box instead of Hyper-V.

 つまり

システムがDocker for Windowsを実行する要件を満たしていない場合、Hyper-Vの代わりにOracle Virtual Boxを使用するDocker Toolboxをインストールできる。

 ということのようです。 

Docker Toolbox

 

docs.docker.com

こちらに書いてあるのですが

Legacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker for Mac and Docker for Windows. We recommend updating to the newer applications, if possible.d Kitematic.

従来のデスクトップソリューション Docker Toolboxは、Docker for MacとDocker for Windowsの要件を満たさない古いMacおよびWindowsシステム用です。 可能であれば、新しいアプリケーションにアップデートすることをお勧めします。

だそうです。。

こちらの記事を見る限り、簡単にインストールできそうでもあります。

qiita.com

でも、この時点でかなりテンションは落ちていて、そのうち廃止されそうなDocker Toolboxをいまさら使ってみる気にはなれず、やめました。

 

まあ。

こういう失敗話も情報のひとつ・・ということで(笑) 

ではでは。