Dockerを使い始めてしばらくすると、意外と手持ち無沙汰感に襲われます。
Docker単体だと1プロセスのみですが、多くのWebサービスやAPIなどはデータベースや
ワーカーなどが存在します。
1コンテナだけだとどうしても開発環境を再現できません。
そうしてdocker-composeに手を伸ばします。
NginxやPostgresqlとの連携が、network作ったりなんだりと一番めんどくさい。
僕が使用する基本的なdocker-composeを書き溜めします。
WebAPI + Worker + Nginx + Redis + Postgresql を
docker-composeで構築する方法を残します。
一応Postgresqlを使用していますが、Mysqlでもほぼ一緒です。
またpythonのフレームワーク(Flask)を使用していますが。
実際RailsでもFastAPIでもnodejs Expressでも同じです。
キモはnetwork_modeです。
nginx が自動でdnsを解決してくれるので
かなり優秀です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
version: "3" services: ngix-proxy: privileged: true image: jwilder/nginx-proxy ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro network_mode: bridge web: build: . command: python3 main.py volumes: - ./:/app expose: - 5000 environment: - VIRTUAL_HOST=myhost.co.jp - CELERY_RESULT_BACKEND=redis://redis:6379 - CELERY_BROKER_URL=redis://redis:6379 - BROKER_URL=redis://redis:6379 network_mode: bridge depends_on: - redis - db links: - redis - db worker: build: . command: celery -A tasks worker --loglevel=info volumes: - ./:/app environment: - CELERY_RESULT_BACKEND=redis://redis:6379 - CELERY_BROKER_URL=redis://redis:6379 - BROKER_URL=redis://redis:6379 network_mode: bridge depends_on: - web - db links: - redis - db redis: network_mode: bridge image: "redis:latest" ports: - "6379:6379" volumes: - ./data/redis:/data db: build: ./pg expose: - 5432 volumes: - /tmp/postgresql-data:/var/lib/postgresql/data:z tty: true restart: always environment: - POSTGRES_USER=devu - POSTGRES_PASSWORD=devp - POSTGRES_DB=dev network_mode: bridge |
docker-compose最高ですね。
じゃあね〜〜〜〜。