Building Application Stacks - Defining and Running Multi Container Apps

Lab: Creating a Docker Compose Stack for the Vote Application

Lets first launch redis and vote independently and see if they automatically connect.

docker container run -idt --name redis redis:alpine

docker container  run -idt  --name vote -P  schoolofdevops/vote

Try registering a vote with the voteapp UI. Does it work?

Linking services

Remove vote container created above if any, and re launch it with the link.

docker container rm -f vote

docker container  run -idt  --name vote --link redis:redis -P  schoolofdevops/vote

Launch worker app as well with the link


docker container  run -idt  --name worker --link redis:redis -P  schoolofdevops/vote-worker


docker logs worker

Launching inter linked services with Compose spec

Lets now create a docker-compose spec and launch the services with docker-compose utility.

Create a directory to keep the compose files. Lets say stack

mkdir stack
cd stack

file: docker-compose.yml

vote:
  image: schoolofdevops/vote
  links:
    - redis:redis
  ports:
    - 80   

redis:
  image: redis:alpine

worker:
  image: schoolofdevops/vote-worker
  links:
    - redis:redis

Syntax check

docker-compose config

Now launch it with

docker-compose up -d

docker-compose ps

file: docker-compose-v3.yml

version: "3"

networks:
  vote:
    driver: bridge

services:
  vote:
    image: schoolofdevops/vote
    ports:
      - 80
    networks:
      - vote
    depends_on:
      - redis

  redis:
    image: redis:alpine
    networks:
      - vote

  worker:
    image: schoolofdevops/vote-worker
    networks:
      - vote
    depends_on:
      - redis

Launch the new stack with,

docker-compose -f docker-compose-v3.yml up -d


docker-compose -f docker-compose-v3.yml ps


docker-compose -f docker-compose-v3.yml down