最終更新日:
公開日:
WEB制作
今から始めるDocker入門
コンテナ技術として話題の「Docker」。今回はそのDockerについて、「そもそもDockerてなに?」というところから、使う利点や開発の歴史を紹介していきます。
この記事のポイント
- Dockerが実現するコンテナ型仮想化技術について知る
- Dockerを使うメリットが分かる
目次
Dockerてなに?
Dockerは「コンテナ」という箱に実行環境、ライブラリ、アプリケーションを入れて、1つの独立したアプリケーションとして実行するプラットフォームを提供する、コンテナ型仮想化技術を使ったソフトウェアです。
コンテナはそれぞれが独立しているため、他のコンテナや実行環境の影響を受けずに実行することができます。
コンテナ型以外に、すでに広く使われている仮想化技術としてVM(Virtual Machine)と呼ばれる「VirtualBox」や「VMware」があります。
これらのプラットフォームもそれぞれ独立している仮想環境を立ち上げることができますが、1つの仮想環境ごとに1つのOS(ゲストOS)を起動するため非常に多くのリソースを使用します。
仮想環境を立ち上げたら、PCの動作がモッサリと遅くなった経験をしたことがある方も多いのではないでしょうか。
(僕はVirtualBoxを使っていて、モッサリとした動作にストレスを感じていました。)
一方、Dockerでは大元のOS(ホストOS)のカーネルを利用しながら仮想環境を構築するため、非常に効率良く、高速に動作する環境を実現します。
さらに、コンテナ内で使用するOSやWebサーバーなどのアプリケーションは「コンテナイメージ」として共有するため、複数のコンテナを起ち上げても同じバージョンのアプリケーションは重複してインストールする必要がありません。
DockerとVMの構造を比較してみましょう。
この構造の通り、VMでは1つのVM(仮想環境)ごとにゲストOSが必要となりますが、Dockerのコンテナでは個別にOSを立ち上げる必要がありません。
そのため、1つあたりのコンテナは軽量となり高速で動作し、複数のコンテナを並行して動かしても開発環境が遅くなりづらいというメリットがあります。
どうしてDockerを使うの?
Dockerは「高速に動作する仮想環境」という点だけでも十分魅力はありますが、すでに安定して使い慣れた開発環境がある場合、どうしてわざわざ学習コストをかけてまでDockerを使う必要があるのか疑問に思うかもしれません。
そこで、Dockerを使うのメリットを紹介していきます。
実行環境、使用するライブラリ、アプリケーションの構成をコードで記述できる
Dockerは「Dockerfile」というファイルに、作成するコンテナの設計図を記述します。
例えばPHPの実行環境を作るとして、OSに「ubuntu 18.04」を使用し、そこにApacheとPHPをインストールする場合は次のように記述します。
Dockerfile
FROM ubuntu:18.04
ENV DEBIAN_FRONTEND=noninteractive
# Apache & PHP install
RUN apt-get update && apt-get install -y apache2 php7.2
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
この設計図からコンテナイメージを作成して実行することで、Docker上にPHPの実行環境となるコンテナが起動します。
このようにコードベースで使用したい環境を設計図に指定することで、必要に応じてミドルウェアやアプリケーションを組み合わせることができます。
コンテナイメージを共有
上記の「Dockerfile」から作成したコンテナイメージは、好きな名前をつけてDockerHubなどのリポジトリにPush(アップロード)することで簡単に共有することができます。
他の場所でも全く同じ構成でアプリケーションを実行することができる
共有されたコンテナイメージをPull(ダウンロード)することで、全く同じ構成の実行環境を他の場所にも構築することができます。
以上のように、実行環境ごとアプリケーションを簡単に共有できる利便性も大きな魅力です。
アプリケーションの開発環境と本番環境を近い構成にしても、バージョンなどの微妙な差異からトラブルが起こることは少なくありません。
Dockerを使うことで、これらの環境の差異によるトラブルのリスクを最小に抑えることができます。
Dockerにできないこと
良いことだらけのようなDockerですが、仮想環境を構築するならいつでもDockerにすべきかというとそうではありません。
DockerはコンテナイメージとしてOS(ubuntuやdebianなど)やアプリケーションを再現して動かしていますが、オリジナルの動作を完璧に再現しているわけではありません。
もしOSやアプリケーションをオリジナルのまま再現したい場合には、VMによる仮想環境の構築の方が正確に実現することができます。
どうやって使うの?
Dockerは大まかに次の手順で使用します。
- (1) Dockerをインストール
- (2) コンテナイメージをビルド(作成)、またはすでに用意されたコンテナイメージをPull(引用)する
- (3) コンテナを実行
その後、必要に応じて次の手順が入ります。
- (4) コンテナの終了
- (5) コンテナの破棄・再起動
当サイトでは、次回からDockerのインストールからコンテナイメージのビルド、コンテナ実行などを解説していきます。
Dockerの歴史
最後に、簡単にDockerの開発されてきた背景を紹介します。
あまり興味なかったらスキップしてください。
Dockerは、dotCloud社のSolomon Hykes氏によって、同社の自社ツールとして開発が進められましたことが発端となります。
2013.3 | PyCon2013に「Docker」を発表。 3月26日に最初のバージョン0.1.0をオープンソースとして公開。 |
2013.10 | dotCloud社は「Docker」に社名変更。 |
2014.12 | CoreOS社の「AppContainer」とランタイム「rkt」というライバル登場。 CoreOS社はもともとDockerの開発に携わっていたが、Docker社の開発方針に賛同できなかったため、独自仕様のコンテナ技術開発に踏み切る。 |
2015.6 | Docker社とCoreOS社を中心とした、コンテナ技術仕様を標準化するための団体「OCI(Open Container Initiative)」を設立。 |
2016.6 | DockerCon2016で、バージョン1.12を発表。 コンテナオーケストレーション機能の「Swarm Mode」を追加。 |
2017.3 | Docker社は商用版Dockerとなる「Docker EE(Enterprise Edition)」を発表。 今までのDockerは「Docker CE(Community Edition)」として無償提供を継続し、リリースサイクルを4ヶ月ごとにすると発表。 |
2017.4 | Dockerのコンポーネントを開発するサブプロジェクトを管理するための「Modyプロジェクト」始動。 |
2017.7 | コンテナランタイム、コンテナイメージフォーマットの標準仕様を公開。 |
2017.10 | DockerCon EUで「Kubernetes」の公式サポートを発表。 |
2018.7 | 「Docker CE」のリリースサイクルを4ヶ月ごとから6ヶ月ごと(半年ごと)に変更。 |
Dockerのコンテナ仕様は、2017年に標準化され、現在に至るまでコンテナ技術の基盤になっています。
今回はここまでとなります。
Dockerを使うにはまずインストールをする必要があるため、次回はインストールについて解説していきます。
関連リンク
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。