0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

 この記事では、Dockerの概要について説明します。

■ Dockerのコンポーネント

 この節では、Dockerの全体像を理解するために、Dockerのコンポーネントを紹介していきます。Dockerには以下のコンポーネント(部品)があります。

  • Docker Engine
  • Docker Compose
  • Docker Swarm

 これらを1つずつ説明していきます。

・ Docker Engineとは

 過去の記事で、コンテナを実行・管理するのはコンテナエンジンであると説明しました。Dockerの場合、コンテナエンジンにあたるのがDocker Engineです。
4章-コンテナエンジン=Docker_Engine.png
過去の記事はこちら↓

 Docker Desktopを起動すると、Docker Engineが起動します。Docker Engineは以下のように、3つのコンポーネント(構成要素)を持つクライアント・サーバ型アプリケーションです。
4章-DockerEngineとは.png
参照: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デーモン)を同居させることになります。

補足:コンテナランタイムとは
 コンテナエンジンの中には、コンテナランタイムが含まれています。コンテナランタイムとは、コンテナを実際に起動・停止する低レイヤーのソフトウェアのことです。
4章-コンテナランタイムとは.png
 つまり、コンテナエンジンとコンテナランタイムは以下のような役割を担っています。コンテナエンジン:コンテナ全体の管理を行う「司令塔」
コンテナランタイム:実際にプロセス(コンテナ)を起動・停止する「実行部隊」
 なお、Dockerではcontainerd(コンテナディー)というコンテナランタイムが使われています。

・ Docker Composeとは

 Docker Composeとは、複数のDockerコンテナを定義・構成・一括管理できるツールです。

 通常、アプリケーションには複数のサーバーが必要です。例えば、Webアプリケーションを動かすためには、Webサーバー、APサーバー、DBサーバーが必要です。これらのコンテナを用意して、1つ1つ順番に起動していくのは大変です。

 そこで、Docker Composeを使います。複数のコンテナを1つの定義ファイル(docker-compose.yml)に定義しておきます。その定義ファイルを使用すれば、1つのコマンドで複数のコンテナを起動できます。
4章-DockerComposeとは.png
 Docker Composeでは、コンテナを起動する順番も定義できます。例えば、DBサーバーのコンテナを起動したあとに、APサーバーのコンテナを起動します。そうしないと、「DBがない」と、アプリケーションがエラーを起こす可能性があるからです。

・ Docker Swarmとは

 コンテナを本番環境で運用していくためには、オーケストレーションツールが必要です。Docker Swarmは、Docker公式のオーケストレーションツールです。ですが、Docker Swarmはオーケストレーションツールの覇権争いに負けて、シェアが低いです。
4章-オーケストレーションツールのシェア.png

参照:https://sysdig.com/blog/2018-docker-usage-report/

 古いデータですが、2018年時点でDocker Swarmのシェアは11%です。一方、Kubernetesのシェアは51%あります。そのため、Docker Swarmを使うことはほとんどありません。

 一般的には、オーケストレーションツールとしてKubernetesを使います。Kubernetesであれば、どの環境(オンプレミスまたはクラウド)でも使用できるからです。

■ Dockerfileとは

 Dockerfileとは、Dockerイメージを作成するための手順を記載したファイルです。その手順を実行したDockerイメージを構築できます。自分たちが作ったアプリケーションを載せたコンテナを作成するためには、Dockerfileを使ってDockerイメージを作成する必要があります。
4章-Dockerfileとは.png

 Dockerfileさえあれば、開発〜本番まで同じ環境をすぐに構築できます。開発チーム内でDockerfileを共有すれば、開発環境の構築もすぐにできます。Dockerで一番大切なのが、このDockerfileです。

■ Docker Hubとは

 Dockerレジストリとは、Dockerイメージを保存・共有・配布するためのサーバー(またはサービス)のことです。簡単に言うと、Dockerイメージの「保管庫」です。

 Docker Hubとは、Dockerレジストリのクラウドサービスです。DockerイメージのGitHubみたいなものです。自作のイメージをpush(アップロード)したり、公開されている公式イメージをpull(ダウンロード)できます。なお、Docker Hubからpullしたイメージなどは、ローカルのDockerレジストリに保存されています。

・ 使い方

 "DockerHub"と検索すれば、すぐにDocker Hubにアクセスできます。
4章-DockerHubの検索画面.png

 検索すると、すぐに色々なイメージが見つかります。上記はNginxのイメージを検索した結果です。検索結果から、イメージをクリックすると、そのイメージの詳細な情報が見れます。
4章-DockerHubの詳細画面.png

 この画面で、イメージをpullする時に指定できるタグ(バージョン)や、イメージを使う時に必要な情報などを確認できます。初めて使うイメージについては、このページを確認するとよいでしょう。

注意点:公式イメージを使う
 Docker Hubには、誰でもイメージをアップロードできます。そのイメージにウィルスなどを含ませることも可能です。そのため、基本的にはDocker公式のイメージを使いましょう。
 検索画面の左メニューにて、Docker公式イメージなどで絞り込むことができます。
4章-DockerHub-公式イメージ.png

■ 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レジストリのサーバーは自前で構築できます。ただし、サーバーを用意する必要があるため、サーバーの管理・運用が必要になります。


 投稿のやる気につながるため、記事の内容が少しでも良いと思ったら、いいねや保存してくださいね。

 なお、続きが気になる方は以下の書籍で全文を掲載しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?