集中力が10分しか持たないハチワレ先生

集中力が10分しか持たないハチワレ先生

技術メインの雑記ブログ

10 分で入門する Docker(概念編)

Docker を使う上で最低限必要な知識のみを厳選して説明していきます

この記事を読んで分かること

  • Docker を使うメリットが分かる
  • 公式ドキュメントにある下図の意味が分かる
    • ※具体的な Docker コマンドについてはこの記事では紹介しません

Docker全体像
Docker全体像

※まず Docker を動かしてみたい方は以下の記事で紹介しているので、参照して下さい

前提条件

  • 対象者
    • Docker の全体像をサクッとつかみたい人
    • Docker やコンテナ技術を聞いたことはあるけど、よく分かってない人
  • この記事で紹介しないこと
    • 具体的な Docker コマンド
    • Dockerfile、マウント、ネットワークなど

Docker 使うと何が嬉しいの?

Docker を使う利点は主に以下の 2 点だと思っています

  1. Docker がインストールされていれば環境の横展開(共有・複製等)が容易
  2. 他の仮想化技術に比べて軽量で高速のため、スクラップ&ビルドが容易

以降の説明ではこの 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 を端的に示しているのが上記のロゴです

  • クジラ: Docker が動作しているホストマシン(PC とかサーバとか)
  • クジラが背負っている1つ1つの箱: コンテナ

それぞれのコンテナは独立した実行環境になっています
(「Ubuntu + Nginx + Python」、「CentOS + MySQL」とか)
また、クジラ(ホストマシン)からコンテナ(実行環境)の追加・削除は容易に行えます

Docker コンテナで出来ること

コンテナ(実行環境)同士は独立していて、追加・削除は容易なので以下のことが可能です

  • 利用したいコンテナを起動するだけで環境構築が終わる
    • Docker さえインストールされていればホスト OS の違いを気にせず同じ実行環境を利用できる
    • 独立というより、自立しているというイメージ(もちろん Docker は必要だけど...)
  • コンテナが壊れたり、必要なくなったりしても削除&再作成(スクラップ&ビルド)すれば OK
    • テスト用のコンテナを作成してテストを実行し終わったらコンテナを破棄するとか
    • 新しい技術を試しに使ってみる検証環境を作って、終わったら破棄するとか
  • Web サーバなどのスケールアウトが容易
    • 負荷のかかる Web サーバなどは負荷を分散するためにサーバを追加することがあります
    • Docker であれば同じコンテナを追加するだけで済みます

Docker コンテナを利用しない場合

  • 手順書を書く
  • ホスト OS の違いを加味してスクリプトを書く必要がある

といった手間がかかりますが、Docker であれば後述の設定ファイル・コマンドを打つだけで済みます

Docker イメージとは何か?

Docker イメージはコンテナを作成する情報が詰まっているものです
Docker イメージがあれば、それに応じた Docker コンテナを作成できます
(逆にコンテナからイメージも作成できますが、最初は無視して OK です)

ここでもう一度、公式ドキュメントにある全体像を見てみます

Docker全体像
Docker全体像

上図には Ubuntu(OS)と Redis(インメモリ DB)のイメージが用意されており、 Ubuntu のイメージから Ubuntu のコンテナができていることが分かると思います

Docker イメージで出来ること

Docker イメージに対応するコンテナを起動できるので以下のことが可能です

  • Docker イメージを他のホストマシンに渡すことで同じ実行環境(コンテナ)を利用できる
  • 1 つの Docker イメージから同じコンテナを複数起動できる

Docker レジストリとは何か?

前の章で

Docker イメージを他のホストマシンに渡すことで同じ実行環境(コンテナ)を利用できる

と紹介しましたが、「どうやって他のホストマシンに渡すの?」という疑問が生じます
メール等で送ったりするのは面倒なので、レジストリが用意されています

公式にはDocker Hubというレジストリが用意されており、これを使うことが多いです
レジストリには Docker イメージが共有されており、docker コマンドを叩くだけでホストマシンに Docker イメージをダウンロードできます

まとめ

本記事では公式ドキュメントにある下図について紹介しました

Docker全体像
Docker全体像

Docker を使うことで

  • 手順書を書く
  • ホスト OS の違いを加味してスクリプトを書く

といった作業から解放され

  • Docker がインストールされていれば環境の横展開(共有・複製等)が容易
  • 他の仮想化技術に比べて軽量で高速のため、スクラップ&ビルドが容易

というメリットがあることを紹介しました

参考