Chapter 03

1部: Docker とは

ほげさん
ほげさん
2022.03.21に更新

仮想化技術について学んだので、このページではその1つである Docker について学びます。

このページでは Docker Engine や Docker Desktop などの Docker Xxx という名称のものを整理します。

Docker 初学者の方はいきなり Docker に関係する用語が出てきて少し大変かもしれませんが、2部からのメインとなる Docker Engine を正しく捉えるためにがんばりましょう。

Docker について調べるとよく耳にする「コンテナ」と「イメージ」と「Dockerfile」については、2部全体を使い説明します。

Docker とは

Docker はコンテナ型仮想化を用いてアプリケーションの開発や配置を行うための、Docker 社の開発しているプラットフォームです。

2013 年のリリース当初は 「Docker」は単一のアプリケーションを指す言葉だったようですが、標準化と発展に伴いさまざまなコンポーネントを含むようになり、今は「Docker」はプラットフォームであるとされているようです。
Docker という単語がなにを指しているかは結構曖昧ですが、この本ではプラットフォームのこととして使います。

このページではそのプラットフォームに含む Docker Xxx という名前の要素について、要点だけ簡単に整理します。

  • Docker Engine
  • Docker CLI
  • Docker Desktop
  • Docker Compose
  • Docker Hub

また、次の要素はこの本では扱わないため、ここで簡単に触れて 今は学ばない範囲とマーク しておきます。

  • ECS / GKE
  • ECR / GCR
  • Kubernetes

Docker Engine とは

Docker Engine が 【 1部: 仮想化とは 】 で紹介したコンテナ型仮想化ソフトウェアの部分です。
これによりアプリケーションをコンテナとして扱うことができるようになります。

Docker のコンテナは Linux のカーネルと機能を使って動いているため、Docker Engine は Linux でしか動きません。

要約すると コンテナを乗せる部分 で、Linux で動く ソフトウェアです。

image

また、Command Line Interface ( CLI ) も Docker Engine に提供されます。

まさに Docker のコア部分と言えるでしょう。

Docker CLI とは

Docker Engine に提供され、docker rundocker build のような docker ではじまるコマンドで Docker に命令をすることができます。

要約すると コマンドのこと で、普段もっとも目にする想像しやすい部分でしょう。

image

ちなみに docker コマンドは dockerd というデーモンに命令を伝え containerd というランタイムを操作しますが、一般に dockerdcontainerd は隠蔽されており意識することはありません。

Docker Desktop とは

Docker Desktop は Windows や Mac で Docker を使うための GUI アプリケーションです。

Docker CLI ではなく GUI でコンテナなどを確認したり停止したりすることができます。

Docker Desktop には Docker Engine や Linux のカーネルが含まれている ため、Linux 以外の OS でも Docker Engine を動かすことができるようになります。

一般に「Windows や Mac にホストマシンに Docker をインストールする」とは「Docker Desktop アプリケーションをインストールする」ということになるでしょう。[1][2]

要約すると Windows か Mac で Docker を使おうと思ったときにインストールする Docker 一式が入った GUI アプリケーション です。

image

Docker Desktop には Docker Compose や Kubernetes なども含まれています。

インストールとアカウントについて

Docker Desktop は ドキュメントサイト を読み進めると Docker Hub からダウンロードできます。
ドキュメントには Docker for Windows や Docker for Mac と書いてありますが、それぞれ Docker Desktop のことなので安心してください。

以降この本では Docker Desktop がインストールしてあるものとして進めます。

Docker Desktop には Docker ID を使って Sign in することができますが、アカウントを作らなくても十分活用できます。
Sign in するメリットについては ダウンロード率制限 などを見てみてください。

Docker Compose とは

Docker Compose は Docker CLI をまとめて実行してくれる便利なツールで、docker compose up のような docker compose ではじまるコマンドを提供してくれます。

「2つのコンテナを起動し」「それぞれのネットワークを構築し」「コンテナのデータをホストマシンと共有させる」という複雑なコマンドを、Yaml ファイルを書くことで実現できるツールです。

要約すると docker コマンドをまとめて実行してくれるようなもの です。

image

Docker Compose を導入すれば 極めて簡単同じ構成を再現 できるようになります。

この本の3部では Docker CLI だけで構築した環境を Docker Compose に置き換えるところまで経験できますが、あまりの手軽さに驚くことでしょう。

Docker Hub とは

Docker Hub は Docker のイメージレジストリである Saas サービスです。

公開されているイメージを git pull したり、構築したイメージを git push する先のように理解すれば、まずは大丈夫です。

要約すると イメージの GitHub のようなもの です。

image

Docker Hub からのイメージの取得には、アカウントやログインは必要ありません。

ECS / GKE とは

Amazon Elastic Container Service ( ECS )Google Kubernetes Engine ( GKE ) は、コンテナ管理サービスです。

要約すると Docker Engine の入った Linux のこと で、ローカル開発に使ったコンテナをそのままデプロイできる場所 のことです。

image

ローカル開発環境の構築に限定すれば必要ないため、この本ではこれらのコンテナ管理サービスは使用しません。

ECR / GCR とは

Amazon Elastic Container Registry ( ECR )Google Container Registry ( GCR ) は、非公開のイメージのレジストリです。

要約すると プライベートな Docker Hub のこと で、「商用サービスのイメージを Docker Hub で公開したくないけど、レジストリに登録しないとデプロイできない」というときなどに使うことになります。

image

ローカル開発環境の構築に限定すれば GitHub と Dockerfile で十分なので、この本ではこれらの非公開レジストリは使用しません。

Kubernetes とは

Kubernetes ( 略して k8s とも ) は多数のコンテナを管理するオーケストレーションソフトウェアで、kubectl apply のような kubectl ではじまるコマンドを提供してくれます。

オーケストレーションにより、ロードバランサーの作成やアクセス集中時のスケーリングなどが簡単に実現できるようになります。

要約すると コンテナを運用するためのツール です。

image

Kubernetes も Docker Desktop に含まれていますが、開発環境の構築にここまで必要になることはまずないので、この本では Kubernetes は使用しません。

ちなみにオーケストレーションツールは docker コマンドではなく dockerdcontainerd を直接使っています。

Docker Desktop の有償化について

2021/08/31 に Docker 社が Docker Desktop の有償化を発表しました。

https://www.docker.com/blog/updating-product-subscriptions/

端的に言えば内容は次の通りです。

  • Docker Desktop は次の場合を除き有償化するぞ
    • スモールビジネス ( 従業員 250 未満 & 年間利益 1,000 万ドル未満 )
    • 個人利用、教育利用、非商用利用
    • オープンソース
  • 新しい利用規約は 2021/08/31 ( 発表日 ) から有効だぞ
  • 2022/01/31 までは猶予をやるぞ
  • Docker Engine や Docker CLI などの機能は変わらないぞ
  • 有料プランでは新機能を提供するぞ
    • e.g. Docker Hub でプライベートリポジトリを作れる
    • e.g. イメージの脆弱性スキャンができる
    • e.g. Docker Hub のチームやロールを作ったり、監査ログを取れる

この本は教育利用なので特に有料プランの契約は必要ありません。

有料プランに対応する場合は Docker ID を使い Docker Hub にログインします。

大規模ビジネスだが有料プランを契約しない場合は「Podman のような Docker 互換のあるコンテナ型仮想化ソフトウェアを使う」や「WSL や Lima のような仮想 Linux を起動して Docker Desktop を使わずに Docker Engine を直接使う」といった対応が必要になります。

いずれにせよ 有償化するのは大規模ビジネスでの Docker Desktop 利用 であり Docker 全てが使えなくなるわけではない ので、依然として Docker を学ぶ価値はあるでしょう。

まとめ

長くなってしまったので、簡潔にまとめます。

  • Docker Engine は コンテナを乗せるソフトウェア
  • Docker CLI は コンテナなどを操作するコマンド
  • Docker Desktop は Linux カーネルや Docker 一式が入ってる GUI アプリケーション
  • Docker Compose は コマンドをまとめて実行してくれるツール
  • Docker Hub は イメージレジストリの Saas サービス
  • ECS / GKE は Docker Engine の入ったコンテナ管理サービス
  • ECR / GCR は 非公開のイメージレジストリ
  • Kubernetes は 起動中のコンテナを見てくれるソフトウェア

混乱してしまったときは立ち返ってみてください。

脚注
  1. Windows で Hyper-V が利用できない場合に VirtualBox を使い Docker を動かす Docker Toolbox というものもありますが、ここでは取り扱いません。 ↩︎

  2. Linux や Windows の WSL では Linux カーネルを入れる必要がないため、一般には Docker Desktop を使いません。 ↩︎