💨

開発環境ごとの Docker のコンテナを立ち上げる

2024/10/16に公開

はじめに

それぞれの環境ごとの都合でコンテナを立ち上げたい。

  • 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}"

参考にしたサイト

環境

% 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