【Docker講座1】イントロダクション【10:56】

StackOverFlow 2020 Developer Survey

【はじめに】
0:00
はいどうも、くろかわです。Docker講座 インドロダクション、早速始めていきましょう。

全てのエンジニアが学ぶべき技術「Docker」。現在、Dockerが全くわからなかったり、Docker学習中だけど、いまいち使い方わからない、という方いるかと思いますけれども、重要なのは、いつでもDockerを触れるように準備をしておくこと、これ、最初に伝えておきたいと思います。

【Dockerを学ぶ理由】
00:18
その理由としては、こちらをご覧ください。
こちらは、スタックオーバーフローの2020年の調査になりまして、開発者向けのアンケートになります。最も興味、関心があるプラットフォームは何か、の質問結果です。

1位はLinux、2位がDockerです。3位も、Docker関連と言っていいでしょう、コンテナオーケストレーションツールのkubernetes(クーべネティス)ですね、4位がAWSとなっており、Docker関連の技術が2位、3位となっております。開発者の興味、関心は、コンテナとクラウドが高い、という結果になります。

こちらは、プログラミング学習中の方に向けたアンケート、是非とも学びたいプラットフォーム技術のランキング結果です。1位、もちろんDockerですね、2位がAWS、3位がkubernetes(クーべネティス)となっております。

これからの時代ですね、クラウドとコンテナ、これ必修科目の技術という認識、世界中に広がってきているのが、このアンケート結果からも伺えるかと思います。

ではDockerは、なぜこんなにも世界中の技術者の間で、これ間違いない!と大人気で盛り上がっているのでしょうか。

その理由は、新しい技術が登場する理由にヒントがあります。いつの時代も問題解決が伴ってきました。

【システム構成の歴史:ベアメタル】
1:19
ではここからは、ちょっとしたシステムの構成の歴史の話なんかも織り交ぜて、Dockerの特徴につなげていきたいと思います。

最もレガシーなシステムの構成は、直接Linuxとか、Windowsの上にアプリケーションを構築する、というものです。俗に、ベアメタルとも呼ばれたりします。CPUやメモリ、ストレージといったハードウェアの上にアプリケーションを構築するものです。

その上にLinuxやWindows、もしくはmacといったOSをインストールします。

OSの上にアプリケーションをインストールする、従来式の形ですね。一つのOSの上に複数のアプリケーションをインストールするのが一般的です。これ正直ですね、リソースに無駄が多いです。

【システム構成の歴史:仮想化】
1:55
2000年ごろから、サーバー仮想化の時代に移行します。

CPUやメモリ、ストレージといったハードウェアを用意し、OSの代わりに、ハイパーバイザーをインストールします。これはサーバーを仮想化する役割があるソフトウェアでして、XenとかHyper-V、VMwareなどが有名です。

ハイパーバイザーにWindowsやLinuxといったOSをその上にインストールしてですね、仮想的に一台のサーバーを実行できるというもの、この仮想的なOSをゲストOSと呼びますし、仮想的なサーバーをバーチャルサーバーと呼んだりします。

ハイパーバイザーは複数のバーチャルサーバーを実行することができ、EC2などの仮想サーバーですね、AWS上も、このような形でバーチャルサーバーとして実行されています。例えば、OS1はwebサーバーとして、OS2はバッチサーバーとして、OS3はデータベースサーバーとしてソフトウェアをインストールなどして、設定をすればですね、従来型のベアメタルと比べていただきたいんですけれど、物理マシン3台ベアメタルを使うよりも、非常に低コストで効率的にシステムを運用することができますよね。

2:55
ただ、仮想マシンも完璧ではありません。一つのOSの上に複数のアプリケーションを同居させる際の、問題点ですね、ここでおさらいしたいと思います。

まず、パッと思いつくのは、同じ場所にソフトウェアをインストールできないといった問題点です。ご覧のように、アプリケーション1がインストールされている場所に、アプリケーション2を別の場所にインストールするなどの調整が必要になってきます。

もう一点、ここが大変重要なんですけれども、アプリケーション1と2で同じフレームワークを使っている場合、例えばアプリケーション1の都合で、このフレームワークをアップグレードした際に、アプリケーション2に想定外のエラーが発生してしまうという問題点です。このように、仮想サーバーも完璧ではなかったわけですね。

【コンテナを使用したシステム構成】
3:33
では本講座のテーマとなる、コンテナについてみていきましょう。

CPUやメモリ、ストレージといったハードウェアの上に、LinuxとかWindows、もしくはmacといったOSがあります。ここはベアメタルと一緒ですよね。そのOSの上に、Dockerエンジンをインストールします。こちらのクジラのキャラクターがDockerの公式キャラクターですけれども、このDockerエンジンの上に、一つのアプリケーションが一つのコンテナとして独立して立ち上がるという形式のものです。なおコンテナのベストプラクティスには、一つのコンテナに一つのアプリケーションのみ入れてくださいね、というものがあります。

では、コンテナの図を拡大してみましょう。アプリケーションの中身はですね、少し詳細にみていきたいと思うんですけども、コンテナは、アプリケーションが動くために必要となる基盤ごとまとめております。コンテナの中に、アプリケーション以外の部品も入っている、というイメージです。

この基盤とはライブラリやフレームワーク、Linuxの基本コマンドなんかが入っています。要はですね、アプリケーションが動作するためのパッケージを含めてですね、ひとまとめにしている、これがコンテナのイメージです。

あとこちら、最初混乱しがちだと思うんですけれども、コンテナには、ざっくり言いますと、OSも入っています。そうなんです、OSも入っているんです。Linux系のOSですね、例えばCentOSだったりUbuntuだったり、また軽量のLinuxOS、Alpine Linuxなどが入っています。

ただし、仮想マシンと違って、丸ごとOSが存在しているのではなくて、OSのカーネルは、土台となるOSとカーネルを共有しているんですね。カーネルとはざっくり、ハードウェア寄りの、基本プログラムだと思ってください。

5:00
具体的にみていきましょう、そうするとわかりやすいかと思います。
例えば、
一つ目のコンテナはCentOSの上にですね、Spring Bootを入れて、Javaのアプリケーションを動かしている、この一つのコンテナパッケージ。
二つ目は、Alpine Linuxの上にDjango、Pythonのアプリケーションがあります、と。
三つ目は、Ubuntuの上にMySQLをコンテナ化しています、という感じ。

この三つのコンテナを動かしている土台のOSはCentOSとしましょう。これ、仮想マシンとね、同じように見えるかもしれませんけれども、仮想マシンはOSのカーネルを含めて仮想化しているものに対してですね、コンテナは、Dockerエンジンの機能を通じて、カーネルをホストOSと共有しているんです、ここが大きな違いです。なのでサイズが軽量、動作が高速というわけです。

ただ今の段階では、ざっくりとですね、このイメージだけ抑えていただくのみで、結構です。

【コンテナの特徴】
5:48
コンテナは、仮想マシンと比べて、何が違うか、二つあります。

・動作が高速であること
・サイズが軽量であること

ていうことを覚えておいてください。

また、コンテナの特徴として次のものがあります。

・一つ一つのコンテナが独立しており、他のコンテナ影響を与えない、ということ。
・Dockerが動く環境があればどこでも動く、つまり持ち運びがしやすい、ポータブルであるということ。

6:11
さて、大事なのでもう一度繰り返しておきましょう。コンテナのベストプラクティス、何があるか、覚えていらっしゃいますでしょうか。

一つのコンテナには、アプリケーションは一つにしましょう、というものがあります。複数のアプリケーションをですね、もし仮に入れてしまったらですね、仮想サーバーの抱えていた問題と同じことになってしまいますからね。

ここまで説明しておいてなんですけれどもね、当面はカーネルがどうこうとか、詳細な仕組みにまで、今の段階で覚える必要は全くありません。実際に動かしてみて、ある程度学習が進んだところで振り返っていただいた方がより理解が進むんじゃないかと思います。

【コンテナ技術と今後】
6:45
さてここからも重要な、未来の話です。ここからは、コンテナは次世代のマルチパブリッククラウドの時代を見据えてもですね、エンジニアは絶対に使えるようになっておくべき、というお話です。

突然ですが皆さん、10年前と比べてスマホアプリとかWebサービスって、今なんかめちゃくちゃ増えてきたと思いませんかね。

昨今、インターネット、スマートフォンの普及などによってですね、Webサービスやアプリが大量に、しかも短いサイクルで、どんどんどんどんリリースされるようになってきました。2015年あたりでしょうかね、AWS、GCP、Azureのパブリッククラウドも、どんどん企業に普及してきました。今ではもうお堅い銀行系、政府なんかのシステムも、パブリッククラウドが使われております。

そこで自社のデータセンター、オンプレミスと言いますけれども、自社のデータセンターとAWSなどのパブリッククラウドをですね、こちらを専用線で繋いでしまって、パブリッククラウドをあたかも、自分の会社のデータセンターの一部であるかのように拡張して、オンプレのいいところ、クラウドのいいところ、のいいとこ取りをしていく、ハイブリットクラウドという形態も珍しくありません。AWSもDirect Connectという専用線で接続をするサービスがありますよね。

もうひとつ、システムを運用する形態として、昨今では、自社のデータセンターの中で、パブリッククラウドのような環境を自前でつくちゃおうという、プライベートクラウドの導入も増えてきています。

例をあげますと、OpenStack、Nutanix、VMwareからもですね、プライベート基盤の構築に向けたソフトウェアが普及し始めています。

8:13
ここで覚えていただきたいこと、要はですね、アプリケーションを動かす環境は、どんどんどんどん、時代が進むにつれてカオスになってきているんですよね。様々な言語のアプリケーションが、様々な環境で実行されているという現実です。

エンジニアの技術レベルが上がっていくと、この先はですね、未来予測なんですけれども、複数のプライベートクラウドやオンプレミスを組み合わせた、マルチハイブリッドクラウドまで発展すると予想します。

例えば基本的にはオンプレで動かしていますけれども、新規システムはAWSでリリースをすると、ビックデータ処理はGCPといったように得意分野を分けていて、どんどんカオスになっていくと。

そうなると、AWSとGCPで操作方法がなんか違うし、ローカルの開発環境で開発して動いていたアプリケーションが、別の環境に持っていって動くようにするには、非常に敷居が高くなります。

そこでコンテナが登場してくるんですね。

9:05
コンテナの特徴に、Dockerのエンジンがインストールされているものがあれば、どこでも動く、というものがありました。アプリケーション以外のインフラ部分は、プラットフォームごとに差異がどうしても生まれてしまいますけれども、アプリ自体は、問題なく管理できる可能性が高いと思いませんか。

9:21
さてこれから学んでいくのは、Dockerそのものを理解するのはもちろんのこと、複数のコンテナで一つのアプリケーションをまとめて作成するDocker Composeの理解ですね、そして、コンテナがどこでどれくらい動いているか、コンテナを管理するための専用のツールですね、コンテナオーケストレーションツールを理解していきます。

コンテナオーケストレーションツール、様々ありますけれども、AWSのサービスであるECS、Elastic Container Serviceですね、こちらを学んでいきます。

学習者の中には、いきなりECSから学び始めようとする方がいらっしゃるようですけれども、まずはDockerそのものの知識を飛ばしてしまうと、ECSを学習していてもすぐにつまずいて、挫折してしまいます。Dockerそのもののコンセプトの理解が非常に重要です。また、市販のDocker関連の書籍、読んだだけで一発で理解できる方は非常に稀だと思っておいてください。

事前に言っておきますけれども、少しね、何度か躓くことがあるのは、どうしてもあります、それは覚悟しておきましょう。

しかしですね、安心してください、この講座では、サンプルアプリを使っていって、Dockerの基礎から学んでいきますし、カリキュラムがそのまま進んでいってECSを理解するための効率的な学習順序を組み立てていますので、安心してください。

【まとめ】
10:29
Dockerは今後5年、10年にわたって、エンジニアには必要不可欠な、常識レベルの技術であり続けることは、間違い無いでしょう。そしてクラウドの王者、AWSのコンテナオーケストレーションサービスである、AWS ECS。これらを組み合わせた強力な武器を詳細まで理解し、手に入れていただくのをゴールとする講座です。

それでは次回から、いよいよDockerをより具体的に理解していく講座に続きます。

通知
通知対象
0 Comments
新しい順
古い順 得票数
Inline Feedbacks
コメントを全て表示
コメントする

コメントする