目次
Dockerの入門
近年、システムの管理コストや負荷を削減するために「サーバ仮想化」という技術が使用されていますが、それを実現する手段の一つとして「Docker」という技術が注目を浴びています。
この記事ではDocker入門者向けに、仮想化技術とは何か、またDockerに関する基礎的なことを紹介していきます。
Dockerの概要
「Docker」とは、Docker社が開発しているコンテナ型の仮想環境を提供するためのプラットフォームです。
Dockerは「Develop, Ship and Run Any Application, Anywhere」という、あらゆるアプリケーションを、どこでも開発、移動、実行できるようにすることを目指した技術で、開発環境を共有化する作業や、バージョン管理によく使用されます。
「Docker」のサービスは「Docker Engine」と「Docker Hub」で構成されています。
Docker Engineとは?
「Docker Engine」とは、アプリケーションをコンテナ化するプラットフォームです。
コンテナの設定をひとまとめに保存したDockerイメージの作成や、コンテナの起動などを行うDockerの中核となるコンポーネントです。
Docker Hubとは?
「Docker Hub」とは、ユーザーが作成したDockerコンテナをアップロードして、公開・共有することができるサービスです。
Docker Hub上で共有されているコンテナは自由にダウンロードすることができ、自分のサーバー上に簡単にデプロイすることができます。
仮想化ソフトとの違い
Dockerはコンテナ型の仮想環境を提供するプラットフォームとなっており、Dockerでは仮想化ソフトがOS上で動作することで仮想環境を構築します。
Dockerの仮想化ソフトには「Docker Engine」と呼ばれるものがあり、ホストOSで動作し、Docker Engineの上に仮想環境のコンテナが立ち上がる仕組みになっています。
そのため、仮想化ソフトはDockerというプラットフォームの一部だと言えます。
Docker入門の基礎知識
Dockerでは、コンテナと呼ばれる技術を使って仮想環境を構築します。また、環境構築だけでなく、アプリケーションの実行なども可能です。
そのため、Dockerを理解するためには、「コンテナ」や「仮想化技術」についての基礎知識を押さえておく必要があります。
ここではDocker入門とも言える基礎知識についてご紹介していきますので、ぜひ参考にしてみてはいかがでしょうか。
コンテナ
コンテナとは仮想環境を構築する技術で、コンテナと呼ばれるOS上に仮想環境を構築するものです。もともとコンテナとは船に積み込む入れ物のことを指しますが、IT技術のコンテナもサーバーの中身をコンテナに入れて整理することで、効率化を実現するものです。
従来の仮想化技術を発展させたものがコンテナ技術となっており、コンテナ技術の代表的な技術としてDockerがあります。
仮想化技術
仮想化技術とは言葉のとおり仮想化を実現する技術で、前述のとおり、コンテナ型の仮想化技術として代表的とされるのがここでご紹介しているDockerです。
Dockerは仮想マシンと比較して、ゲストOSを必要としていません。そのためリソースの使用領域を少なくすることができ、コンテナの素早い起動や停止などを実現します。
ただし、ホストOSと異なるOSの起動はできません。
ホスト型
ホスト型とは、物理マシンにLinuxやUbuntu等のホストOS、すなわち仮想サーバーのOSを動作させる土台となるOSを用意し、そのホストOS上に、それとは異なるOSをインストールし仮想化する方法です。
ホスト型仮想化ソフトウェアの例として、「VMware Player」、「VMware Fusion」や「Oracle VM VirtualBox」等があります。
ハイパーバイザー型
ハイパーバイザー型は、ホストOS上に仮想マシンを作るのではなく、まっさらなハードディスク上に直接仮想マシンを作成する方法で、ハイパーバイザー型仮想化ソフトウェアをインストールし、仮想化を実現します。
ホスト型と違って、ホストOSを必要とせず、ハードウェアを直接制御することができ、仮想マシンの動作速度の低下を抑えることができます。
ハイパーバイザー型のソフトウェアの例として、「VMware ESXi 」、「Hyper-V」や「LinuxのKVM(Kernel-based Virtual Machine)」等があります。
コンテナ型
コンテナ型は、物理マシンサーバにホストOSをインストールし、その上にコンテナ管理ソフトウェアをインストールし、コンテナと呼ばれる独立した仮想環境を実現する方法です。
ホスト型やハイパーバイザー型との違いは、ゲストOSを起動するのではなく、1つのOSの中を複数の区画に分離し仮想環境を実現します。また、1つのカーネルの上で複数のOS環境が動作します。
コンテナはホストOSの中核となるソフトウェア部分であるカーネルを一部共有するため、少ないリソースで仮想環境を実現することができるため、メモリやCPUのリソースの使用量を抑えることができます。
このコンテナ型仮想化を実現する代表的なソフトウェアが「Docker」です。
Dockerを使用するメリット5つ
ここまでDocker入門者向けに、コンテナや仮想化技術やその種類、さらにDockerについて紹介してきました。
Dockerにはさまざまなメリットがあることから、近年ではDockerを利用する企業も多くなってきています。
ここではDocker入門者向けにDockerを使用するメリットをご紹介しますので、どのようなメリットがあるのか参考にしてみてはいかがでしょうか。
1:処理が軽量
Dockerはコンテナ型のサーバ仮想化を実現する技術のため、ホスト型やハイパーバイザー型と違って、必要最小限のCPUやメモリしか使用せず、負荷が小さく高速な動作を実現することができます。
ゲストOSを立ち上げるわけではないため、アプリケーションの起動も速く行うことができます。
2:環境構築が容易
Dockerを使用することによって、開発環境や、アプリケーションの実行環境を容易に準備することができます。
一般的には、アプリケーションの開発、動作させるまでに、設定ファイルの編集やライブラリのインストールが必要になりますが、Dockerを使うことによって、そういった作業を簡略化することができます。またチームで開発を進める際に、開発環境の共有が簡単に行えます。
また、Docker Hubにはユーザーが作成した環境が公開されているため、Docker Hubからファイルをダウンロードすることで、望む環境を簡単に構築することもできます。
3:デプロイやスケールが簡単
Dockerコンテナは、物理サーバでも、仮想マシンでも、ほとんどあらゆる場所で動かすことができます。
より多くのプラットフォームで動作させることができ、アプリケーションや周辺環境の移動が容易、かつ軽量であるため、デプロイやスケールアップ、スケールダウンを速く行うことができます。
4:やり直しが容易
Dockerコンテナはそれぞれが独立しているため、破棄ややり直しも簡単に行えます。
これまでサーバーを扱ってきたエンジニアの場合、あれこれ触りすぎて動かなくなってしまい、元に戻せなくなってしまったという経験を持っている人も多いのでないでしょうか。
そのような場合でも、Dockerを使用していれば、単純にコンテナをまるごと削除してしまえば元通りに戻すことも可能です。
5:開発・リリースサイクルが安定
Dockerを利用することで開発やリリースのサイクルを安定させることができます。
Dockerではミドルウェアのインストールや環境設定などもすべてコード化し、管理することができます。そのため、複数のエンジニアが同じ環境を簡単に作れて、環境も配布しやすく、スクラップ&ビルドも簡単にできるようになります。
そのためDockerを利用すれば、開発やリリースサイクルも安定していくでしょう。
Dockerを使用するデメリットとは
Dockerにはさまざまなメリットがありますが、一方で土台のOSと異なるシステムをコンテナにすることができないなどのデメリットがあります。また、Linuxを利用している場合、複数のLinuxディストリビューションを併用することもできません。
さらに、全てのコンテナでカーネルを共有するという特徴を持っていることから、個別にカーネルの構成変更を行うことはできません。
Dockerへ入門してみよう
Docker入門者向けに、仮想化技術とは何か、サーバ仮想化を実現する手段の一つとして注目を浴びているDockerという技術について紹介してきました。
Dockerを利用することによって、OS内にアプリケーションの実行環境を用意することができます。また、他の仮想化技術と違い、リソースの使用を非常に効率化することができます。
また、作成した環境を容易に共有することができ、開発環境の共有にも役立たせることができます。ぜひDockerへ入門してみてはどうでしょうか。