Docker ComposeでSqlServerを立てる
概要
SqlServerをDocker Composeで立ち上げる。
開発用DBをそれぞれ手元で持っている状態が健全
クラウドにDB立てる方は、是非参考にしてください。
環境
Rancher Desktop Version 1.13.1 (Dockerが既にインストールされていれば不要)
Docker Version 25.0.4-rd
Docker Compose Version 2.22.0
# フォルダ構成
operation
|--docker-compose.yml
|--Dockerfile
|--sqlserver
| |--initdb.d
| | |--ddl.sql
| | |--entrypoint.sh
| | |--seeding-data.sql
# docker-compose.yml
services:
mssql:
user: root
build:
context: .
dockerfile: Dockerfile
image: test-sqlserver:latest
container_name: test-mssql
ports:
- 1433:1433
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=password
- MSSQL_PID=Express
- MSSQL_LCID=1041
- MSSQL_COLLATION=Japanese_CI_AS
tty: true
restart: always
volumes:
- "initdb_volume:/docker-entrypoint-initdb.d"
- "data_volume:/var/opt/mssql/data"
- "log_volume:/var/opt/mssql/log"
- "secrets_volume:/var/opt/mssql/secrets"
volumes:
initdb_volume:
data_volume:
log_volume:
secrets_volume:
# Dockerfile
FROM mcr.microsoft.com/mssql/server:2022-latest
USER root
SHELL ["/bin/bash", "-c"]
WORKDIR /docker-entrypoint-initdb.d
COPY ./sqlserver/initdb.d/ /docker-entrypoint-initdb.d/
RUN chmod -R +x /docker-entrypoint-initdb.d
EXPOSE 1433
ENTRYPOINT ["/bin/bash", "./entrypoint.sh"]
#!/bin/bash
# Start SQL Server
/opt/mssql/bin/sqlservr &
# Wait for SQL Server to start
sleep 30s
-- dev-db DDL
/opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U SA -P "password" -d master -i /docker-entrypoint-initdb.d/ddl.sql
-- dev-db SEEDING_DATA
/opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U SA -P "password" -d master -i /docker-entrypoint-initdb.d/seeding-data.sql
# Wait for SQL Server to finish
wait
# ddl.sql
# データベース作成
IF NOT EXISTS (
SELECT
name
FROM
sys.databases
WHERE
name = 'dev_db'
) CREATE DATABASE dev_db;
GO
USE dev_db;
GO
create table t_user (
user_id integer not null
) ;
コマンド
# イメージビルド
docker compose build --no-cache
# 起動コマンド
docker compsoe up -d
# 停止コマンド
docker compose down
docker compose down -v (ボリューム削除)