関連記事

Docker基本コマンドまとめ

【Docker】Nginx+uWSGI+Flaskのコンテナ構築

Docker Composeでfirestoreのローカル環境を構築





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 c34c88b2Docker Composeとは、yaml形式の設定ファイルで複数のコンテナの管理ができるツールです。設定ファイルがあれば、コマンド1つでコンテナの実行ができます。
利用例としては、開発環境や自動テストの環境、単一ホストへのデプロイなどで使われるようです。
ここからはDocker Composeの基本的な使い方について解説します。
まずは、アプリケーション環境となるDockerイメージを構築するDockerfileを用意します。
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
設定ファイルを元にコンテナの実行をします。
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のアプリをDocker Composeで実行してみます。
プロジェクト用のディレクトリを作成します。
1> mkdir docker-compose-djangopython: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/Dockerfileで利用していたrequirements.txtを作成します。
1Django>=1.8,<2.0
2psycopg2docker-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.txtdocker-compose runを使って、Djangoのプロジェクトを生成します。
1❯ docker-compose run web django-admin.py startproject composeexample .Djangoのプロジェクトが作成され、プロジェクト配下は以下のようになります。
1❯ ls
2Dockerfile composeexample docker-compose.yml manage.py requirements.txtDjangoのデータベース接続設定を行ます。
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}コンテナの実行をします。
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 ... donehttp://localhost:8000にアクセスするとDjangoアプリケーションにアクセスできます。
最後に実行したコンテナの停止と削除をします。
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