この記事では、Dockerの概要について説明します。
■ Dockerのコンポーネント
この節では、Dockerの全体像を理解するために、Dockerのコンポーネントを紹介していきます。Dockerには以下のコンポーネント(部品)があります。
- Docker Engine
- Docker Compose
- Docker Swarm
これらを1つずつ説明していきます。
・ Docker Engineとは
過去の記事で、コンテナを実行・管理するのはコンテナエンジンであると説明しました。Dockerの場合、コンテナエンジンにあたるのがDocker Engineです。
過去の記事はこちら↓
Docker Desktopを起動すると、Docker Engineが起動します。Docker Engineは以下のように、3つのコンポーネント(構成要素)を持つクライアント・サーバ型アプリケーションです。
参照:https://docs.docker.jp/v1.12/engine/understanding-docker.html#docker-engine
・ docker CLI
docker CLIとは、dockerコマンドを実行するインターフェースです。つまり、dockerコマンドのことです。
・ REST API
docker CLIや外部ツールと通信するためのREST APIです。例えば、docker CLIからのリクエストを受け付けて、dockerデーモンにリクエストを送ります。
・ dockerデーモン
コンテナの作成・管理・実行を行うバックグラウンドプロセスです。
つまり、Docker=Docker Engineのことです。そして、Docker Engineが動いてないと、コンテナを実行できません。Dockerの心臓と言えるのがDocker Engineです。
Docker Desktopを使うと、1つのマシンにクライアント(docker CLI)とサーバー(REST APIとdockerデーモン)を同居させることになります。
補足:コンテナランタイムとは
コンテナエンジンの中には、コンテナランタイムが含まれています。コンテナランタイムとは、コンテナを実際に起動・停止する低レイヤーのソフトウェアのことです。
つまり、コンテナエンジンとコンテナランタイムは以下のような役割を担っています。コンテナエンジン:コンテナ全体の管理を行う「司令塔」
コンテナランタイム:実際にプロセス(コンテナ)を起動・停止する「実行部隊」
なお、Dockerではcontainerd(コンテナディー)というコンテナランタイムが使われています。
・ Docker Composeとは
Docker Composeとは、複数のDockerコンテナを定義・構成・一括管理できるツールです。
通常、アプリケーションには複数のサーバーが必要です。例えば、Webアプリケーションを動かすためには、Webサーバー、APサーバー、DBサーバーが必要です。これらのコンテナを用意して、1つ1つ順番に起動していくのは大変です。
そこで、Docker Composeを使います。複数のコンテナを1つの定義ファイル(docker-compose.yml)に定義しておきます。その定義ファイルを使用すれば、1つのコマンドで複数のコンテナを起動できます。
Docker Composeでは、コンテナを起動する順番も定義できます。例えば、DBサーバーのコンテナを起動したあとに、APサーバーのコンテナを起動します。そうしないと、「DBがない」と、アプリケーションがエラーを起こす可能性があるからです。
・ Docker Swarmとは
コンテナを本番環境で運用していくためには、オーケストレーションツールが必要です。Docker Swarmは、Docker公式のオーケストレーションツールです。ですが、Docker Swarmはオーケストレーションツールの覇権争いに負けて、シェアが低いです。
参照:https://sysdig.com/blog/2018-docker-usage-report/
古いデータですが、2018年時点でDocker Swarmのシェアは11%です。一方、Kubernetesのシェアは51%あります。そのため、Docker Swarmを使うことはほとんどありません。
一般的には、オーケストレーションツールとしてKubernetesを使います。Kubernetesであれば、どの環境(オンプレミスまたはクラウド)でも使用できるからです。
■ Dockerfileとは
Dockerfileとは、Dockerイメージを作成するための手順を記載したファイルです。その手順を実行したDockerイメージを構築できます。自分たちが作ったアプリケーションを載せたコンテナを作成するためには、Dockerfileを使ってDockerイメージを作成する必要があります。
Dockerfileさえあれば、開発〜本番まで同じ環境をすぐに構築できます。開発チーム内でDockerfileを共有すれば、開発環境の構築もすぐにできます。Dockerで一番大切なのが、このDockerfileです。
■ Docker Hubとは
Dockerレジストリとは、Dockerイメージを保存・共有・配布するためのサーバー(またはサービス)のことです。簡単に言うと、Dockerイメージの「保管庫」です。
Docker Hubとは、Dockerレジストリのクラウドサービスです。DockerイメージのGitHubみたいなものです。自作のイメージをpush(アップロード)したり、公開されている公式イメージをpull(ダウンロード)できます。なお、Docker Hubからpullしたイメージなどは、ローカルのDockerレジストリに保存されています。
・ 使い方
"DockerHub"と検索すれば、すぐにDocker Hubにアクセスできます。
検索すると、すぐに色々なイメージが見つかります。上記はNginxのイメージを検索した結果です。検索結果から、イメージをクリックすると、そのイメージの詳細な情報が見れます。
この画面で、イメージをpullする時に指定できるタグ(バージョン)や、イメージを使う時に必要な情報などを確認できます。初めて使うイメージについては、このページを確認するとよいでしょう。
注意点:公式イメージを使う
Docker Hubには、誰でもイメージをアップロードできます。そのイメージにウィルスなどを含ませることも可能です。そのため、基本的にはDocker公式のイメージを使いましょう。
検索画面の左メニューにて、Docker公式イメージなどで絞り込むことができます。
■ Dockerのプラン
Dockerにはいくつかプランがあります。学習目的であれば、無料プランで十分です。
プラン名 | 対象 | 主な用途 |
---|---|---|
Personal | 個人・学習者 | 学習、個人プロジェクト用 |
Pro | 個人開発者、フリーランス | 小規模な商用プロジェクト |
Team | 小~中規模チーム | チームでのコラボレーション |
Business | 大規模企業・組織 | 企業・セキュリティ強化目的 |
価格や詳細な機能などは変動する可能性があるため、以下の公式サイトを参照してください。
【公式サイト】
https://www.docker.com/ja-jp/pricing/
・無料プラン
なお、Personalが無料プランです。こちらのプランに登録すると、以下の機能が使えます。
- プライベートリポジトリ(1個)
- パブリックリポジトリ(Docker Hub)に作成したイメージをpush
- イメージのpull回数(200回/6時間)
- …etc
Docker Hubにあるイメージは、誰でもpullできます。一方、プライベートリポジトリは限られたユーザーだけがイメージをpush(アップロード)したり、pullできます。このプライベートリポジトリが1つだけ使用できます。これはつまり、1つのアプリケーションのDockerイメージを保管できるということです。
また、Docker Hubにアカウントを作成していない場合、イメージのpull回数は100回/6時間となります。
・ 有料プラン
有料プランでは、以下のようなことができます。
- Dockerのサポート
- CI/CD連携の機能
- プライベートリポジトリ(無制限)
- イメージのセキュリティ診断
- …etc
有料プランでは、プライベートリポジトリが無制限で使用できます。つまり、複数のDockerイメージを管理できます。実際の開発では、複数のDockerイメージを作成します。そのため、本番環境を構築するためには、以下の対応が必要になります。
- Dockerの有料プランを使う
- クラウドサービスのレジストリを使う
- Dockerレジストリのサーバーを構築する
補足:クラウドサービスのレジストリ
AWSなどのクラウドサービスでもDockerレジストリのサービスがあります。クラウドサービスを利用する場合、そちらのレジストリサービスの使用を検討してみてください。
補足:Dockerレジストリサーバーの構築
Dockerレジストリのサーバーは自前で構築できます。ただし、サーバーを用意する必要があるため、サーバーの管理・運用が必要になります。
投稿のやる気につながるため、記事の内容が少しでも良いと思ったら、いいねや保存してくださいね。
なお、続きが気になる方は以下の書籍で全文を掲載しています。