sql-serverdockerdocker-compose

Docker initialize database tables and records in SQL Server


How do you specify initialization database script for SQL Server via docker-compose using SQL script file?

docker-compose.yml

database:
    image: microsoft/mssql-server-linux:2017-latest
    container_name: database
    ports:
      - 1433:1433
    volumes:
      - /var/opt/mssql
    environment:
      SA_PASSWORD: "P@55w0rd"
      ACCEPT_EULA: "Y"

schema.sql

CREATE TABLE Department
(
    Id INT PRIMARY KEY IDENTITY (1, 1),
    Name VARCHAR (50) NOT NULL
);

CREATE TABLE Student
(
    Id INT PRIMARY KEY IDENTITY (1, 1),
    Name VARCHAR (50) NOT NULL
);

CREATE TABLE Course 
(
    Id INT PRIMARY KEY IDENTITY (1, 1),
    Name VARCHAR (50) NOT NULL
);

INSERT INTO Student (Id, Name) VALUES(1, "John Doe");
INSERT INTO Student (Id, Name) VALUES(2, "Jane Doe");

Solution

  • Based on the official image, I created this:

    https://hub.docker.com/r/usildevops/mssql-docker-enhanced

    In which I added the classic /docker-entrypoint-initdb.d and a tested health check

    mssql-docker-enhanced:
        image: usildevops/mssql-docker-enhanced
        container_name: mssql-docker-enhanced
        shm_size: 1g
        ports:
         - "1433:1433"
        environment:
          ACCEPT_EULA: 1
          MSSQL_PID: Developer
          MSSQL_USER: sa
          MSSQL_SA_PASSWORD: changeme
          TZ: America/Lima
        volumes:
          - ./my/scripts:/docker-entrypoint-initdb.d
        networks:
          - template_network
        healthcheck:
          test: cat /var/log/docker/sqlserver_db_init.log | grep [db_init_completed]
          interval: 10s
          timeout: 3s
          retries: 10
          start_period: 10s