【超基礎】Docker Compose
はじめに
Docker Composeについて、基本的な使い方の解説と具体的な例としてDjango/PostgreSQLアプリを構築をしてみたいと思います。
Dockerについてはこちらで解説しています。
いまさらDocker入門
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
環境
DocerとDocker Composeのバージョンは以下のようになっています。
1❯ docker --version
2Docker version 20.10.6, build 370c289
3
4❯ docker-compose --version
5docker-compose version 1.29.1, build c34c88b2
Docker Composeとは
Docker Composeとは、yaml形式の設定ファイルで複数のコンテナの管理ができるツールです。設定ファイルがあれば、コマンド1つでコンテナの実行ができます。
利用例としては、開発環境や自動テストの環境、単一ホストへのデプロイなどで使われるようです。
基本的な使い方
ここからはDocker Composeの基本的な使い方について解説します。
1. Dockerfileの作成
まずは、アプリケーション環境となるDockerイメージを構築するDockerfileを用意します。
2. Composeファイルの作成
docker-compose.yml
ファイルを作成します。
こちらが実行するコンテナの設定となります。
1version: '3' # docker-compose.ymlのフォーマットのバージョン
2services: # サービス定義
3 web: # webコンテナ(実行するコンテナ)
4 build: . # カレントディレクトリのDockerfileのビルド
5 ports: # ポートフォワーディング
6 - "5000:5000" # ホスト側:コンテナ側
7 redis: # redisコンテナ(実行するコンテナ)
8 image: "redis:alpine" # Docker Hubのredisイメージ取得
他にも設定オプションはありますので、下記ドキュメントを参照してください。
Legacy versions
3. コンテナの実行
設定ファイルを元にコンテナの実行をします。
1> docker-compose up
基本的なコマンド
基本的なコマンドを一部紹介します。
サービスをイメージからビルド
1docker-compose build [options]
docker compose build
Description
サービスを開始
1docker-compose start [options]
docker compose start
Description
サービスを作成・開始
1docker-compose up [options]
docker compose up
Description
サービスの停止
1docker-compose stop [options]
docker compose stop
Description
サービスの削除
1docker-compose rm [options]
docker compose rm
Description
サービスの停止・削除
1docker-compose down [options]
docker compose down
Description
コマンドの実行
1docker-compose run [options]
docker compose run
Description
コンテナ一覧の表示
1docker-compose ps [options]
docker compose ps
Description
ログを表示
1docker-compose logs [options]
docker compose logs
Description
Django/PostgreSQLアプリを構築してみる
具体的な使用例として、DjangoとPostgreSQLのアプリをDocker Composeで実行してみます。
1. ディレクトリの用意
プロジェクト用のディレクトリを作成します。
1> mkdir docker-compose-django
2. Dockerfileの作成
python:3
イメージを元にし、code
ディレクトリを作成、必要なパッケージをインストールするようなイメージのDockerfileを定義します。
1FROM python:3
2ENV PYTHONUNBUFFERED 1
3RUN mkdir /code
4WORKDIR /code
5ADD requirements.txt /code/
6RUN pip install -r requirements.txt
7ADD . /code/
3. 必要なファイルの準備
Dockerfileで利用していたrequirements.txt
を作成します。
1Django>=1.8,<2.0
2psycopg2
4. docker-compose.ymlの作成
docker-compose.yml
を作成します。
Djangoが動くweb
サービスとPostgreSQLが動くdb
サービスを定義しています。
1version: "3"
2
3services:
4 db:
5 image: postgres
6 ports:
7 - "5432"
8 environment:
9 - POSTGRES_DB=postgres
10 - POSTGRES_USER=postgres
11 - POSTGRES_PASSWORD=postgres
12 web:
13 build: .
14 command: python3 manage.py runserver 0.0.0.0:8000
15 volumes:
16 - .:/code
17 ports:
18 - "8000:8000"
19 depends_on:
20 - db
プロジェクト配下は以下のようになります。
1❯ ls
2Dockerfile docker-compose.yml requirements.txt
5. Djangoプロジェクトの作成
docker-compose run
を使って、Djangoのプロジェクトを生成します。
1❯ docker-compose run web django-admin.py startproject composeexample .
Djangoのプロジェクトが作成され、プロジェクト配下は以下のようになります。
1❯ ls
2Dockerfile composeexample docker-compose.yml manage.py requirements.txt
6. データベース接続設定
Djangoのデータベース接続設定を行ます。
composeexample/settings.py
のデータベース設定部分を修正します。
1DATABASES = {
2 'default': {
3 'ENGINE': 'django.db.backends.postgresql',
4 'NAME': 'postgres',
5 'USER': 'postgres',
6 'PASSWORD': 'postgres',
7 'HOST': 'db',
8 'PORT': 5432,
9 }
10}
7. コンテナの実行
コンテナの実行をします。
1❯ docker-compose up -d
2Docker Compose is now in the Docker CLI, try `docker compose up`
3
4Starting docker-compose-django_db_1 ... done
5Starting docker-compose-django_web_1 ... done
http://localhost:8000
にアクセスするとDjangoアプリケーションにアクセスできます。
8. コンテナの停止
最後に実行したコンテナの停止と削除をします。
1❯ docker-compose down
2Stopping docker-compose-django_web_1 ... done
3Stopping docker-compose-django_db_1 ... done
4Removing docker-compose-django_web_1 ... done
5Removing docker-compose-django_db_1 ... done
6Removing docker-compose-django_web_run_51f0ec3cb8e3 ... done
7Removing network docker-compose-django_default
まとめ
- Docker Composeを使うと1コマンドで複数コンテナを実行できる
参考
- Docker Compose 概要 — Docker-docs-ja 19.03 ドキュメント
- Compose ファイル・リファレンス — Docker-docs-ja 19.03 ドキュメント
- Compose file version 3 reference | Docker Documentation
- Overview of docker-compose CLI | Docker Documentation
- クィックスタート: Compose と Django — Docker-docs-ja 19.03 ドキュメント