10 分で入門する Docker(概念編)
Docker を使う上で最低限必要な知識のみを厳選して説明していきます
- この記事を読んで分かること
- 前提条件
- Docker 使うと何が嬉しいの?
- Docker とは何か?
- Docker コンテナとは何か?
- Docker イメージとは何か?
- Docker レジストリとは何か?
- まとめ
この記事を読んで分かること
- Docker を使うメリットが分かる
- 公式ドキュメントにある下図の意味が分かる
- ※具体的な Docker コマンドについてはこの記事では紹介しません
※まず Docker を動かしてみたい方は以下の記事で紹介しているので、参照して下さい
前提条件
- 対象者
- Docker の全体像をサクッとつかみたい人
- Docker やコンテナ技術を聞いたことはあるけど、よく分かってない人
- この記事で紹介しないこと
- 具体的な Docker コマンド
- Dockerfile、マウント、ネットワークなど
Docker 使うと何が嬉しいの?
Docker を使う利点は主に以下の 2 点だと思っています
- Docker がインストールされていれば環境の横展開(共有・複製等)が容易
- 他の仮想化技術に比べて軽量で高速のため、スクラップ&ビルドが容易
以降の説明ではこの 2 点に絡めて説明をしていこうと思います
Docker とは何か?
- 仮想化技術の 1 つ
- CLI から Docker コマンドを叩くことで利用できる
仮想化技術の 1 つ
1 台のホストマシンから複数の OS を同時に動作させることが出来ます
(Windows PC 上で Ubuntu の環境を立ち上げるなど)
Docker はコンテナ型仮想化技術と呼ばれ他にもいくつか仮想化技術の種類がありますが コンテナ型仮想化技術である Docker は比較的高速です 参考: 仮想化技術の違いを比較(IT zoo)
CLI から Docker コマンドを叩くことで利用できる
Mac であればの CLI(Terminal など)から Docker コマンド(docker build
など)を叩いて利用します
コマンドに応じて Docker クライアントが Docker デーモンとやりとりして動作します
(※ユーザは Docker デーモンと直接やり取りせず、原則 docker コマンドを叩くだけで OK です)
Docker コンテナとは何か?
Docker を端的に示しているのが上記のロゴです
- クジラ: Docker が動作しているホストマシン(PC とかサーバとか)
- クジラが背負っている1つ1つの箱: コンテナ
それぞれのコンテナは独立した実行環境になっています
(「Ubuntu + Nginx + Python」、「CentOS + MySQL」とか)
また、クジラ(ホストマシン)からコンテナ(実行環境)の追加・削除は容易に行えます
Docker コンテナで出来ること
コンテナ(実行環境)同士は独立していて、追加・削除は容易なので以下のことが可能です
- 利用したいコンテナを起動するだけで環境構築が終わる
- Docker さえインストールされていればホスト OS の違いを気にせず同じ実行環境を利用できる
- 独立というより、自立しているというイメージ(もちろん Docker は必要だけど...)
- コンテナが壊れたり、必要なくなったりしても削除&再作成(スクラップ&ビルド)すれば OK
- テスト用のコンテナを作成してテストを実行し終わったらコンテナを破棄するとか
- 新しい技術を試しに使ってみる検証環境を作って、終わったら破棄するとか
- Web サーバなどのスケールアウトが容易
- 負荷のかかる Web サーバなどは負荷を分散するためにサーバを追加することがあります
- Docker であれば同じコンテナを追加するだけで済みます
Docker コンテナを利用しない場合
といった手間がかかりますが、Docker であれば後述の設定ファイル・コマンドを打つだけで済みます
Docker イメージとは何か?
Docker イメージはコンテナを作成する情報が詰まっているものです
Docker イメージがあれば、それに応じた Docker コンテナを作成できます
(逆にコンテナからイメージも作成できますが、最初は無視して OK です)
ここでもう一度、公式ドキュメントにある全体像を見てみます
上図には Ubuntu(OS)と Redis(インメモリ DB)のイメージが用意されており、 Ubuntu のイメージから Ubuntu のコンテナができていることが分かると思います
Docker イメージで出来ること
Docker イメージに対応するコンテナを起動できるので以下のことが可能です
- Docker イメージを他のホストマシンに渡すことで同じ実行環境(コンテナ)を利用できる
- 1 つの Docker イメージから同じコンテナを複数起動できる
Docker レジストリとは何か?
前の章で
Docker イメージを他のホストマシンに渡すことで同じ実行環境(コンテナ)を利用できる
と紹介しましたが、「どうやって他のホストマシンに渡すの?」という疑問が生じます
メール等で送ったりするのは面倒なので、レジストリが用意されています
公式にはDocker Hubというレジストリが用意されており、これを使うことが多いです
レジストリには Docker イメージが共有されており、docker コマンドを叩くだけでホストマシンに Docker イメージをダウンロードできます
まとめ
本記事では公式ドキュメントにある下図について紹介しました
Docker を使うことで
- 手順書を書く
- ホスト OS の違いを加味してスクリプトを書く
といった作業から解放され
- Docker がインストールされていれば環境の横展開(共有・複製等)が容易
- 他の仮想化技術に比べて軽量で高速のため、スクラップ&ビルドが容易
というメリットがあることを紹介しました