【初心者向け】Dockerとは|仮想化技術との違い・基本的仕組み・できること

当ページには広告が含まれています。

こんにちは、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実行イメージ

例として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関連記事一覧

当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。

【Docker】記事タイトル
Dockerとは|仮想化技術との違い・基本的仕組み・できること
Dockerイメージ・コンテナの仕組みと違い
イメージの取得・一覧表示・削除
コンテナの実行・一覧表示・停止・削除
Dockerfileとは|書き方・コマンド一覧・イメージ作成手順
イメージ作成・DockerHubへの公開手順
マウント方法|ボリューム・バインド・tmpfsマウント
Docker Compose|概要・使い方・YAMLファイルの記述方法
【実践】Docker Composeを用いてWordpress構築

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次