感じたままのイノベな日々

Oracle時代に書き溜めたものたち。

やさしくわかる「Docker基礎」

f:id:mai_naga17:20190411002637p:plain


今まで外部セミナーの参加ブログは書いてきましたが、今回は新しい試みとして、とっっても良い内容だったので、社内勉強会のフィードバックを書いてみようと思います!

★社内勉強会ですが、非公開情報は一切ないということで、講師陣の方にはブログを書くことを事前に許可を得ています!

それでは、どうぞ。

 

Cloud Nativeサービスシリーズ勉強会

全体概要

社内ではこのようにアナウンスされていました。

改めてCloud Native / Container Nativeな技術領域の勉強会シリーズを開催したいと思います。まずは全三回シリーズでDocker、Kubernetes、及びこの技術領域の歴史や市場動向といった話題を取り上げます。

 

■各回アジェンダ

Docker基礎」

    日時:4/9(火)13:00-14:00

    講師:cotoc(@cotoc88

    アジェンダ:Dockerの概要、コンテナ型仮想化の技術的な実現方法、ユースケース

・「Kubernetes基礎」

    日時:4/17(水)13:00-14:00

    講師:Hayakawa Hiroshi(@hhiroshell

    アジェンダ:コンテナオーケストレーションとは、Kubernetesの技術的な基礎、Oracleのサービス

・「Cloud Nativeの歴史」

    日時:4/22(月)13:00-14:00

    講師:Hayakawa Hiroshi(@hhiroshell)

    アジェンダ:Cloud Nativeと呼ばれる技術領域の歴史、市場の動向など

 

■想定受講者

- OCIのサービス群の案件に関わるエンジニア

 

■目標レベル

- この領域における主要なテクノロジー(OSS/非OSS)について、技術的な概要や用途を理解する

- お客さんの言っていることが理解できる。会話ができる

- OracleのContainer Native領域のサービス群や、製品戦略を説明できるようになる

 

なぜ参加したのか?

想定受講者はエンジニアとなっていて、私は完全な非エンジニアなのですが、、、「お客さんの言っていることが理解できる。会話ができる」という状態になりたいと思い、参加しました!そして何よりも、、豪華な講師陣!!登壇を聞けるなんて貴重な機会です。

セミナー全体の建てつけは、Ryusaburo Tanaka(@rewtheblow)さんです。ありがとうございます!

「Docker基礎」内容

全体1時間のアジェンダは以下。

  1. Docker/コンテナ型仮想化とは
  2. Dockerのアーキテクチャ
  3. Dockerの使いどころ
  4. Dockerの周辺事情を知る

でした!

1.Docker/コンテナ型仮想化とは

理解するための前提

アプリケーションを構築する際は、ハードウェアやストレージなどインフラと呼ばれる下の層から準備するということですが、アプリケーションを複数構築する場合、その分ハードウェアリソースが必要になってしまいます。それだと準備するのが大変になってしまうので、、ハードウェアリソースを削減するために、仮想化技術が活用されるようになったということです。そうすることで、複数のアプリケーションを動かす際も、ゲストOSによって分立されるので、競合しないということです。

f:id:mai_naga17:20190410115936p:plain


 なぜコンテナ仮想化が登場したのか?

万事解決のように見える仮想化技術ですが、従来の仮想化技術には課題もあったということです。

①リソースの使用が大きい!

  • ゲストOSを稼動させるためのリソースが必要
  • ハイパーバイザーを動作させるためのリソースが必要
  • ゲストOSを含むためマシンイメージの容量が大きい

②性能と運用に問題が!

  • ハイパーバイザーにオーバーヘッドが発生
  • ゲストOSを含むため、何かと小回りが利かない(可搬性がない)
  • ゲストOSを起動させないといけないため遅い

などなど、確かに仮想化技術の特徴を考えると、こういう問題ありそうだなーと理解できました。そのため、容量が小さく、オーバーヘッドの少ないコンテナ型の仮想化が注目を浴びるようになったのですね!

それで、コンテナとは?

コンテナになにやら期待が持てそうだ、ということは分かってきましたが、コンテナとは結局何者なのでしょうか?

コンテナは、コンテナ型仮想化という技術で実現されている仮想マシンの一種、ということです。

それぞれのゲストOS上で稼動するわけでなかく、共通のホストOS上で稼動するため、インフラが軽量化されているようです。また、ゲストOSがないことによって、起動も早く、オーバーヘッドもなし!

f:id:mai_naga17:20190410212729p:plain


 結局、従来の仮想化技術と何が違うの?

性能

従来はゲストOSの起動が必要でしたが、コンテナはその必要もなし

容量

従来はゲストOSを仮想マシンイメージに含まれていましたが、コンテナはゲストOSを保持する必要がないためストレージの容量が小さく済みます

OSの種類

従来はVMごとにOSをインストール必要がありましたが、コンテナではその必要もありません。ただ表裏一体で、従来は複数のゲストOSを選択可能でしたが、コンテナはホストOSに依存するため、異なるOSのシステムを動かすことができません。

 

Dockerとは?

それでは、よく聞くDockerとは何者なの?

Dockerは、コンテナの実装のひとつということです。他にもいろいろ種類があるようです。Dockerは、アプリ開発者にとってアプリをすばやく実行できるような環境を提供することを目指している、ということですね。つまり、Dockerが動くホストOSに、固まりにした依存関係をインストールするだけで、ハードウェアを意識せずに開発ができるような環境が出来上がる、という感じみたいです。

f:id:mai_naga17:20190410214341p:plain

今まで書いてきたコンテナ仮想化のメリットももちろんですが、Dockerイメージの公開・再利用・配布が簡単にできるようなエコシステムがあるのも大きな特徴ということです。

2.Dockerのアーキテクチャ

3つの構成要素がある

が、全体像とのこと。

f:id:mai_naga17:20190410214733p:plain



Dockerクライアント

Dockerデーモンを操作するためのコマンドライン・インターフェース、ということ。デーモン、、、??という感じですが、とりあえず先に進む。

Dockerホスト

DockerデーモンDockerイメージDockerコンテナ、から構成されるようです。

Dockerデーモン

メインのサーバ。イメージの管理、コンテナの起動や停止を行う、ということ。確かにメインっぽい。

Dockerイメージ

アプリを動かすための必要なファイル群。はい。

Dockerコンテナ

マシンの「実態」。Dockerイメージから作成されるもの。

DockerイメージとDockerコンテナの関係性

Dockerイメージが雛形、Dockerコンテナが実態、ということなので、イメージ(たい焼きの焼型)があればコンテナ(たい焼きの実態..)をいくつも作れるということ。

 

f:id:mai_naga17:20190410215826p:plain

 

Dockerイメージの実態

f:id:mai_naga17:20190410220018p:plain

アプリを動かすために、必要な要素を層にわけて管理しているということです。これらが重なって、最下層にすべての差分が適用されたものが見える。これをUnion File Systemと呼ぶ、ということです。

Dockerコンテナの実態

f:id:mai_naga17:20190410220156p:plain

イメージに書き込み可能な層を入れたもの、ということ。

Dockerイメージの作り方:docker commit

f:id:mai_naga17:20190410234039p:plain

コンテナ起動後、変更を加えたものを雛形として使いたいときに、それをcommitして読み取り専用にしてイメージ化する方法。

Dockerイメージの作り方:docker build

f:id:mai_naga17:20190410234225p:plain

イメージの内容をdockerfileで定義して、それをもとにイメージ化する方法。

 Dockerレジストリ

Dockerイメージの保管・配送システム。イメージをレジストリに置いておくと、pullというコマンドでいつでも誰でも利用できる共有型データベース、のようなイメージだということ。Docker公式「Docker Hub」、サードパーティーレジストリ、自分で構築したレジストリ、などを利用可能。

hub.docker.com

Oracle Cloud Infrastructure Registry (OCIR)

Oracleもコンテナ・レジストリサービスを提供しているようで、Oracle Container Engine for Kubernetes(OKE)と同一リージョンに展開することにより低レイテンシにイメージを取得可能ということです。外向けに公開もできるようですが、基本的にはプライベート・レポジトリとして利用するようです。

 Dockerコンテナの作成・起動の流れ

f:id:mai_naga17:20190410235400p:plain

run→デーモン→レジストリにあるイメージをpullでダウンロード→一枚の層を追加→コンテナとして処理できる、、という流れ。

Dockerイメージの作成の流れ

f:id:mai_naga17:20190410235642p:plain

 

  • docker commit:動いているコンテナをcommit→イメージ化→レジストリにpushして登録
  • docker buildレジストリからdockerイメージをpull→Dockerクライアントのdockerfileを入力してbuild→レジストリにpushして登録

3.Dockerの使いどころ

3つが紹介されていました。

CI/CD(継続的インテグレーション/デリバリー)

f:id:mai_naga17:20190411000236p:plain

 開発者がソースコードをコミットしてレジストリに保管し、テストを行っていくことで、テストするたびに開発者からソースコードをもらう必要がないため、繰り返しテストがしやすい、ということです。

Oracle Container Pipelines Service

f:id:mai_naga17:20190411000520p:plain

Wercker社を買収し、Oracleもコンテナベースの開発に対応するCI/CDサービスがあるということです。

4.Dockerの周辺事情を知る

2つ紹介されていました。

コンテナ・オーケストレーション

f:id:mai_naga17:20190411001049p:plain

コンテナは軽量で小さなアプリを動かし、複数をつなぎ合わせてシステムを作るような際に、自動でスケールさせたりするようなのですが、そのコンテナをいかにスケーリングを自動化させるかのためのソフトウェアということだそう。

いろいろ種類はあるようですが、圧倒的にKubernetesの注目度が高いようです。確かに、セミナーシリーズ第二回もKubernetesだったな。。

Cloud Native Computing Foundation (CNCF) への加入

ベンダーニュートラルな団体ということで、Oracleもプラチナメンバーということです。記事をはっておきます。

www.oracle.com

この後、@cotoc88さんの『時間があるのでデモをさせていただきたいと思います』というエンジニアの人のかっこいいパワーフレーズ!(と私が思っているだけ)と共に、デモを披露されて終了しました!

まとめ

いかがでしたでしょうか?

いや、実は内容とは直接関係ないのですが、本ブログを8割方書いたときに、PCがブルースクリーンになったんですよね。。。途中で保存していなかったので、4000文字くらいが一気にすべて消えました。自業自得ですね。

かなり絶望したのですが、、、勉強会後に@cotoc88さんと@rewtheblowさんに、ブログ書きます!って宣言しちゃったので、もう引くに引けず、とりあえず気合いでもう一度書きました。笑

つまり、私は同じ内容を2回書いているので、圧倒的にDocker基礎を学べた気がしています~

それでは、また!