Docker 在 SQL Server 中初始化数据库表和记录

App*_*per 3 sql-server docker docker-compose

如何通过docker-composeSQL脚本文件为SQL Server指定初始化数据库脚本?

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"
Run Code Online (Sandbox Code Playgroud)

模式.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");
Run Code Online (Sandbox Code Playgroud)

Lou*_*uis 7

对于那些喜欢更多细节/示例的人。

正如@Adiii 建议的那样,您可以在 docker-compose 文件中初始化数据库

docker-compose.yml

  test-database:
    build: ./mssql_database
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=<YOUR PASSWORD>
      - TZ=UTC
    volumes:
      - database-data:/var/opt/mssql

volumes:
    database-data:

Run Code Online (Sandbox Code Playgroud)

目录mssql_database包含

文件

FROM mcr.microsoft.com/mssql/server

COPY setup.sql setup.sql
COPY setup_database.sh setup_database.sh
COPY entrypoint.sh entrypoint.sh

CMD /bin/bash ./entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

入口点.sh

#!/usr/bin/env bash
set -m
./opt/mssql/bin/sqlservr & ./setup_database.sh
fg
Run Code Online (Sandbox Code Playgroud)

setup_database.sh

注意:最好使用健康检查而不是使用睡眠,一旦数据库被确认为绿色,运行您的脚本。

#!/usr/bin/env bash
# Wait for database to startup 
sleep 20
./opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P <YOUR PASSWORD> -i setup.sql
Run Code Online (Sandbox Code Playgroud)

设置文件

INSERT your sql commands here 
Run Code Online (Sandbox Code Playgroud)


JRi*_*dsz 0

根据官方图片,我创建了这个:

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

我在其中添加了经典的/docker-entrypoint-initdb.d和经过测试的运行状况检查

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 
Run Code Online (Sandbox Code Playgroud)