Docker ドライバ

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