【超基礎】Docker Compose

はじめに

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

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

いまさらDocker入門
はじめにいまさらながらDockerについてまとめてみました。なるべく動かしながらDockerを理解していきたいと思います。DockerとはDockerとは、コンテナを活用した開発・運用を可能にするソフトウェアです。コンテナを使える...

環境

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

❯ docker --version
Docker version 20.10.6, build 370c289

❯ docker-compose --version
docker-compose version 1.29.1, build c34c88b2

Docker Composeとは

Docker Composeとは、yaml形式の設定ファイルで複数のコンテナの管理ができるツールです。設定ファイルがあれば、コマンド1つでコンテナの実行ができます。

利用例としては、開発環境自動テストの環境単一ホストへのデプロイなどで使われるようです。

基本的な使い方

ここからはDocker Composeの基本的な使い方について解説します。

1. Dockerfileの作成

まずは、アプリケーション環境となるDockerイメージを構築するDockerfileを用意します。

2. Composeファイルの作成

docker-compose.ymlファイルを作成します。

こちらが実行するコンテナの設定となります。

version: '3'              # docker-compose.ymlのフォーマットのバージョン
services:                 # サービス定義
  web:                    # webコンテナ(実行するコンテナ)
    build: .              # カレントディレクトリのDockerfileのビルド
    ports:                # ポートフォワーディング
     - "5000:5000"        # ホスト側:コンテナ側
  redis:                  # redisコンテナ(実行するコンテナ)
    image: "redis:alpine" # Docker Hubのredisイメージ取得

他にも設定オプションはありますので、下記ドキュメントを参照してください。

Compose file version 3 reference
Compose file reference

3. コンテナの実行

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

> docker-compose up

基本的なコマンド

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

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

docker-compose build [options]
docker-compose build
Build or rebuild services.

サービスを開始

docker-compose start [options]
docker-compose start
Starts existing containers for a service.

サービスを作成・開始

docker-compose up [options]
docker-compose up
Builds, (re)creates, starts, and attaches to containers for a service.

サービスの停止

docker-compose stop [options]
docker-compose stop
Stops running containers without removing them.

サービスの削除

docker-compose rm [options]
docker-compose rm
Removes stopped service containers.

サービスの停止・削除

docker-compose down [options]
docker-compose down
docker-compose down

コマンドの実行

docker-compose run [options]
docker-compose run
Runs a one-off command on a service.

コンテナ一覧の表示

docker-compose ps [options]
docker-compose ps
Lists containers.

ログを表示

docker-compose logs [options]
docker-compose logs
Displays log output from services.

Django/PostgreSQLアプリを構築してみる

具体的な使用例として、DjangoとPostgreSQLのアプリをDocker Composeで実行してみます。

1. ディレクトリの用意

プロジェクト用のディレクトリを作成します。

> mkdir docker-compose-django

2. Dockerfileの作成

python:3イメージを元にし、codeディレクトリを作成、必要なパッケージをインストールするようなイメージのDockerfileを定義します。

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

3. 必要なファイルの準備

Dockerfileで利用していたrequirements.txtを作成します。

Django>=1.8,<2.0
psycopg2

4. docker-compose.ymlの作成

docker-compose.ymlを作成します。

Djangoが動くwebサービスとPostgreSQLが動くdbサービスを定義しています。

version: "3"

services:
  db:
    image: postgres
    ports:
      - "5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

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

❯ ls
Dockerfile         docker-compose.yml requirements.txt

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

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

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

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

❯ ls
Dockerfile         composeexample     docker-compose.yml manage.py          requirements.txt

6. データベース接続設定

Djangoのデータベース接続設定を行ます。

composeexample/settings.pyのデータベース設定部分を修正します。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

7. コンテナの実行

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

❯ docker-compose up -d
Docker Compose is now in the Docker CLI, try `docker compose up`

Starting docker-compose-django_db_1 ... done
Starting docker-compose-django_web_1 ... done

http://localhost:8000にアクセスするとDjangoアプリケーションにアクセスできます。

8. コンテナの停止

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

❯ docker-compose down
Stopping docker-compose-django_web_1 ... done
Stopping docker-compose-django_db_1  ... done
Removing docker-compose-django_web_1                ... done
Removing docker-compose-django_db_1                 ... done
Removing docker-compose-django_web_run_51f0ec3cb8e3 ... done
Removing network docker-compose-django_default

まとめ

  • Docker Composeを使うと1コマンドで複数コンテナを実行できる

参考

タイトルとURLをコピーしました