🍁

docker-composeで環境を分ける

2021/09/30に公開

docker-composeで開発・本番等を環境ごと分けるやり方で、
現状自分が一番いいと思っている方法を記載します。

しかし、ディレクトリを2つ作ることになるので、あまり良い方法ではないかもしれないです。
同じコンテナ内でdockerコマンドを用いて2つのコンテナを作る方法がいいかもしれないので、
そこら辺も今後の課題として勉強いたします👍

本番環境用の環境を作成する

まずは/productionディレクトリを作成し、以下のファイルを生成します。

  • ini:.env
  • docker-compose.yml

次に各々のファイルを下記のように記載します。

.env
DOCKER_ENV=production
APP_PORT=8000
DB_PORT=6543
DB_DATABASE=sample
DB_USERNAME=sample
DB_PASSWORD=sample
docker-compose.yml
version: '3.7'

volumes:
    db-data:

services:
    app:
        container_name: app_${DOCKER_ENV}
	image: php:7.3.29-apache
        ports:
            - ${APP_PORT}:80
        volumes:
            - ./app:/var/www/html
        depends_on:
            - db
    db:
        container_name: bianchi-backend_postgres_${DOCKER_ENV}
        image: postgres:12-alpine
        ports:
            - ${DB_PORT}:5432
        environment:
            POSTGRES_USER: ${DB_USERNAME}
            POSTGRES_PASSWORD: ${DB_PASSWORD}
            POSTGRES_DB: ${DB_DATABASE}
            POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
            TZ: Asia/Tokyo
        hostname: postgres
        volumes:
            - db-data:/var/lib/postgresql/data

${.env}で設定したキーとdocker-compose.ymlに記載することで、
簡単に環境変数を呼び出すことができます。

開発環境用の環境を作成する

次に/developディレクトリを作成し、同じように以下のファイルを生成します。

  • ini:.env
  • docker-compose.yml

先ほどと同じように各々のファイルを下記のように記載します。

.env
DOCKER_ENV=development
APP_PORT=8787
DB_PORT=9876
DB_DATABASE=sample
DB_USERNAME=sample
DB_PASSWORD=sample
docker-compose.yml
version: '3.7'

volumes:
    db-data:

services:
    app:
        container_name: app_${DOCKER_ENV}
	image: php:7.3.29-apache
        ports:
            - ${APP_PORT}:80
        volumes:
            - ./app:/var/www/html
        depends_on:
            - db
    db:
        container_name: bianchi-backend_postgres_${DOCKER_ENV}
        image: postgres:12-alpine
        ports:
            - ${DB_PORT}:5432
        environment:
            POSTGRES_USER: ${DB_USERNAME}
            POSTGRES_PASSWORD: ${DB_PASSWORD}
            POSTGRES_DB: ${DB_DATABASE}
            POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
            TZ: Asia/Tokyo
        hostname: postgres
        volumes:
            - db-data:/var/lib/postgresql/data

Discussion