こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Dockerとは何か?という疑問を解消したい
- Dockerが動作する仕組みを知りたい
- Dockerと他の仮想化技術の違いを理解したい
- Dockerの使用シーンを知りたい
Docker(ドッカー)とは?
Dockerとは、アプリケーションを素早く作成・実行・管理するためのプラットフォームを指します。このプラットフォームでは、データやプログラムを隔離して管理できることがDocker最大の特徴であると言えます。
我々が日頃用いるパソコンやサーバー内では、毎日複数のプログラムが動作してます。例えば、パソコンの場合、Excelやメールソフト等を同時に起動していることがありますね。サーバーの場合も同様に、Webサーバ(Apache・Nginx等)やメールサーバー(Sendmail・Postfix等)、データベースサーバ(MySQL・PostgreSQL等)など複数のプログラムが同時に作動しています。このような複数のプログラムやプログラム内でやりとりされるデータを、それぞれ独立した環境に隔離できるのがDockerです。
Dockerは、データやプログラムを独立した環境に隔離する際、コンテナという仕組みを活用します。コンテナには、プログラム実行に必要なライブラリやコード、ランタイム等が含まれています。
Dockerは、Docker Engineと呼ばれるDockerのソフトウェアをインストールすることで利用できるようになります。また、Docker Engineを通じてコンテナを作成・実行できます。厳密には、Docker Engineを操作し、Dockerイメージと呼ばれるコンテナ(ひな型)となるものからコンテナを作成します。
ここまでの概要を以下に示すキーワードをもとにおさらいしてみましょう!
Dockerイメージ
Dockerイメージとは、Dockerコンテナを作成するためのひな型です。例えば、コンテナが家だとすると、イメージは家の設計図といったところです。Dockerイメージには、ライブラリ、設定ファイル、プログラムなどアプリケーション実行に必要なもの一式がまとめられています。
Dockerイメージを用いてコンテナが作成されます。アプリケーションをDockerイメージとして保存することで、別のサーバーに持っていくことが可能になります。加えて、別のサーバー上で同じ環境(コンテナ)を再現することができるようになります。
Dockerコンテナ
Dockerイメージをもとに作成される仮想環境のことをDockerコンテナ(またはコンテナ)と呼びます。
Dockerイメージからコンテナを作成することで、何度でも簡単に同じコンテナ(仮想環境)を作成することができるようになります。
コンテナを実行することによって、事前にDockerイメージにセットアップしていたアプリケーション機能を活用することができます。
Dockerエンジン
Dockerプラットフォームの中で、コンテナ型仮想化を実現できる中核機能を持つ部分がDocker Engineになります。
Docker Engineを操作し、Dockerイメージをもとにコンテナを作成したり、コンテナを直接的に実行することが可能です。
Docker上でのコンテナ・アプリケーション動作イメージ
例としてPC上でのDocker起動イメージについて解説します。
Dockerコマンドによるクライアント操作
はじめに、コマンドプロンプト(Windows)やターミナル(Mac)を通じてDockerコマンドを実行します。
Dockerデーモンがコンテナを操作
Dockerコマンドが実行されると、Dockerコマンドから受け取った命令をDockerデーモンが処理する流れとなります。Dockerデーモンとは、Docker Engineの役割を有したDockerの常駐型プログラムであり、コンテナの作成・起動・停止・削除等の操作命令は、このDockerデーモンが受け取り、実際の処理が実行されます。
【参考】DockerはLinuxマシンで作動
Dockerを活用する際、いくつか制約がある点に注意が必要です。WindowsやMacをもとにDockerは動かせますが、どこかにLinuxマシンが必要になります。加えて、コンテナ内のプログラムもLinux用のプログラムを用いる必要があります。これは、DockerがLinux OSを使う前提としているためです。
このようにDockerはLinuxを前提に動作するため、Linuxが作動する仮想化ソフトウェアを事前に用意しておく必要があります。具体的には次のような方法を経由して仮想化ソフトウェアが用意されます。
- VirtualBoxやVMwareのような仮想環境上にLinux OSをインストールし、その上にDockerを構築する
- Docker Desktopと呼ばれるDockerの実行に必要なLinuxを含むパッケージをインストールする
【Docker×仮想化技術】ホスト型とコンテナ型の違い
Dockerによるコンテナ型仮想化とは仮想化技術の1種であり、1つの物理マシン上に多数の独立した仮想環境(コンテナ)を立ち上げることができるのが特徴です。コンテナ型仮想化技術は、しばしホスト型仮想化技術と比較されます。それぞれの違いについて見ていきましょう!
ホスト型仮想化
ホスト型は、ホストOS上に仮想化ソフトウェアをインストールし、仮想マシンを稼働させる方法です。
ホスト型仮想化の仮想環境の管理(ゲストOSが使用するCPU・メモリ等を制御)に必要な機能を提供する部分をハイパーバイザーと呼びます。ホストOSとゲストOS間を仲介する形でハイパーバイザーは機能します。
ホスト型仮想化の特徴は、ハイパーバイザー上に複数の仮想環境を構築できる点です。ハードウェアレベルで仮想化されているため、ホストOSおよび仮想環境間での分離レベルが高く、それぞれが提供するサービス・機能が互いに影響を受けにくい設計となっています。
一方で、ホスト型仮想化の実現には、コンピュータ内部に仮想環境を構築する必要があるため、負荷が大きく、動作が遅くなるといったデメリットもあります。
コンテナ型
Docker(コンテナ仮想化を行うソフトウェア)を用いて行う仮想化をコンテナ型仮想化と呼びます。
Dockerの場合、Docker Engineを用いてコンテナの作成・実行・停止・削除アクションを管理します。
コンテナ型には、ホスト型のようにゲストOSというものはなく、ホストOSのカーネルを共有してアプリケーションが実行される仕組みとなっています。カーネルとはOSの中核となるプログラムであり、ハードディスクやメモリ等のコンピュータのリソース管理を行なっています。
コンテナ型の場合、OSがホストOSのみのため、ホスト型のようにゲストOSを柔軟に選択する等のカスタマイズ性はありませんが、複数のゲストOSを都度起動する必要がないため、ホスト型と比較して動作が速いという特徴があります。
ホスト型とコンテナ型のメリット・デメリット比較
ホスト型とコンテナ型のメリット・デメリットを比較した表を示します。
システム負荷は大きいか?
ホスト型 | コンテナ型 |
---|---|
× リソース(CPUやメモリ使用率)の面で、オーバーヘッドが多い。起動や停止に時間がかかる。 | ○ ホストOSのカーネルを使用。 動作が早くリソースの使用率も少ない。 |
OSの選択性は高い?
ホスト型 | コンテナ型 |
---|---|
○ 仮想マシン上で任意のOSを選択・作動可能。 | × ホストOSのカーネルを使用して動作。 Windows/Mac OS上で直接Linuxコンテナは動作しない。 |
再現性のある環境を用意できる?
ホスト型 | コンテナ型 |
---|---|
△ 仮想マシンの違いによってアプリケーションが動作しない場合があるものの、全体的に再現性は高いと言える。 | ○ 特定のアプリケーション動作に必要なコンポーネントは、Dockerイメージに集約。同じイメージで生成されたコンテナは実行環境に依存せず動作可能。 |
インフラストラクチャに不具合が生じた際の影響度は?
ホスト型 | コンテナ型 |
---|---|
○ ハードウェアレベルで仮想化されているため、 親元インフラ環境と仮想マシン間が互いに影響を及ぼしあわない。 | × 1つの物理マシン上に沢山のサーバーを配置できる仕組みであるため、親元に不具合が生じた場合、全てのコンテナが影響を受ける。 |
【Docker】できること・利用シーン
Dockerはどのような場面で利用できるのか?このような疑問にお応えします。
同じアプリケーション開発環境を関係者全員に提供する
Dockerは、Dockerイメージを利用すると同じ開発環境を簡単に作成できます。そのため、Dockerは開発者全員に同じ環境を提供するのに便利と言えます。
特に、アプリケーションやサーバー開発タスクが複数存在するプロジェクトに参画した場合、それらタスク目的に応じたコンテナを作成・使用することができます。コンテナは、本番環境と全く同じ環境を再現できるため、開発環境から本番環境へ移行の際もズレが生じないというメリットがあります。
バージョンの異なるOSやライブラリの動作検証
各種プログラミング言語利用に際して、ライブラリのバージョン更新や異なるバージョンを検証することがあります。新旧バージョンの違いがアプリケーション・サーバー実行環境にどのような影響を及ぼすか検証したい場合においてもコンテナは便利です。
サーバー・ソフトウェアの管理
コンテナを用いるとソフトウェアをそれぞれ隔離できるため、他のソフトウェアから影響を受けないという特徴があります。そのため、常に最新の状態でソフトウェアを管理しやすいと言えます。
さらに、コンテナの作成・変更が容易であるため、ソフトウェア構築時の初期設定の手間がかかりません。コンテナを更新した場合も、Dockerイメージをもとにコンテナを容易に増産することが可能です。
【参考】Docker関連記事・おすすめ学習法
【厳選】Dockerの学習におすすめの教材
Dockerについて詳しく学習したいという方向けにおすすめの教材をご紹介します。厳選した教材をこちらにまとめていますため併せてご覧下さい。
Docker・Kubernetesの学習におすすめ入門本・動画教材7選|マイクロサービス基盤「コンテナ」の理解促進
次世代のアプリケーションアーキテクチャとして注目度の高いマイクロサービスの基盤であるコンテナ技術Dockerおよびコンテナオーケストレーション技術のKubernetesについて詳しく学びたい方向けに、厳選したおすすめ教材を紹介します。
Docker関連記事一覧
当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら