
Dockerでは、ネットワーク、ストレージ、ボリューム、ログなど、様々なリソースを管理するために「ドライバー」という仕組みを使用します。ドライバーは、それぞれの機能の実装方法を切り替えることができるプラグイン機構で、用途や環境に応じて最適なものを選択できます。

ネットワークドライバーの設定
bridge ドライバー(最も一般的)
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
networks:
- frontend
api:
image: node:18
networks:
- frontend
- backend
db:
image: postgres:15
networks:
- backend
networks:
frontend:
driver: bridge
backend:
driver: bridge
bridge ドライバー(詳細設定)
version: '3.8'
services:
web:
image: nginx:alpine
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
host ドライバー
version: '3.8'
services:
app:
image: myapp
network_mode: host
# 注意: hostドライバーはnetworksセクションでは定義できない
# network_mode: host を使用
overlay ドライバー(Docker Swarm用)
version: '3.8'
services:
web:
image: nginx:alpine
networks:
- overlay-network
networks:
overlay-network:
driver: overlay
attachable: true
ログドライバーの設定
json-file ドライバー(デフォルト)
version: '3.8'
services:
web:
image: nginx:alpine
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
local ドライバー(本番環境推奨)
version: '3.8'
services:
web:
image: nginx:alpine
logging:
driver: local
options:
max-size: "10m"
max-file: "5"
compress: "true"
syslog ドライバー
version: '3.8'
services:
web:
image: nginx:alpine
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.1.100:514"
tag: "web-server"
fluentd ドライバー
version: '3.8'
services:
web:
image: nginx:alpine
logging:
driver: fluentd
options:
fluentd-address: localhost:24224
tag: docker.web
fluentd:
image: fluent/fluentd
ports:
- "24224:24224"
volumes:
- ./fluentd.conf:/fluentd/etc/fluent.conf
awslogs ドライバー
version: '3.8'
services:
web:
image: nginx:alpine
logging:
driver: awslogs
options:
awslogs-region: ap-northeast-1
awslogs-group: myapp-logs
awslogs-stream: web-server
ボリュームドライバーの設定
local ドライバー(デフォルト)
version: '3.8'
services:
db:
image: postgres:15
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
driver: local
NFS ドライバー
version: '3.8'
services:
app:
image: myapp
volumes:
- nfs-storage:/data
volumes:
nfs-storage:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.100,rw
device: ":/mnt/nfs/data"
CIFS(Windows共有)
version: '3.8'
services:
app:
image: myapp
volumes:
- windows-share:/data
volumes:
windows-share:
driver: local
driver_opts:
type: cifs
o: username=user,password=pass,vers=3.0
device: "//192.168.1.200/share"
複数ドライバーを組み合わせた実用例
基本的なWebアプリケーション構成
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
networks:
- frontend
volumes:
- web-logs:/var/log/nginx
logging:
driver: local
options:
max-size: "10m"
max-file: "3"
api:
build: ./api
networks:
- frontend
- backend
volumes:
- api-data:/app/data
logging:
driver: local
options:
max-size: "10m"
max-file: "3"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
networks:
- backend
volumes:
- db-data:/var/lib/postgresql/data
logging:
driver: local
options:
max-size: "10m"
max-file: "5"
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
web-logs:
driver: local
api-data:
driver: local
db-data:
driver: local
マイクロサービス構成(フロントエンド/バックエンド分離)
version: '3.8'
services:
# フロントエンド
web:
image: nginx:alpine
ports:
- "80:80"
networks:
- frontend
volumes:
- web-content:/usr/share/nginx/html
logging:
driver: local
options:
max-size: "10m"
max-file: "3"
# API Gateway
gateway:
image: mygateway
networks:
- frontend
- backend
logging:
driver: local
options:
max-size: "10m"
# マイクロサービス
user-service:
image: user-service
networks:
- backend
volumes:
- user-data:/data
logging:
driver: local
options:
max-size: "10m"
order-service:
image: order-service
networks:
- backend
volumes:
- order-data:/data
logging:
driver: local
options:
max-size: "10m"
# データベース
user-db:
image: postgres:15
networks:
- backend
volumes:
- user-db-data:/var/lib/postgresql/data
logging:
driver: local
options:
max-size: "10m"
max-file: "5"
order-db:
image: postgres:15
networks:
- backend
volumes:
- order-db-data:/var/lib/postgresql/data
logging:
driver: local
options:
max-size: "10m"
max-file: "5"
networks:
frontend:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
backend:
driver: bridge
internal: true
ipam:
config:
- subnet: 172.21.0.0/16
volumes:
web-content:
driver: local
user-data:
driver: local
order-data:
driver: local
user-db-data:
driver: local
order-db-data:
driver: local