【超基礎】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
FindaquickreferenceforDockerComposeversion3,includingDockerEnginecompatibility,memorylimitations,andmore.

3. コンテナの実行

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

> docker-compose up

基本的なコマンド

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

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

docker-compose build [options]
docker compose build
dockercomposebuild:Servicesarebuiltonceandthentagged,bydefaultas`project_service`.IftheComposefilespecifiesan(name,theimageistaggedwiththatname,substituting...

サービスを開始

docker-compose start [options]
docker compose start
dockercomposestart:Startsexistingcontainersforaservice.

サービスを作成・開始

docker-compose up [options]
docker compose up
dockercomposeup:Builds,(re)creates,starts,andattachestocontainersforaservice.Unlesstheyarealreadyrunning,thiscommandalsostartsanylinkedservices.The`dockercompos...

サービスの停止

docker-compose stop [options]
docker compose stop
dockercomposestop:Stopsrunningcontainerswithoutremovingthem.Theycanbestartedagainwith`dockercomposestart`.

サービスの削除

docker-compose rm [options]
docker compose rm
dockercomposerm:Removesstoppedservicecontainers.Bydefault,anonymousvolumesattachedtocontainersarenotremoved.Youcanoverridethiswith`-v`.Tolistallvolumes,use`dock...

サービスの停止・削除

docker-compose down [options]
docker compose down
dockercomposedown:Stopscontainersandremovescontainers,networks,volumes,andimagescreatedby`up`.Bydefault,theonlythingsremovedare:-Containersforservicesdefinedint...

コマンドの実行

docker-compose run [options]
docker compose run
dockercomposerun:Runsaone-timecommandagainstaservice.Thefollowingcommandstartsthe`web`serviceandruns`bash`asitscommand:```console$dockercomposerunwebbash...

コンテナ一覧の表示

docker-compose ps [options]
docker compose ps
dockercomposeps:ListscontainersforaComposeproject,withcurrentstatusandexposedports.```console$dockercomposepsNAMEIMAGECOMMANDSERVICECREATEDSTATUSPORTSexample-fo...

ログを表示

docker-compose logs [options]
docker compose logs
dockercomposelogs:Displayslogoutputfromservices.

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をコピーしました