これだけ知っていれば大丈夫。Docker の主要コンポーネント

# これだけ知っていれば大丈夫。Docker の主要コンポーネント

![Docker_主要_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362131/773537aa-bcf7-269a-16d0-c850cd9af360.jpeg)


これから本腰をいれてDockerを学習したいなと思っている人がDockerを学習すると、いろいろな単語出てきて混乱すると思いますが、最低限これだけ知っていれば、これからDockerを学習していく上で必ず役に立つと思いますので、下記のDockerの主要コンポーネントについて紹介ます。

* Docker Engine
* image
* container
* Repository (DockerHub)

## Docker Engine（Docker エンジン）

![Docker_主要_02_Engine.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362131/439c3d70-1b0e-dca6-61c2-384a707935d9.jpeg)


Docker EngineがDockerと言われているものの実態となり下記を含んでいます。

* Docker Daemon
* REST API
* Docker CLI（クライアント）

Docker DaemonはLinuxの1つのプロセスとして起動し動作します。Docker を利用する際は、Docker CLIのコマンドを使ってDocker Daemonへの命令を行います。REST APIはDaemonとCLIの架け橋の役割を担っています。

## image（Docker イメージ）

![Docker_主要_03_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362131/60aba564-8f90-189a-eedf-bb6024864b0d.jpeg)

imageとは、一言で説明すると読み込み専用（read-only）のテンプレートです。

ポイントは、read-onlyという点です。Dockerでは、このimageを基にcontainerを起動して利用します。詳細は後述しますが、今は、imageといのがread-onlyのテンプレートなんだという事だけ覚えておいてください。

## container（Docker コンテナ）

![Docker_主要_04_container.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362131/c3fcd07e-72fd-f393-18e9-785e3a47e7e5.jpeg)

containerはimageを基に作成するアプリケーションの実行環境です。
Docker 公式のimageは数多くあるのですが、例えばDocker公式のapacheのimageがあるのですが、このapacheのimageからcontainerを実行すると、apacheを簡単に利用する事ができます。

公式のapacheのimageから起動したcontainerには、設定が何もなされていないので個別の設定を加えて利用します。

Dockerでは、変更を加えたcontainerを基に新しいimageを作成することが可能です。

containerの特徴としては、1つのimageから複数のcontainerを作成することができ、かつContainer間は互いに分離されるため、個々のcontainerを安全に実行することが可能です。

## registry（Docker レジストリ）

![Docker_主要_05_Registry.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362131/097d3fc0-83bb-3e39-16cf-7586941f1af0.jpeg)

registryとは、imageを格納・配布する場所のことを指します。registryと混同しそうなコンポーネントとしてrepositoryがあります。

repositoryに関しては明確な定義はないですが、一般的には1つのアプリケーションのimageを管理し、TAGでバージョンを管理するのがrepositoryです。

registryは複数のrepositoryを管理する場所というイメージです。

通常はregistry に格納されているimageを自身のDocker Engine 上に持ってきてcontainerを起動し利用します。containerに設定を行い新しいimageを作成することが可能ですが、保存されるのは自身のDocker Engine上となり、このままでは自身のDocker Engine上でしか新しいimageを利用する事ができません。そこで、作成したimageをregistry上にアップすることが可能なのですが、そうすることで、作成したimageを別の任意のDocker Engine上で利用する事が可能となります。

#### Docker の公式レジストリサービス
Dockerの公式レジストリサービスとしてDocker Hubというサービスがあります。

Docker Hubで公開しているimageには、Dockerが公開しているOffical Imageとベンダーが公開しているVerified Publisherというimageがあり、2020年4月現在においては、Offical Imageとして161個、Verified Publisherとして305個のimageが公開されています。

#### Docker Hub の repositoryの種類
自身で作成したimageをDocker Hub にアップする際は、repositoryを作成しその中にimageをアップするのですが、Docker Hubには下記の2種類のrepositoryがあります。

* Public repository（一般公開されるレポジトリ）
* Private repository（一般公開されず、所有者しか利用できないリポジトリ）

用途に応じてPublicかPrivateを考慮しrepositoryを作成しましょう。

#### メジャーなレジストリサービス
Docker HubはDocker公式のレジストリサービスですが、他にもメジャーなレジストリサービスがあります。

* Amazon Elastic Container Registry（AWS）
* Container Registry（Google Cloud）
* Container Registry（Azure）
* Container Registry（Oracle Cloud）

メジャーどころのクラウドサービスも独自のレジストリサービスを提供しているので、ご自身の用途に合ったサービスを利用するとよいかと思います。

#### tips
チップスとなりますが、こちらのDocker blogの記事にある通り、2018年までは Docker Cloud、Docker Storeというサービスが利用可能でしたが、2019年からDocker Hubに統合されました。