もう逃げない。基礎から学ぶDocker入門 / Docker Composeの概要（座学編）（6/9）

## はじめに

今まで、全然理解できていなくて逃げてたDockerに関して、しっかり理解していこうと思います。

https://www.docker.com/

コレまで、便利なんだろうなと思いながらも、逃げてました。

なので、開発環境では使いこなせるスキルにまでは理解したいと思います。

あと、暗記してたDockerコマンドを１つ１つ理解していきます。

以下のような順番で勉強していきます。

- [Dockerの概要（1/9）](https://qiita.com/ryosuketter/items/d7833182dced67713d27)
- [Dockerの基本操作（イメージの作成, コンテナの起動, 停止, 削除）（2/9）
](https://qiita.com/ryosuketter/items/c53352f1143366d8b9a9)
- [Dockerの基本操作（ログの出力, コンテナの中でプロセスを実行する方法, 使用していない Docker オブジェクトの削除）（3/9）](https://qiita.com/ryosuketter/items/5fd73b7311175a691dfe)
- [Dockerfileを使用したサーバー構築（座学編）（4/9）](https://qiita.com/ryosuketter/items/d9c3420be7da586225e8)
- [Dockerfileを使用したサーバー構築（実践編）（5/9）](https://qiita.com/ryosuketter/items/716a4c5e49795d494600)
- [Docker Composeの概要（座学編）（6/9）](https://qiita.com/ryosuketter/items/104a4eb38f8824eb6de9) :point_left_tone1: 今ここ
- [Docker Composeのよく使う基本操作（7/9）](https://qiita.com/ryosuketter/items/8bbd2c60392f443cfe23)
- [Docker Composeを使ってRailsの環境を構築する（8/9）](https://qiita.com/ryosuketter/items/91cd107794c1cbe358c6)
- [Docker上に構築したRailsをHeroku（本番環境）にデプロイ（公開）する（9/9）](https://qiita.com/ryosuketter/items/e3e68ce6ec572dc8905e)

## 学ぼう「Docker Composeの概要」

Dockerfileを作成し、そこからDockerイメージを生成し、そこからDockerコンテナを作成・起動させて、コンテナ上にあるWebサーバを作ってきました。

ただ、これだけではまだ実践的なWebアプリケーションの開発環境を作れるかというと、まだ足りないことがあります。

Webサービスって、1つのアプリケーションだけでは成り立ちませんよね。

アプリケーションサーバ、Webサーバ、DBサーバの連携が必要なケースの方が多いと思います。

Dockerで実践的なアプリケーションを構築する場合も、上記の連携に対応させるべく、コンテナ同士も連携させないといけません。

これを今の知識だけでやろうとすると、複数のコンテナを個別に操作しないといけないので難儀ですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/e7b5e388-60b5-529d-3e45-b45b74d39ec4.png)

https://engineer-ninaritai.com/what-docker-compose/

そんなとき、複数のアプリケーションをまとめて操作することをサポートするDockerのツールに、Docker Composeというものがあるそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/cb736c27-b9ae-9c0f-87d6-9e409daa8d4e.png)

https://engineer-ninaritai.com/what-docker-compose/

Docker Composeを用いた複数アプリケーションの操作には、docker-compose.ymlが必要だそうです。

今回は、それらの概要を学んでいきたいと思います。

### Docker Composeの概要

Docker Composeとは、公式ドキュメントでは

> Compose is a tool for defining and running multi-container Docker applications.

https://docs.docker.com/compose/

訳すと「Composeとは複数コンテナの Docker アプリケーションを定義・実行するツールです」といった意味です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/98f55860-bf91-20cb-a0d2-6d724c404309.png)

https://knowledge.sakura.ad.jp/21387/

Docker Composeは、「docker-compose.yml」というファイルにコンテナの構成情報を定義することで、同一のホスト上の複数のコンテナを一括管理できます。

docker-compose.ymlには、Webアプリケーションの依存関係（DB、Webサーバ、アプリケーションなど）をまとめて設定できます。

これをもとに、docker-composeコマンドを実行すると複数のコンテナをまとめて起動したり停止したりできます。

https://docs.docker.jp/compose/overview.html

続いて、「docker-compose.yml」の書き方について学んでいきます。

### docker-compose.ymlの概要

Docker Composeは「docker-compose.yml」というファイルに、アプリケーションサーバ、Webサーバ、DBサーバなど、システム内で稼働する複数のサーバ群の構成をまとめて定義します。定義ファイルはYAML形式で書かれています。

https://magazine.rubyist.net/articles/0009/0009-YAML.html

```yml:docker-compose.yml
version: '3'

services:
  db:
    image: mysql:8.0
  web:
    build: ...
```

`services`の配下に、コンテナを定義できます。

例では、dbのサービスとwebのサービスが定義されて、それぞれの詳細はその配下に記載していきます。

これで、Docker Composeの概要はおしまいです。

次回は、Docker Composeを使って、Railsの環境を構築したいと思います。

## アウトプット100本ノック実施中

https://qiita.com/ryosuketter/items/713474dbd009870e4103