【リニューアル記念】未経験からブロガーへのSTEPを続々更新!

Dockerとは何か?初心者にもわかりやすく仕組みを解説!

Dockerとは何か?初心者にもわかりやすく解説

Docker(ドッカー)とは、「仮想環境の構築ツール」です。

このDockerを使った環境構築は、これからのデファクトスタンダード(事実上の標準)になりつつあります。

仮想環境といえば「VirtualBox」なども有名ですが、構築の仕組みが少し違うこともあり、Dockerを使うことで、より素早く簡単に仮想環境を構築できます。

この記事では、初心者にもわかりやすくDockerの仕組みについて紹介していきます。

  • Dockerとは何か
  • Dockerの仕組み
  • VirtualBoxとの違い
  • Dockerのメリット

Dockerとは何か?VirtualBoxとの違いをしっかり覚えて、Dockerを使いこなせるようになりましょう。

ちなみに、Dockerを使うにあたってLinuxの基本知識が必要になるので、心配な方は「【Linux入門】基礎知識の勉強まとめ!構築方法やコマンドを学習する」もあわせて読んでみてください。

Dockerとは何か

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イメージ」や「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とは?ディストリビューションや仕組みを解説!」を読んでみてください。

そして、ここで疑問なのが「なぜLinuxカーネルを持たないWindowsやMac上でもコンテナを立ち上げられるのか?」です。

実はこれ、WindowsやMacでDockerを利用する場合、裏でLinux仮想マシンが起動するようになっていて、各コンテナもこの仮想マシン上で起動する仕組みになっているのです。Dockerコンテナとは

つまり、WindowsやMac上のDockerコンテナが利用するカーネルは、このLinux仮想マシンのカーネルだったってことですね。

キツネ

DockerはLinuxがないと絶対に動かないんだね!

Dockerイメージとは

Dockerイメージとは

Dockerイメージとは、Dockerコンテナを作るためのレシピのことで、このイメージを元にDockerコンテナが生成されます。

このイメージは、元になるイメージに「レイヤ」と呼ばれるイメージを重ねることで、新たなイメージを作ることができます。

元になるイメージのことを「ベースイメージ」と呼び、Docker Hubなどで提供されているCentOSやUbuntuなどのOS、NginxやApacheなどのWebサーバなどにあたります。

例えばベースイメージであるCentOSにMysqlをインストールしたり、Nginxの設定ファイルを書き変えたりしますよね?

このベースイメージに対する変更こそが「レイヤ」であり、このレイヤを重ねることで自分の望んだイメージを作ることができるのです。

キツネ

1つのイメージから複数のコンテナを作れるよ!

Dockerレジストリとは

Dockerレジストリとは

Dockerレジストリとは、Dockerイメージを保管しているところです。

さきほど、ちょろっと紹介した「Docker Hub」もDockerレジストリとして作られたコンテナ共有サービスです。

Docker Hubには、OSやミドルウェア、RailsやWordpressなどのアプリケーションまで、非常に多くのベースイメージが配布されています。

ちなみに、Dockerレジストリのイメージも配布されているので、自分でDockerレジストリを作ることもできます。

キツネ

完全非公開のレジストリが欲しい場合は自作するしかないね!

DockerとVirtualBoxの違い

DockerとVirtualBoxの違い

ちなみに仮想環境構築ツールといえば、「VirtualBox」などを思い浮かべる方も多いと思います。

念のため、DockerとVirtualBoxとの違いについても確認しておきましょう。

Dockerは「コンテナ型」、VirtualBoxは「ハイパーバイザ型」と呼ばれています。

コンテナ型の仕組みについては、さきほど紹介したので大丈夫ですね。

ハイパーバイザ型は、ホストマシン上でゲストマシンを起動させる仕組み、つまり「ホストOS」の上で「ゲストOS」が別に起動しているということになります。

これは、ホストOSのカーネルを共有して動くコンテナ型に比べ、より多くのリソース(CPUやメモリなど)を消費するということです。

ちなみに、WindowsやMacなどの「OS」を「スーパーバイザ」といい、VirtualBoxはOSを管理するという意味で、スーパーの上である「ハイパーバイザ」と呼ばれています。

キツネ

簡単にいうとVirtualBoxは無駄が多いってことだよ!

Dockerのメリット

ここまでDockerの特徴や仕組みについて紹介してきましたが、最後にDockerのメリットをまとめてみます。

  • Dockerイメージがあれば、簡単に環境構築できる
  • Dockerfileを使えば、構築手順をファイルにまとめられる
  • Dockerコンテナは、Linuxカーネルを共有して使うため軽くて速い
  • Dockerコンテナは、「作っては壊す」が基本なので必ず同じ環境を作れる

Dockerイメージを共有することで、誰でも簡単に同じ環境を構築できます。

また、環境構築をDockerfileにまとめることができるので、構築手順もわかりやすいです。

と、ここまでなら「Vagrant」や「Ansible」といったツールを使えば、似たようなことはできるでしょう。

ですが、Dockerの最大の特徴である「軽くて速い」というところが大きなポイント。

これにより、「作っては壊す」というイミュータブルインフラストラクチャー(不変的なインフラ)が可能になり、構築時間や管理工数を大幅に削減できます。

Ansibleなどの構成管理ツールを使うと「冪等性(何度繰り返しても同じ結果になる)」を考慮した管理方法になるため、結構複雑になりやすいんですよね。

それよりは、「作って壊す」を繰り返すDockerのほうがシンプルで、記述ミスも発生しづらいです。

これも高速に起動するコンテナ型だからこそ、相性がいいんですよね。

まとめ:初心者でも仕組みは理解できる

Dockerを使いこなせるようになれば、アプリケーションを作るための環境構築も簡単にできるようになります。

ただし、初心者はDockerの仕組みを理解できたとしても、使いこなすレベルになるまで少し時間がかかるかもしれません。

というのも、Linuxの基礎知識がなければ、環境構築の設定でおそらく詰まってしまうからです。

Dockerを始める前に、まずはVagrant(VirtualBox)などを使って、「ある程度Linuxに慣れてからDockerに挑戦する」というステップがおすすめです。

次回は、「Dockerのインストールと基本的な使い方(Windows10とMac)」について紹介します。

テキストのコピーはできません。