Dokerのハンズオン勉強会メモ(1)
Dockerの初心者向けのハンズオン勉強会に参加したので、その時のメモ+調べたことを書いていきたいと思います。
Dockerとは
Dockerという企業が開発している仮想化のためのオープンソースソフトウェアです。非常に軽量なコンテナ型のアプリケーション実行環境なので、一つのホストOS上で仮想的に複数のOSを「軽快」に「簡単」動作させることができるようになります。
・・・簡潔で分かりやすい説明だと思いますが、初心者にとっては「コンテナってなんだよ!」って感じですよね。
ということでコンテナとは
コンテナと聞いてまず思い浮かぶのは以下の画像のものではないでしょうか。
港でよく見かけますよね。貨物の標準化として大活躍しているやつです。今回のコンテナのイメージも箱ごとに分けられているという点に関していえば同じです。使用したいプロセスごとに箱に詰めて隔離している感じです。一つの箱で複数の役割を持たせることもできますが、分けて使うことによりシステムをわかりやすくし、リソースも無駄なく使用できるようになります。
下の画像の赤枠で囲っている部分がコンテナになります。このコンテナに入れられたAppはホストOSから見ると一つのプロセスのように管理されます。
その他の仮想化技術との違い
ホスト型製品(Virtualbox)を使用した仮想化やハイパーバイザを利用した仮想化(VMware vSphere)などと比較した以下のサイトに分かりやすく書いてあります。
個人的には、下の画像の「この部分」と記載のある矢印が指す、アプリとホストOSの間の部分に「ゲストOS」が入るかどうかという点が一番の違いかなと感じました。上記した通りコンテナに入れられたAppはプロセスとして認識され、カーネル部分をホストOSと共有するため、リソースの使用量が非常に少ないという特徴があります。
Dockerを使う上で非常に便利なのがDockerfileです。
Dockerfileとは
既に出来上がっているている環境(イメージ)をコマンドで複製して使う場合とは違い、Dockerfileに環境を構築するための手順(イメージを入手してアプリケーションをダウンロードするなど)を記載しておくと複数の構築作業を一括で行うことができます。また、Dockerfileの中を確認するとアプリケーションの構成や手順が記載してあるためコンテナのメンテナンスにも非常に貢献してくれます。
なぜDockerは普及したのか?
Dockerのメリット
- デプロイ・ロールバックが簡単に行えます。「致命的な障害が発生した場合」や「環境がぐちゃぐちゃになった場合」でも簡単に環境の削除、イメージから再作成を行えます。
- どんな環境でも同じように動かせる。Dockerエンジンが差異を担保。※但しカーネルに依存する。
- システムが簡単に把握できるので、複数のアプリケーションのあいのり環境でも利用しやすい。
- 環境のスクラップビルドが用意できる。同一のDockerfileを使用すれば同じ環境を作ることができる。
- 資源(CPU,Memory,Disk)使用量が少なく、インスタンス作成や起動が速い。
- 開発環境を他の作業者全員でシェアすることができる。DockerhubやGit経由で可能。
- 開発環境とまったく同じ環境で本番環境を構築できる。
- プロジェクト毎の開発環境の切り替えなどが容易。
今回は以上です。でハンズオンの内容などは次回記載したいと思います。