Docker Compose とは
Docker では、イメージの作成やコンテナの起動、ネットワーク接続などをコマンドで実行します。しかし、開発環境が複雑になると必要なコマンドが増え、チームでの共有が困難になります。
そこで、Docker Compose を使うと、すべての設定を docker-compose.yml に記述し、シンプルなコマンドで環境を構築できます。これにより、メンバーにファイルを渡すだけで、同じ開発環境を簡単に再現できます。
例
Nginx + PHP(Laravel) + MySQL の環境を構築する
version: '3.8' # Docker Compose のバージョン
services:
app:
image: php:8.2-fpm
container_name: laravel_app
volumes:
- .:/var/www/html
depends_on:
- db
web:
image: nginx:latest
container_name: nginx_server
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
db:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Docker Compose の実行
以下のコマンドを実行すると、設定された環境が起動します。
docker compose up
バックグラウンドで実行する場合は、-d オプションを付けます。
docker compose up -d
docker composeを実行すると自動でカスタムネットワークを作成してくれる
docker composeのいろいろなコマンド
docker composeのコンテナを停止するコマンド
docker compose down
新しくdocker composeのコンテナを作成させるときに使用するコマンド(docker compose
だけだと今あるコンテナを再利用してしまうから)
docker compose up --build
例 ubuntuとnginxを起動させる方法
version: '3.8'
services:
yamada-ubuntu:
build: .
volumes:
- ubuntu-vol:/app
networks:
- yamada-net
stdin_open: true # -i オプション相当
tty: true # -t オプション相当
command: /bin/bash # 起動時に Bash を開く
yamada-nginx:
image: nginx:latest
ports:
- "1234:80"
volumes:
- nginx-vol:/etc/nginx/conf.d
networks:
- yamada-net
restart: unless-stopped # バックグラウンドで常駐
volumes:
ubuntu-vol:
nginx-vol:
networks:
yamada-net:
起動コマンド
docker-compose up -d yamada-nginx && docker-compose run yamada-ubuntu
まとめ
Docker Compose を使うと、複雑な Docker コマンドを docker-compose.yml にまとめられる
チームメンバーと環境を簡単に共有できる
シンプルなコマンド (docker compose up) で環境を構築可能
これにより、開発作業が効率化され、統一された環境を簡単に再現できます。