Docker(ドッカー)とは、「仮想環境の構築ツール」です。
このDockerを使った環境構築は、これからのデファクトスタンダード(事実上の標準)となりつつあります。
仮想環境といえば「VirtualBox(Vagrant)」なども有名ですが、構築の仕組みがまったく違い、Dockerを使うことで、より素早く簡単に仮想環境を構築できるようになります。
この記事では、初心者にもわかりやすくDockerの仕組みについて紹介していきます。
- Dockerとは何か
- Dockerの仕組み
- VirtualBoxとの違い
- Dockerのメリット
Dockerとは何か?VirtualBoxとの違いをしっかり覚えて、Dockerを使いこなせるようになりましょう。
ちなみに、Dockerを使うにあたってLinuxの基本知識が必要になるので、心配な方はこちらの記事もあわせて読んでみてください。

もくじ
Docker(ドッカー)とは何か
Docker(ドッカー)とは何か?初心者にもわかりやすくいうと、仮想環境を構築するためのツールです。
WindowsやMac、Linuxなどのホストマシンの上に「コンテナ」と呼ばれる仮想環境を構築し、そのコンテナの中でアプリケーションやミドルウェア、OSなどを動かすことができます。
これらコンテナを組み合わせて、アプリケーションを構築していくことになります。
また、コンテナは非常に軽量なため、起動や停止などの操作が素早く完了するのも大きな特徴です。
この特徴もあって、Dockerでは「Immutable Infrastructure(イミュータブルインフラストラクチャー)」という考え方が基本にあります。
イミュータブルインフラストラクチャー(不変的なインフラ)とは、インフラに対して何かしらの変更をしたい場合でも、すでに稼働しているインフラに直接手を加えるのではなく、変更したバージョンのインフラで新たに置き換えるという考え方です。
具体的には「Dockerイメージを作り直して、コンテナを起動しなおす」という操作になります。
Dockerイメージやコンテナについては、このあと詳しく解説するので、そこで理解してもらえれば大丈夫です。
ほかにも、「Dockerfile(ドッカーファイル)」を利用することで、構築手順をコード化してファイルにまとめることもできます。
ちなみに、これを「Infrastructure as Code」と呼びます。
Dockerの仕組み
では次に、このDockerがどのような仕組みになっているのかを確認していきましょう。
以下の用語を理解することで、Dockerの仕組みが少しずつ見えてきます。
- Dockerエンジン
- Dockerコンテナ
- Dockerイメージ
- Dockerレジストリ
Dockerエンジンとは
Dockerエンジンとは、「Dockerそのもの」だと思ってください。
Dockerエンジンがあるからこそ、「Dockerイメージ」や「Dockerコンテナ」を動かすことができるのです。
このDockerエンジンは、WindowsやMacやLinuxなどにDockerをインストールすることで簡単に利用できます。
インストールしたホストマシン上でDockerエンジンが動き、さらにその上で各コンテナが動いているイメージを持つといいでしょう。
Dockerコンテナとは
Dockerコンテナとは、Dockerエンジンの上で動いている仮想環境のことです。
Dockerコンテナには、CentOSやUbuntuなどのOSから、NginxやMySQLなどのミドルウェア、RailsやWordPressといったアプリケーションまで、様々な環境を作ることができます。
そして、これらのコンテナは「ホストOSのカーネル(Linuxカーネル)を利用して動いている」という特徴があります。
コンテナごとにOSが独立して動いているのではなく、ホストOSのカーネルを各コンテナが共有することで、ホストマシンのリソース(CPUやメモリ)を節約しながら動いているのです。
この無駄を省いて軽量化した仕組みこそが、Dockerコンテナの立ち上げが早いといわれる理由になります。
カーネルの仕組みが分からない方は、さきにこちらの記事をお読みください。

そして、ここで疑問なのが「なぜLinuxカーネルを持たないWindowsやMac上でもコンテナを立ち上げられるのか?」です。
実はこれ、WindowsやMacでDockerを利用する場合、裏でLinux仮想マシンが起動するようになっていて、各コンテナもこの仮想マシン上で起動する仕組みになっているのです。
つまり、WindowsやMac上のDockerコンテナが利用するカーネルは、この「Linux仮想マシンのカーネル」だったってことですね。
Dockerイメージとは
Dockerイメージとは、Dockerコンテナを作るためのレシピのことで、このイメージを元にDockerコンテナが生成されます。
このイメージは、元になるイメージに「レイヤ」と呼ばれるイメージを重ねることで、新たなイメージを作ることができます。
元になるイメージのことを「ベースイメージ」と呼び、Docker Hubなどで提供されているCentOSやUbuntuなどのOS、NginxやApacheなどのWebサーバなどにあたります。
例えば、ベースイメージであるCentOSにMySQLをインストールしたり、Nginxの設定ファイルを書き変えたりしますよね?
このベースイメージに対する変更こそが「レイヤ」であり、このレイヤを重ねることで自分の望んだイメージを作ることができるのです。
Dockerレジストリとは
Dockerレジストリとは、Dockerイメージを保管しているところです。
さきほど、ちょろっと紹介した「Docker Hub」も、Dockerレジストリとして作られたコンテナ共有サービスです。
Docker Hubには、OSやミドルウェア、RailsやWordpressなどのアプリケーションまで、非常に多くのベースイメージが配布されています。
ちなみに、Dockerレジストリのイメージも配布されているので、自分自身でDockerレジストリを作ることもできちゃいます。
DockerとVirtualBox(Vagrant)の違い
ちなみに仮想環境構築ツールといえば、「VirtualBox(Vagrant)」などを思い浮かべる方も多いと思います。
念のため、DockerとVirtualBoxとの違いについても確認しておきましょう。
Dockerは「コンテナ型」、VirtualBoxは「ハイパーバイザ型」と呼ばれています。
コンテナ型の仕組みについては、さきほど紹介したので大丈夫ですね。
ハイパーバイザ型は、ホストマシン上でゲストマシンを起動させる仕組み、つまり「ホストOS」の上で「ゲストOS」が別に起動しているということになります。
これは、ホストOSのカーネルを共有して動かすコンテナ型と比べ、より多くのリソース(CPUやメモリなど)を消費するということです。
ちなみに、WindowsやMacなどの「OS」を「スーパーバイザ」といい、VirtualBoxはOSを管理するという意味で、スーパーの上である「ハイパーバイザ」と呼ばれています。

Dockerのメリット
ここまで、Dockerの特徴や仕組みについて紹介してきましたが、最後にDockerのメリットをまとめてみます。
- Dockerイメージがあれば、簡単に環境構築できる
- Dockerfileを使えば、構築手順をファイルにまとめられる
- Dockerコンテナは、Linuxカーネルを共有して使うので軽くて速い
- Dockerコンテナは、「作っては壊す」が基本なので必ず同じ環境を作れる
Dockerイメージを共有することで、誰でも簡単に同じ環境を構築できます。
また、環境構築をDockerfileにまとめることができるので、構築手順もわかりやすいです。
と、ここまでなら「Vagrant」や「Ansible」といったツールを使えば、似たようなことはできるでしょう。
ですが、Dockerの最大の特徴である「軽くて速い」というところが大きなポイント。
これによって「作っては壊す」というイミュータブルインフラストラクチャー(不変的なインフラ)が可能になり、構築時間や管理工数を大幅に削減できるのです。
Ansibleなどの構成管理ツールを使うと「冪等性(何度繰り返しても同じ結果になる)」を考慮した管理方法になるため、環境構築も結構複雑になりやすいんですよね。
それよりは、「作って壊す」を繰り返すDockerのほうがシンプルで、記述ミスも発生しづらいです。
これも高速に起動するコンテナ型だからこそ、相性がいいんですよね。
まとめ:Docker初心者はLinuxから始めよう!
Dockerを使いこなせるようになれば、アプリケーションを作るための環境構築も簡単にできるようになります。
ただし、初心者はDockerの仕組みを理解できたとしても、使いこなすレベルになるまで少し時間がかかるかもしれません。
というのも、Linuxの基礎知識がなければ、おそらくDockerの環境構築設定で詰まってしまうからです。
Dockerを始める前に、まずはVagrant(VirtualBox)などを使って、ある程度Linuxに慣れてからDockerに挑戦するというステップがおすすめです。

次回は「Dockerのインストールと使い方」について、詳しく紹介していきますね。
またね、キツネ(@kitaaaa_kitsune)でした!

