見出し画像

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 (ボリューム削除) 





いいなと思ったら応援しよう!