# docker-database-images
Process for building database images. application_family: devops

### Using Built Images

Images can be pulled down the run directly with no additional settings.

Below is an example docker-compose.yaml file which illustrates some of the customizations that can be applied according to your needs.

```yaml
---
services:

  app:

    image: myapp:latest

    # match db creds with db service
    environment:
      - MYSQL_DB_USER=${MYSQL_DB_USER}
      - MYSQL_DB_PASSWORD=${MYSQL_DB_PASSWORD}
      - POSTGRES_DB_USER=${POSTGRES_DB_USER}
      - POSTGRES_DB_PASSWORD=${POSTGRES_DB_PASSWORD}

    # start app only when db service is healthy
    depends_on:
      mysql-db:
        condition: service_healthy
      postgres-db:
        condition: service_healthy

  mysql-db:

    # pull image from internal ECR repo
    image: >
      086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-database-images:some-mysql-db

    # ensure using newest image
    pull_policy: always

    # match db creds with app service
    environment:
      - DB_USER=${MYSQL_DB_USER}
      - DB_PASSWORD=${MYSQL_DB_PASSWORD}

    volumes:
      # seed data (prefix 3 digit number between 002 and 998 to control order)
      - ./002_inserts.sql:/docker-entrypoint-initdb.d/002_inserts.sql
      # volume for data (slower, persistent)
      - mysql_data_volume:/var/lib/mysql

    # in memory file system (faster, non-persistent)
    tmpfs:
      - /var/lib/mysql

    # no bin log or any other other CLI param
    command: >
      --disable-log-bin

    # export to host
    ports:
      - "3306:3306"

    # configure healthcheck behavior
    healthcheck:
      interval: 1s
      timeout: 5s
      retries: 120

  postgres-db:

    # pull image from internal ECR repo
    image: >
      086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-database-images:some-postgres-db

    # ensure using newest image
    pull_policy: always

    # match db creds with app service
    environment:
      - DB_USER=${POSTGRES_DB_USER}
      - DB_PASSWORD=${POSTGRES_DB_PASSWORD}

    volumes:
      # seed data (prefix 3 digit number between 002 and 998 to control order)
      - ./002_inserts.sql:/docker-entrypoint-initdb.d/002_inserts.sql
      # volume for data (slower, persistent)
      - pg_data:/var/lib/postgresql/data

    # in memory file system (faster, non-persistent)
    tmpfs:
      - /var/lib/postgresql/data

    # echo commands or any other other CLI param
    command: >
      -E

    # export to host
    ports:
      - "5432:5432"

    # configure healthcheck behavior
    healthcheck:
      interval: 1s
      timeout: 5s
      retries: 120

volumes:
  pg_data:
  mysql_data_volume:

```
