【超基礎】Docker Compose

2021.07.29
2024.03.24
Docker
DjangoDocker ComposePostgreSQL

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

Docker Composeについて、基本的な使い方の解説と具体的な例としてDjango/PostgreSQLアプリを構築をしてみたいと思います。

Dockerについてはこちらで解説しています。

いまさらDocker入門

いまさらDocker入門

:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。

環境

DocerとDocker Composeのバージョンは以下のようになっています。

1docker --version
2Docker version 20.10.6, build 370c289
3
4docker-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

Legacy versions

3. コンテナの実行

設定ファイルを元にコンテナの実行をします。

1> docker-compose up

基本的なコマンド

基本的なコマンドを一部紹介します。

サービスをイメージからビルド

1docker-compose build [options]
docker compose build

docker compose build

Description

サービスを開始

1docker-compose start [options]
docker compose start

docker compose start

Description

サービスを作成・開始

1docker-compose up [options]
docker compose up

docker compose up

Description

サービスの停止

1docker-compose stop [options]
docker compose stop

docker compose stop

Description

サービスの削除

1docker-compose rm [options]
docker compose rm

docker compose rm

Description

サービスの停止・削除

1docker-compose down [options]
docker compose down

docker compose down

Description

コマンドの実行

1docker-compose run [options]
docker compose run

docker compose run

Description

コンテナ一覧の表示

1docker-compose ps [options]
docker compose ps

docker compose ps

Description

ログを表示

1docker-compose logs [options]
docker compose logs

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

プロジェクト配下は以下のようになります。

1ls
2Dockerfile         docker-compose.yml requirements.txt

5. Djangoプロジェクトの作成

docker-compose runを使って、Djangoのプロジェクトを生成します。

1docker-compose run web django-admin.py startproject composeexample .

Djangoのプロジェクトが作成され、プロジェクト配下は以下のようになります。

1ls
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. コンテナの実行

コンテナの実行をします。

1docker-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. コンテナの停止

最後に実行したコンテナの停止と削除をします。

1docker-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コマンドで複数コンテナを実行できる

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee