こんにちはフロントエンドエンジニアのまさにょんです!
今回は、Dockerの基本用語について解説していきます。
以前に、Dockerの新旧CLIについて解説しました。
Dockerの新旧CLIについて知らない方は、ぜひこちらもCheckしてみてください。
目次
- 1 なぜDockerは難しく感じるのか?
- 2 Dockerの基本用語を理解する
- 2.1 1. Docker: コンテナ型の仮想環境を作成・配布・実行するためのプラットフォーム
- 2.2 2. Docker Engine: 3つの構成要素からなるDockerアプリケーション
- 2.3 3. Docker Hub: Docker版のGitHub(Docker-Imageの共有サービス)
- 2.4 4. Docker Image: Docker Containerの元となる設計図
- 2.5 5. Docker Container: Dokcer Image から作成された仮想サーバー
- 2.6 6. Docker file: Docker Image の設計図
- 2.7 7. Docker Compose: 複数の Docker Container を定義・実行するツール
- 3 Dockerの学習・参考書
- 4 参考・引用
- 5 最近の投稿
なぜDockerは難しく感じるのか?
なぜDockerは難しく感じるのか、少しだけ理解してきたからこそ思うのは、次の2点にあると思っています。
- Docker初心者を混乱させる Docker関連のCLI 多すぎ問題!
- Docker用語いろいろありすぎ問題!
- Dockerエコシステム(周辺のDocker関連システム)がいろいろある問題!
まず「Docker初心者を混乱させる Docker関連のCLI 多すぎ問題」に関しては、
以前の記事である『docker container/image コマンド | Docker-CLIの新旧コマンドを比較』にて紹介した「docker container / image」などのDocker-CLIに新旧コマンドがあることや、
Docker-ComposeのCLIもあることから、CLIが多く初心者には混乱を招くと思っています。
2つ目・3つ目の「Docker用語いろいろありすぎ問題!」と
「Dockerエコシステム(周辺のDocker関連System)がいろいろある問題」に関しては、
Docker fileやDocker Compose, Docker Hubなどなど挙げるとたくさんありますし、
さらに、Dockerを学び始めた当初は「Docker ImageとDocker Containerって何? よくわからん」って思っていました。
今回は、Dockerの基本用語や、Docker関連のシステム(Dockerのエコシステム)について基本的な点を解説していきます。
つまり、2番目と3番目の問題を少しでも解決するための記事になります。
Dockerの基本用語を理解する
1. Docker: コンテナ型の仮想環境を作成・配布・実行するためのプラットフォーム
Docker社が開発した、コンテナ型の仮想環境を作成・配布・実行するためのプラットフォーム(platform)です。
プラットファーム(platform)は、土台, 基盤, Base-System と言った意味合いの英単語です。
SNSのプラットフォーマーはTwitterやInstagramであったり、
ChartAppのプラットフォーマーはLINEやFacebook – Messengerだったり、
検索エンジンのプラットフォーマーはGoogleだったりと様々な分野で、その分野の土台となるシステムを提供するプラットフォーマーがいます。
少し話は、脱線しましたが、Dockerもまた仮想環境を簡単に作成して、配布・実行できると仮想環境構築のプラットフォームです。
2. Docker Engine: 3つの構成要素からなるDockerアプリケーション
Docker Engine は、Dockerの核となるアプリケーションです。
次の説明がわかりやすいので、引用します。
Docker Engine は3つの主なコンポーネント(構成要素)を持つクライアント・サーバ型アプリケーションです。
・サーバはデーモン・プロセスと呼ばれる長期間実行するプログラムの種類
・インターフェースを規定する REST API は、プログラムがデーモンと通信に使うものであり、何をするか指示
・コマンドライン・インターフェース(CLI)クライアント
CLI は Docker REST API のスクリプトもしくは直接 CLI コマンドを使い、Docker デーモンを制御または対話します。
多くの他の Docker アプリケーションは、根底となる API と CLI を利用します。
デーモンは Docker オブジェクトを作成・管理します。
Docker オブジェクトには、イメージ、コンテナ、ネットワーク、データ・ボリュームなどを含みます。
引用元: Docker-Docs-ja: Docker Engine とは何ですか?
上記にあるように、Dockerの核となるコンポーネントは、次の3つです。
- Docker CLI : Docker デーモンを制御または対話するためのCLI
- REST API: Docker デーモンを制御または対話するためのAPI
- Dockerデーモン: イメージ, コンテナ, ネットワーク, データ・ボリュームなどのDockerオブジェクトを管理
3. Docker Hub: Docker版のGitHub(Docker-Imageの共有サービス)
Docker-Imageをクラウド上で共有できるサービスで、Docker版のGitHubのようなものです。
自分で作ったコンテナをアップロードしてチームでバージョン管理をしたり、
既に公開されているコンテナをダウンロードして、簡単に環境を作るために必要不可欠なDockerのサービスです。
4. Docker Image: Docker Containerの元となる設計図
Docker Imageは、OSやアプリケーションがインストールされたテンプレート(ファイル)であり、
Docker Container を作成するための土台です。
Docker Image を元に、Docker Container が作られているので、設計図のようなものと考えて間違いないです。
Docker イメージとはコンテナの土台です。
docker run を実行する度に、どのイメージを使うのか指定します。
Docker はダウンロードしたイメージを Docker ホスト上に保管しており、それらを見ることができます。
もしホスト上にイメージがなければ、Docker はレジストリからイメージをダウンロードします。
引用元: docker-docs-ja: イメージの構築
ローカルの Docker に必要な Image ない場合は、Docker CLI を使って、Docker Hub から Image を Pullする(Installする)ことができます。
docker image pull イメージ名
Docker Image は、先述した Docker Hub からダウンロードする以外にも、Docker file を元に自分で作ることもできます。
Docker file に関しては、後述します。
5. Docker Container: Dokcer Image から作成された仮想サーバー
Docker Container(サーバー)とは、Docker Image から生成された仮想サーバーのことです。
Docker Image を「実体化」(Instance)したものであり、Container内では Docker Imageに基づいて環境が構築されます。
アプリケーションの実行環境が入った箱(Container)であり、外部の環境からは隔離された独立した環境(Container)です。
docker container run イメージ名
コンテナとは、イメージが実行状態となったインスタンスのことです。
コンテナに対する生成、開始、停止、移動、削除は Docker API や CLI を使って行われます。
コンテナは、複数のネットワークへの接続、ストレージの追加を行うことができ、
さらには現時点の状態にもとづいた新たなイメージを生成することもできます。
デフォルトでは、コンテナは他のコンテナやホストマシンとは、程よく分離されています。
コンテナに属するネットワーク、ストレージ、基盤となるサブシステムなどを、
いかにして他のコンテナやホストマシンから切り離すか、その程度は制御することが可能です。
コンテナはイメージによって定義されるものです。
またこれを生成、実行するために設定したオプションによっても定義されます。
コンテナを削除すると、その時点での状態に対して変更がかかっていたとしても、永続的なストレージに保存されていないものは消失します。
引用元: docker-docs-ja: コンテナ
6. Docker file: Docker Image の設計図
Dockerfileとは、新しく Docker Image を作成するための手順を記したテキストファイルになります。
一言で説明すると、Docker Imageの設計図になります。
Docker file には、どのような Container にするのかをコマンドを書いて表現します。
Docker Hub 上で公開されている Docker Image をそのまま使うのではなく、
必要に応じてカスタマイズした Docker Image を作成したい時に Docker file を作ります。
Docker file を用意して、Docker Container を作る場合は、
Docker file => Docker Image => Docker Container
という順番で最終的に Docker Container が作られます。
Docker は Dockerfile から命令を読み込み、自動的にイメージをビルドできます。
Dockerfile はテキストファイルであり、イメージを作り上げるために実行するコマンドライン命令を、
すべてこのファイルに含められます。
docker build を実行すると、順次コマンドライン命令を自動化した処理を行い、
ビルド結果となるイメージが得られます。
引用元: docker-docs-ja: Dockerfile リファレンス
7. Docker Compose: 複数の Docker Container を定義・実行するツール
Docker Compose は、複数の Docker Container で構成されるアプリケーションを定義、実行するツールです。
複数の Docker Container で構成されるアプリケーションについて、
各 Container の起動・停止や、Docker Image の Build などを「 docker-compose.yml 」というYAML(ヤメル)ファイルにまとめて管理・実行できるツールです。
- docker-compose.yml という名前で yml ファイルを作成
- docker-compose up のコマンドを実行
これだけでアプリケーション全体が起動・実行されます。
AWSのCloudFormation を使ったことがある人は、CloudFormation と似ていると感じるかもしれません。
Compose とは、複数のコンテナを定義し実行する Docker アプリケーションのためのツールです。
Compose においては YAML(ヤメル) ファイルを使ってアプリケーションサービスの設定を行います。
コマンドを1つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います。
Compose は本番環境、ステージング環境、開発環境において動作し、
CI ワークフローとしても利用することができます。
Compose を使うには、基本的に3つのステップを踏みます。
アプリケーション環境を Dockerfile に定義します。こうしてその環境は再構築が可能となります。
アプリケーションを構成するサービスを docker-compose.yml ファイル内に定義します。
こうすることで、各サービスは独立した環境において起動することになります。
最後に、docker-compose up を実行したら、Compose はアプリケーション全体を起動・実行します。
引用元: docker-docs-ja: Docker Compose 概要
Dockerの学習・参考書
参考・引用
- docker-docs-ja: Docker Engine とは何ですか?
- docker-docs-ja: イメージの構築
- docker-docs-ja: コンテナ
- docker-docs-ja: Dockerfile リファレンス
- docker-docs-ja: Docker Compose 概要