From cc3d21a9b8aabf62bcd921f1cd447d5683f94be9 Mon Sep 17 00:00:00 2001 From: Marco Verleun Date: Wed, 3 Apr 2024 03:33:13 +0200 Subject: [PATCH] Add compose files --- docker-compose/docker-compose.images.yml | 69 +++++++++++++++++ docker-compose/docker-compose.yml | 96 ++++++++++++++++++++++++ docker-compose/docker-stack.yml | 53 +++++++++++++ 3 files changed, 218 insertions(+) create mode 100644 docker-compose/docker-compose.images.yml create mode 100644 docker-compose/docker-compose.yml create mode 100644 docker-compose/docker-stack.yml diff --git a/docker-compose/docker-compose.images.yml b/docker-compose/docker-compose.images.yml new file mode 100644 index 0000000..8b2e7d9 --- /dev/null +++ b/docker-compose/docker-compose.images.yml @@ -0,0 +1,69 @@ +# for running in docker compose with prebuilt images + +# version is now using "compose spec" +# v2 and v3 are now combined! +# docker-compose v1.27+ required + +services: + vote: + image: dockersamples/examplevotingapp_vote + depends_on: + redis: + condition: service_healthy + ports: + - "5000:80" + networks: + - front-tier + - back-tier + + result: + image: dockersamples/examplevotingapp_result + depends_on: + db: + condition: service_healthy + ports: + - "5001:80" + networks: + - front-tier + - back-tier + + worker: + image: dockersamples/examplevotingapp_worker + depends_on: + redis: + condition: service_healthy + db: + condition: service_healthy + networks: + - back-tier + + redis: + image: redis:alpine + volumes: + - "./healthchecks:/healthchecks" + healthcheck: + test: /healthchecks/redis.sh + interval: "5s" + networks: + - back-tier + + db: + image: postgres:15-alpine + environment: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "postgres" + volumes: + - "db-data:/var/lib/postgresql/data" + - "./healthchecks:/healthchecks" + healthcheck: + test: /healthchecks/postgres.sh + interval: "5s" + networks: + - back-tier + +volumes: + db-data: + +networks: + front-tier: + back-tier: diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml new file mode 100644 index 0000000..7c2577a --- /dev/null +++ b/docker-compose/docker-compose.yml @@ -0,0 +1,96 @@ +# version is now using "compose spec" +# v2 and v3 are now combined! +# docker-compose v1.27+ required + +services: + vote: + build: ./vote + # use python rather than gunicorn for local dev + command: python app.py + depends_on: + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost"] + interval: 15s + timeout: 5s + retries: 3 + start_period: 10s + volumes: + - ./vote:/app + ports: + - "5000:80" + networks: + - front-tier + - back-tier + + result: + build: ./result + # use nodemon rather than node for local dev + entrypoint: nodemon server.js + depends_on: + db: + condition: service_healthy + volumes: + - ./result:/app + ports: + - "5001:80" + - "5858:5858" + networks: + - front-tier + - back-tier + + worker: + build: + context: ./worker + depends_on: + redis: + condition: service_healthy + db: + condition: service_healthy + networks: + - back-tier + + redis: + image: redis:alpine + volumes: + - "./healthchecks:/healthchecks" + healthcheck: + test: /healthchecks/redis.sh + interval: "5s" + networks: + - back-tier + + db: + image: postgres:15-alpine + environment: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "postgres" + volumes: + - "db-data:/var/lib/postgresql/data" + - "./healthchecks:/healthchecks" + healthcheck: + test: /healthchecks/postgres.sh + interval: "5s" + networks: + - back-tier + + # this service runs once to seed the database with votes + # it won't run unless you specify the "seed" profile + # docker compose --profile seed up -d + seed: + build: ./seed-data + profiles: ["seed"] + depends_on: + vote: + condition: service_healthy + networks: + - front-tier + restart: "no" + +volumes: + db-data: + +networks: + front-tier: + back-tier: diff --git a/docker-compose/docker-stack.yml b/docker-compose/docker-stack.yml new file mode 100644 index 0000000..0d00b6a --- /dev/null +++ b/docker-compose/docker-stack.yml @@ -0,0 +1,53 @@ +# this file is meant for Docker Swarm stacks only +# trying it in compose will fail because of multiple replicas trying to bind to the same port +# Swarm currently does not support Compose Spec, so we'll pin to the older version 3.9 + +version: "3.9" + +services: + + redis: + image: redis:alpine + networks: + - frontend + + db: + image: postgres:15-alpine + environment: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "postgres" + volumes: + - db-data:/var/lib/postgresql/data + networks: + - backend + + vote: + image: dockersamples/examplevotingapp_vote + ports: + - 5000:80 + networks: + - frontend + deploy: + replicas: 2 + + result: + image: dockersamples/examplevotingapp_result + ports: + - 5001:80 + networks: + - backend + + worker: + image: dockersamples/examplevotingapp_worker + networks: + - frontend + - backend + deploy: + replicas: 2 + +networks: + frontend: + backend: + +volumes: + db-data: