「職場の人たちにDockerをもっと訴求したい!」そんな想いから、「Dockerって何?」といった方々にDockerの魅力を伝えるための記事を書いてみました。
Dockerのインストール方法については、『Amazon EC2にDocker CEの環境を構築する』にまとめています。併せてお読みください。
「Docker」とは
「Docker(ドッカー)」は近年大変注目されている 仮想化ソフトウェア です。
2017年の企業におけるDockerの導入状況は「本番環境で使用している」という企業が6.0%、「開発/テスト/検証段階」の企業が13.1%であったようです。(「2017年 国内OpenStack/Dockerの導入状況に関するユーザー調査結果を発表」)
Dockerが注目されている一番の理由はその 手軽さ です。Dockerを使えば、以下のようなサーバー環境を簡単に構築することができます。
- nginxやApacheによるWEBサーバー
- PHPやJavaによるAPサーバー
- MySQLやPostgreSQLによるDBサーバー
- redmine、GitLab、JenkinsなどのDevOps環境
DockerCon 16 General Session Day 2
個人的には様々なOSSを試すのにDockerが大活躍しています。
Dockerの仕組み
仮想化ソフトウェアなら既にVMWareやVirtualBoxがあるのに、なぜDockerがこれほど注目されているのでしょうか?
Dockerは 「コンテナ型仮想化」 と呼ばれる基盤技術で仮想化を実現しています。VMWare, VirtualBoxなどを代表とする従来の「ホスト型仮想化」と、Dockerを支える「コンテナ型仮想化」との違いを見ていきましょう。
ホスト型仮想化(VMWare, VirtualBox)
- アプリケーションを実行するためにはまずゲストOSを起動させなければならず、CPUやメモリ、ディスクなどのリソースも多く消費する
コンテナ型仮想化(Docker)
- コンテナはホストOSから見ると単一のプロセスとして扱われ、カーネル部分をホストOSと共有するため、リソース使用量が非常に少ない
ホスト型仮想化 | コンテナ型仮想化 |
---|---|
コンテナ型仮想化はOS上に他のプロセスから隔離されたアプリケーション実行環境を構築することで、仮想的な動作環境をホスト型仮想化より少ないコンピュータリソースで実現することを可能としています。
Dockerを導入するメリット
上述したコンテナ型仮想化と呼ばれる基盤技術を活用することによって、Dockerは以下の3つの特徴を実現しています。
1. アプリケーションを少ないリソースで効率良く実行できる
コンテナ型仮想化は従来のホスト型仮想化で必要であった ハードウェアのエミュレートを必要としない ため、より少ないコンピュータリソースで効率よく実行することができます。
2. 「Infrastructure as Code」によってインフラ環境のバージョン管理ができる
「Infrastructure as Code」とはインフラ環境の状態をソースコードとして管理し、その内容を自動的にサーバーへ設定する仕組みです。 Dockerはイメージの構成を「Dockerfile」、コンテナの構成を「docker-compose.yml」というテキストファイルに記述できる ため、gitなどのバージョン管理システムでインフラ環境の状態を記録することができます。
以下はredmineが公式に公開しているdocker-compose.ymlのスクリプトです。ご覧のように、 最低限必要な構成であれば、たった数行のスクリプトでサーバーを構築することができます。
version: '3.1'
services:
redmine:
image: redmine
restart: always
ports:
- 8080:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: example
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: redmine
また様々なオープンソースソフトウェアを構築するための Dockerfileが豊富に公開されている ことも大きな魅力の一つです。
3. 「Immutable Infrastructure」を実現することができる
「Immutable Infrastructure」とはアプリの実行環境を使い捨てとし、環境を都度作り直すことにより構成変更を行う方法です。サーバーの状態は全てDockerfileに記述されているため、 いつでも古い状態のサーバーを廃棄して「パッチのつぎはぎがない綺麗な状態」のサーバーを再構築することができます。
Dockerを使うために最低限理解しておくべきこと
Dockerの魅力は伝わったでしょうか?最後にDocketを使うための重要な二つの概念、「Dockerイメージ」と「Dockerコンテナ」について説明したいと思います。
[アーキテクチャの理解 — Docker-docs-ja 1.11.0 ドキュメント](http://docs.docker.jp/v1.11/engine/understanding-docker.html)「Dockerイメージ」とは
「Dockerイメージ」とはOSやアプリケーションを含んだテンプレートのことです。OSによって固有であるユーザーランド部のイメージのことを 「ベース・イメージ」 と呼び、「ベース・イメージ」にはカーネル部は含まれていません。
Docker Storeでは、 CentOSやUbuntuなど大抵のOSのベース・イメージが公開されています。 また、OSとアプリケーションがセットになっているイメージも同サイト上で公開されています。
「Dockerコンテナ」とは
「Dockerコンテナ」は元となるDockerイメージから生成された仮想サーバーです。 同じDockerイメージから複数のコンテナを生成することもできます。 Dockerコンテナはホストマシン上の一つの プロセス として実行されます。
慣れるまではこれらの概念が少し分かりづらく感じるかもしれませんが、実際に自分で色んなコンテナを生成してるとすぐに理解できるようになります。
最後に
AIやブロックチェーン、スマートスピーカーに必要なサーバーやアプリケーションの環境も、Dockerを使えば簡単に構築することができます。本稿がDockerをより多くの人たちに知ってもらうきっかけとなれば幸いです。