Dockerって?できることやメリット・デメリットを解説!

Dockerとは?

Dockerとは、コンテナ型の仮想環境を構築、配布、実行するためのソフトウェアです。これまでの仮想環境は、1つのOS(ホストOS)の上で複数のOS(ゲストOS)を動かし、さらにミドルウェアやアプリケーションを動かしていました。一方、Dockerは、ゲストOSを使わずに「コンテナ」と呼ばれる仮想環境を構築します。

仮想環境って?

仮想環境とは簡単に言えば、1台の物理的なハードウェアの中に、複数の仮想的なハードウェアを作り、別のOSを動かすこと。「仮想マシン」とも呼ばれます。1台のマシンで複数のOSを動かすことができるため、OSごとに1台ずつマシンを用意する手間やコストが削減できます。
ただし、OSの上でさらに別のOSを動かすことになるので、マシンへの負荷が大きくなり、動作スピードは遅くなります。

仮想マシンとの違い

Dockerも仮想マシンも、1台のマシン(1つのOS)上に複数の仮想環境を作るために使われますが、Dockerは仮想マシンに比べて、より進化した洗練された仕組みを持っています。
仮想マシンではホストOSの上でゲストOSを動かし、さらにミドルウェアやアプリケーションを動かしていましたが、DockerはゲストOSを使わずに仮想環境を構築することができます。これが「コンテナ」と呼ばれる技術です。コンテナはゲストOSを使わないため、マシンにかかる負荷も小さくなり、動作スピードも速くなります。

Dockerの仕組みについて

Dockerの仕組みをもう少し詳しく見てみましょう。

仕組み①コンテナ化

Dockerは「コンテナ化」「コンテナ型仮想化」と呼ばれる技術を使っています。コンテナも、従来の仮想マシンも最終的な目的は、ユーザーにサービスを提供するためのアプリケーションを動かすことです。
仮想マシンでは、アプリケーション実行環境を作るために、ホストOS/仮想化ソフトウェア/ゲストOS/ミドルウェア/アプリケーションという積み重なった構造になっていました。これがDockerでは、ホストOS/Docker Engine/ミドルウェア/アプリケーションというシンプルな仕組みになります。そのうえ、ミドルウェアとアプリケーションはコンテナとして1つにまとめられています。
コンテナとしてまとめられることで、簡単に移動させたり、複数で共有することが簡単になります。物流の世界で、それまでバラバラの状態で運ばれていた荷物が、コンテナが発明され、世界中で同じ規格のコンテナが使われることで、物流が効率化したように、開発環境もDockerなどのコンテナ技術の登場によってより便利に、より効率的になっています。

仕組み②Dockerイメージ

コンテナは、ミドルウェアやアプリケーションのバージョンや種類に応じて、さまざまなものが用意されています。コンテナを利用するためには、Dockerイメージを入手します。Dockerイメージは、Docker Engineの上でコンテナ(ミドルウェア/アプリケーション)を動かすために必要なファイルがまとめられたものです。
従来の仮想環境では、例えば複数の人が同じ環境を構築するには、手順書に従ってOSやミドルウェアを1つ1つインストールする必要がありましたが、Dockerなら、Dockerイメージを入手するだけで、環境が構築できます。
これは「インフラ構築のコード化」「コード化による管理」などと呼ばれますが、Dockerを使えば、複数で開発作業を行う際に共通のインフラ構築や管理も効率化できるのです。

Dockerでできること

WebサービスやWebアプリケーションの開発では、さまざまな開発環境・検証環境が必要です。またOSやアプリケーションのバージョンアップも頻繁に行われ、実際に使用するには事前の確認も必要です。
Dockerを使えば、1台のPCの中に複数のコンテナ(仮想環境)を構築することができ、複数の開発環境・検証環境を揃え、対応することが可能です。
さらに昨今では、開発はグローバルになり、オフショアでの開発は日常的なものになっています。開発を複数拠点で行う場合、開発環境の統一・共通化が重要になりますが、Dockerなら、そうした問題もクリアできます。

Dockerのメリット

Dockerのメリットを改めて整理してみましょう。

メリット①軽量・高速

Dockerは、従来のホストOSの上でゲストOSを動かす仮想化技術に比べて、マシンへの負荷が軽く、高速な仮想環境を構築することができ、開発作業を快適に進めることができます。

メリット②環境の共通化・統一化

従来の仮想化技術では、ゲストOSをはじめ、ミドルウェア、アプリケーションのインストールを手動で行う必要がありました。Dockerは「Dockerイメージ」と呼ばれるイメージファイルを展開するだけで環境が構築できるため、複数が携わる開発作業でも共通の開発環境を簡単に構築することができます。環境のバージョンアップなども簡単です。

メリット③コスト削減

従来、Webサービス、Webアプリケーションの開発では、OSやバージョンに応じて、それぞれ複数のサーバを用意する必要がありました。
Dockerなら、1台のマシンの上に複数の環境を構築できるため、そうしたサーバのコスト、インフラのコストを削減できます。

メリット④環境の配布

Dockerでは、必要なミドルウェアやアプリケーションに応じて、さまざまなDockerイメージが準備され、利用できますが、開発作業で独自の環境を構築する必要がある場合には、そうした環境をファイル化し、イメージとして配布することができます。

メリット⑤スクラップ&ビルドが容易

Dockerを使うと環境構築が簡単に行えるため、開発作業やクライアントのリクエストに合わせて環境をスクラップ&ビルドすることが簡単になります。

メリット⑥オーケストレーションなど便利な関連ツール

Dockerをさらに便利に使うための関連ツールもいくつか登場しています。例えば、Kubernetes(クバネティス、またはクーベネティス)は、オーケストレーションツールと呼ばれるコンテナ管理ツールです。Kubernetesを使うと、コンテナの運用・管理を自動化したり、コンテナと別のサーバを連携させることができるようになります。

Dockerのデメリット

Dockerのデメリットは、なんといっても新しい技術なので、十分に使いこなせるようになるまでに時間が必要なことです。従来の仮想化技術は、仮想的なハードウェアを構築し、その上でOSを動かしていたので、ある意味では単純な仕組みで理解しやすいものでした。
しかし、Dockerは従来とはまったく違う方法で仮想環境を構築します。そのため、確実に、安全に使いこなすには構築方法を十分に理解しなければなりません。

Dockerの使用方法

Dockerの使用方法を紹介します。あくまでも概要ですので、詳細はDocker公式ドキュメントなどで確認してください。

WordPressのコンテナを動かす場合

Dockerを使うと、コンテナ(仮想環境)内にWordPressを簡単に構築することができます。

手順

1. docker-compose.ymlファイルの作成</h4>
空のディレクトリを作り、docker-compose.ymlを作成します。内容は以下のとおり。

version: '3'

services:
 db:
  image: mysql:5.7
  volumes:
  - db_data:/var/lib/mysql
  restart: always
  environment:
   MYSQL_ROOT_PASSWORD: somewordpress
   MYSQL_DATABASE: wordpress
   MYSQL_USER: wordpress
   MYSQL_PASSWORD: wordpress

 wordpress:
  depends_on:
   - db
  image: wordpress:latest
  ports:
   - "8000:80"
  restart: always
  environment:
   WORDPRESS_DB_HOST: db:3306
   WORDPRESS_DB_USER: wordpress
   WORDPRESS_DB_PASSWORD: wordpress
volumes:
 db_data:

2. docker-composeを実行
docker-compose.ymlファイルの作成したディレクトリで、docker-compose up -d を実行します。

3. ブラウザで確認
http://localhost:8000 にアクセスし、WordPressの設定画面が表示されれば完了。

開発環境を構築する場合

開発現場の多くでは、各自のローカル環境にWordPressを構築して開発作業を行うことよりも、サーバソフトウェアツールを使って開発を行うケースがほとんどでしょう。
Dockerを使えば、Jenkins、Redmine、Nginxなどの開発環境を構築することができます。
それぞれWordPressの場合と同様に、ymlファイルを作成し、実行するだけで環境を構築できます。

Dockerの活用事例

Dockerの特徴やメリットなどを踏まえ、どのような場面で活用できるか見ていきましょう。

事例①開発環境の違いを回避

すでに見てきたとおり、Dockerを使うと開発環境の共通化・統一化を実現することができます。Dockerイメージを利用して、独自の環境を配布することも可能です。
大規模なシステムやサービスの開発で、開発にかかわる人数も大規模になっている場合、あるいは日本だけでなく、オフショア拠点を利用して開発している場合、開発環境や検証環境にわずかでも違いがあると、思わぬトラブルやエラーの原因となります。
Dockerを活用すれば、そうしたトラブルやエラーを回避できます。

事例②クラスタ構成を構築

システムやサービスの拡張性(スケーラビリティ)や可用性(アベイラビリティ)を向上させ、高品質なシステムやサービスを実現するために、複数のサーバを連携させて動作させる「クラスタ構成」を利用することがあります。
クラスタ構成は、ユーザーから見たときに、複数のサーバをあたかも1台のサーバを使っているかのように連携させるので、構築が複雑になりますが、Dockerを使えば、クラスタ環境も複数のコンテナを管理するためのオーケストレーションツールを使って、より簡単に構築できます。

Dockerを使いこなして、開発を効率化・高度化

開発現場での仮想環境・仮想化技術の活用は、開発作業の効率化・コスト削減といったメリットを生み出しています。Dockerは、従来の仮想化技術をさらに進化・洗練させたものです。導入にはハードルがあるものの、使いこなせばさまざまなメリットが得られます。

Dockerって?できることやメリット・デメリットを解説!のページです。ITエンジニア・移動体通信エンジニア(技術者)の派遣求人ならブレーンゲート。株式会社ブレーンネットはシステムエンジニアやネットワークエンジニア、プログラマーの派遣・転職をサポートいたします。