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)
正如@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)
根据官方图片,我创建了这个:
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)
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |