# Downloaded from sqlsim.dev/sql-simulator/get-started.
#
# BEFORE YOU RUN THIS: replace REPLACE_WITH_YOUR_LICENSE_KEY below with
# your own SQL Simulator license key (every sqlsimulator-* service has
# its own SQL_SIMULATOR_LICENSE_KEY line -- all six need the same key).
# Don't have one yet? Get a free Personal key at sqlsim.dev/sql-simulator
# -- just an email, no credit card.
#
# HOW TO USE: every service below pulls sqlsim/sqlsimulator:latest from
# Docker Hub, the standard public container registry -- no source clone
# and no --build flag required. Save this file anywhere as
# docker-compose.yml, then from that same directory run one of:
#   docker compose -f docker-compose.yml --profile sqlserver up      (SQL Server)
#   docker compose -f docker-compose.yml --profile postgres up
#   docker compose -f docker-compose.yml --profile mysql up
#   docker compose -f docker-compose.yml --profile oracle up
#   docker compose -f docker-compose.yml --profile multi up             (all four engines at once)
#   docker compose -f docker-compose.yml --profile mysql-multi up       (two MySQL siblings)
#
# There is no default profile -- every invocation must pass --profile
# explicitly, or nothing starts. Want more (multiple data sources at
# once via Commercial's Multi tier, or 00DB's Kubernetes-native,
# no-direct-prod-access model)? See sqlsim.dev/sql-simulator and
# sqlsim.dev/00db.

services:
  sqlsimulator:
    image: sqlsim/sqlsimulator:latest
    container_name: sqlsimulator
    profiles: ["sqlserver"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - mssql
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - tribknow_dbtype=sqlserver
      - is_docker=y
      - DOCKER_HOST=unix:///var/run/docker.sock
      - tribknow_dbcontainer=mssql
      - tribknow_datasource=mssql
      - tribknow_port=1433
      - tribknow_sa_password=sql!simulator!2023@
      - SQL_SIMULATOR_LICENSE_KEY=REPLACE_WITH_YOUR_LICENSE_KEY
    networks:
      - app-network

  mssql:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: mssql
    profiles: ["sqlserver", "multi"]
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_PID=Developer
      - SA_PASSWORD=sql!simulator!2023@
    ports:
      - "1433:1433"
    networks:
      - app-network

  # --- postgres profile ---------------------------------------------------
  sqlsimulator-postgres:
    image: sqlsim/sqlsimulator:latest
    container_name: sqlsimulator-postgres
    profiles: ["postgres"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - postgres
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - tribknow_dbtype=postgres
      - is_docker=y
      - DOCKER_HOST=unix:///var/run/docker.sock
      - tribknow_dbcontainer=postgres
      - tribknow_datasource=postgres
      - tribknow_port=5432
      - tribknow_postgres_password=Pwd123456789
      - SQL_SIMULATOR_LICENSE_KEY=REPLACE_WITH_YOUR_LICENSE_KEY
    networks:
      - app-network

  postgres:
    image: postgres:14
    container_name: postgres
    profiles: ["postgres", "multi"]
    environment:
      - POSTGRES_PASSWORD=Pwd123456789
    ports:
      - "5432:5432"
    networks:
      - app-network

  # --- mysql profile -------------------------------------------------------
  sqlsimulator-mysql:
    image: sqlsim/sqlsimulator:latest
    container_name: sqlsimulator-mysql
    profiles: ["mysql"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - mysql
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - tribknow_dbtype=mysql
      - is_docker=y
      - DOCKER_HOST=unix:///var/run/docker.sock
      - tribknow_dbcontainer=mysql
      - tribknow_datasource=mysql
      - tribknow_port=3306
      - tribknow_mysql_root_password=Pwd123456789
      - SQL_SIMULATOR_LICENSE_KEY=REPLACE_WITH_YOUR_LICENSE_KEY
    networks:
      - app-network

  mysql:
    image: mysql:8
    container_name: mysql
    profiles: ["mysql", "multi"]
    environment:
      - MYSQL_ROOT_PASSWORD=Pwd123456789
    ports:
      - "3306:3306"
    networks:
      - app-network

  # --- oracle profile -------------------------------------------------------
  sqlsimulator-oracle:
    image: sqlsim/sqlsimulator:latest
    container_name: sqlsimulator-oracle
    profiles: ["oracle"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - oracledb
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - tribknow_dbtype=oracle
      - is_docker=y
      - DOCKER_HOST=unix:///var/run/docker.sock
      - tribknow_dbcontainer=oracledb
      - tribknow_datasource=oracledb
      - tribknow_port=1521
      - tribknow_oracle_password=sqlsimulator2023
      - SQL_SIMULATOR_LICENSE_KEY=REPLACE_WITH_YOUR_LICENSE_KEY
    networks:
      - app-network

  oracledb:
    image: container-registry.oracle.com/database/free:latest
    container_name: oracledb
    profiles: ["oracle", "multi"]
    environment:
      - ORACLE_PWD=sqlsimulator2023
    ports:
      - "1521:1521"
    networks:
      - app-network

  # --- multi profile (all four engines at once) ----------------------------
  sqlsimulator-multi:
    image: sqlsim/sqlsimulator:latest
    container_name: sqlsimulator-multi
    profiles: ["multi"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - mssql
      - postgres
      - mysql
      - oracledb
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - tribknow_dbtype=multi
      - is_docker=y
      - DOCKER_HOST=unix:///var/run/docker.sock
      - tribknow_dbcontainer_sqlserver=mssql
      - tribknow_datasource_sqlserver=mssql
      - tribknow_port_sqlserver=1433
      - tribknow_sa_password=sql!simulator!2023@
      - tribknow_dbcontainer_postgres=postgres
      - tribknow_datasource_postgres=postgres
      - tribknow_port_postgres=5432
      - tribknow_postgres_password=Pwd123456789
      - tribknow_dbcontainer_mysql=mysql
      - tribknow_datasource_mysql=mysql
      - tribknow_port_mysql=3306
      - tribknow_mysql_root_password=Pwd123456789
      - tribknow_dbcontainer_oracle=oracledb
      - tribknow_datasource_oracle=oracledb
      - tribknow_port_oracle=1521
      - tribknow_oracle_password=sqlsimulator2023
      - SQL_SIMULATOR_LICENSE_KEY=REPLACE_WITH_YOUR_LICENSE_KEY
    networks:
      - app-network

  # --- mysql-multi profile (named sandbox targets: two MySQL siblings) -----
  sqlsimulator-mysql-multi:
    image: sqlsim/sqlsimulator:latest
    container_name: sqlsimulator-mysql-multi
    profiles: ["mysql-multi"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - mysql1
      - mysql2
    ports:
      - "8080:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - tribknow_dbtype=mysql-multi
      - is_docker=y
      - DOCKER_HOST=unix:///var/run/docker.sock
      - tribknow_dbcontainer_mysql1=mysql1
      - tribknow_datasource_mysql1=mysql1
      - tribknow_port_mysql1=3306
      - tribknow_dbcontainer_mysql2=mysql2
      - tribknow_datasource_mysql2=mysql2
      - tribknow_port_mysql2=3306
      - tribknow_mysql_root_password=Pwd123456789
      - SQL_SIMULATOR_LICENSE_KEY=REPLACE_WITH_YOUR_LICENSE_KEY
    networks:
      - app-network

  mysql1:
    image: mysql:8
    container_name: mysql1
    profiles: ["mysql-multi"]
    environment:
      - MYSQL_ROOT_PASSWORD=Pwd123456789
    ports:
      - "3306:3306"
    networks:
      - app-network

  mysql2:
    image: mysql:8
    container_name: mysql2
    profiles: ["mysql-multi"]
    environment:
      - MYSQL_ROOT_PASSWORD=Pwd123456789
    ports:
      - "3307:3306"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge
