Wiki

Clone wiki

telstar-2 / Orchestrating Telstar with Docker Compose

Orchestrating Telstar with Docker Compose

Contents

Introduction

Docker Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. Given that a YAML file has been defined and stored in docker-compose.yaml, the following command will start the docker containers.

$ docker-compose up -d

To stop the containers, the following command can be used.

$ docker-compose down

Full details of Docker Compose can be found at https://docs.docker.com/compose/

Example Docker Compose Yaml Files

The following docker-compose yaml file can be used to manage the Telstar application and associated mongo database.

version: "3.8"
services:
  telstar-01:
    container_name: "telstar-server"
    image: "johnnewcombe/telstar:amd64-2.0-RC3.4"
    command: "server --port 6512 --init"
    ports:
      - target: 6512
        published: 6512
    networks:
      - telstar-network
    volumes:
      - type: volume
      source: telstar-volume
      target: /opt/telstar/volume
    depends_on:
      - mongodb
    environment:
      - TELSTAR_SERVER_DISPLAY_NAME=AUSTEN
  mongodb:
    container_name: "telstar-mongo"
    image: "mongo"
    ports:
      - target: 27017
        published: 27017
    networks:
      telstar-network:
    environment:
      - MONGO_INITDB_ROOT_USERNAME=mongoadmin
      - MONGO_INITDB_ROOT_PASSWORD=secret
networks:
  telstar-network:
    name: telstar-network
volumes:
  telstar-volume:
    name: telstar-volume

The following docker-compose file starts three Telstar servers all talking to the same database server, however the third server (telstar-server-03) includes an environment variable that ensures that it uses the secondary database. This secondary database collection is typically used to test content before publishing it to the primary database collection. Further details of all of the available environment variables can be found in the section Configuration Options. In addition, the Telstar API is launched as a separate container.

version: "3.8"
services:
  telstar-01:
    container_name: "telstar-server-01"
    build: .
    image: "johnnewcombe/telstar:amd64-2.0-RC3.4"
    command: "server --port 6512 --init" # install to the primary database
    ports:
      - target: 6512
        published: 6512
    networks:
      - telstar-network
    volumes:
      - type: volume
      source: telstar-volume
      target: /opt/telstar/volume
    depends_on:
      - mongodb
    environment:
      - TELSTAR_SERVER_DISPLAY_NAME=AUSTEN
  telstar-02:
    container_name: "telstar-server-02"
    image: "johnnewcombe/telstar:amd64-2.0-RC3.4"
    command: "server --port 6513"
    ports:
      - target: 6513
        published: 6513
    networks:
      - telstar-network
    volumes:
      - type: volume
        source: telstar-volume
        target: /opt/telstar/volume
    depends_on:
      - mongodb
    environment:
      - TELSTAR_SERVER_DISPLAY_NAME=ELIOT
  telstar-03:
    container_name: "telstar-server-03"
    image: "johnnewcombe/telstar:amd64-2.0-RC3.4"
    command: "server --port 6514 --init" # install to the secondary database
    ports:
      - target: 6514
        published: 6514
    networks:
      - telstar-network
    volumes:
      - type: volume
        source: telstar-volume
        target: /opt/telstar/volume
    depends_on:
      - mongodb
    environment:
      - TELSTAR_SERVER_DISPLAY_NAME=HARDY
      - TELSTAR_DBCOLLECTION=SECONDARY
  telstar-api:
    container_name: "telstar-api"
    image: "johnnewcombe/telstar:amd64-2.0-RC3.4"
    command: "api --port 8001 --init"
    ports:
      - target: 8001
        published: 8001
    networks:
      - telstar-network
    depends_on:
      - mongodb
environment:
  - TELSTAR_API_USERID=2222222222
  - TELSTAR_API_PASSWORD=1234
  - TELSTAR_COOKIE_SECRET=<place yout secret here> # define this for yourself and keep it secret, a GUID is a good option.
mongodb:
  container_name: "telstar-mongo"
  image: "mongo"
  ports:
    - target: 27017
      published: 27017
  networks:
    telstar-network:
  environment:
    - MONGO_INITDB_ROOT_USERNAME=mongoadmin
    - MONGO_INITDB_ROOT_PASSWORD=secret
networks:
  telstar-network:
    name: telstar-network
volumes:
  telstar-volume:
    name: telstar-volume

Updated