💨
開発環境ごとの Docker のコンテナを立ち上げる
はじめに
それぞれの環境ごとの都合でコンテナを立ち上げたい。
- Mac は delegated オプションを設定したい
- WSL は権限周りの問題を解決したい
対応
複数の compose.yaml を指定した場合、後から指定した設定が上書きされるので、Makefile で環境ごとに yaml を指定する。
ディレクトリ構成
.
├── docker
│ ├── Makefile
│ ├── compose-mac.yaml
│ ├── compose-wsl.yaml
│ └── compose.yaml
└── src
└── htdocs
└── index.html
Makefile
Makefile
.PHONY: up
up:
@make down
ifeq ($(OS),Darwin)
docker-compose -f compose.yaml -f compose-mac.yaml up -d
else ifeq ($(OS),Windows_NT)
IS_WSL := $(shell uname -r | grep -i microsoft > /dev/null && echo "true" || echo "false")
ifeq ($(IS_WSL), true)
UID_GID="$(id -u):$(id -g)" docker compose -f compose.yaml -f compose-wsl.yaml up -d
else
docker compose up -d
endif
else
docker compose up -d
endif
.PHONY: down
down:
docker compose down
compose.yaml
compose.yaml
services:
web:
image: httpd:2.4
container_name: web
ports:
- 8080:80
volumes:
- ../src/htdocs:/usr/local/apache2/htdocs
compose-mac.yaml
services:
web:
volumes:
- ../src/htdocs/:/usr/local/apache2/htdocs/:delegated
compose-wsl.yaml
services:
web:
user: "${UID_GID}"
参考にしたサイト
- Compose 設定をファイルとプロジェクト間で共有 — Docker-docs-ja 24.0 ドキュメント
- ボリューム・マウント(共有ファイルシステム)のためのパフォーマンス・チューニング — Docker-docs-ja 19.03 ドキュメント
- WSL2でDockerを使用する際の権限問題を解決するシンプルな方法(docker-compose.yml使用) #Docker - Qiita
環境
% sw_vers
ProductName: macOS
ProductVersion: 14.4.1
BuildVersion: 23E224
% docker --version
Docker version 26.1.3, build b72abbb
% docker compose --version
Docker Compose version v2.27.3
Discussion