Актуально на октябрь 2022 г. (Проект на GitHub)
# docker-compose.yml
version: "3"
services:
sql-server:
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- "1433:1433"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=MyPass123
- MSSQL_PID=Express
каталог с решением
----------------------------------------
Docker-compose.yml
.env
src_msSQL
Dockerfile
entrypoint.sh
init-db.sql
# .env
COMPOSE_PROJECT_NAME=sql_server_compose
# Dockerfile
FROM mcr.microsoft.com/mssql/server:2019-latest
EXPOSE 1433
WORKDIR /app
COPY ./entrypoint.sh ./
COPY ./init-db.sql ./
USER root
RUN chmod +x ./entrypoint.sh
RUN mkdir -p /var/opt/mssql/data && chown mssql /var/opt/mssql/data
RUN mkdir -p /var/opt/mssql/log && chown mssql /var/opt/mssql/log
RUN mkdir -p /var/opt/mssql/backup && chown mssql /var/opt/mssql/backup
USER mssql
ENTRYPOINT ["./entrypoint.sh"]
# entrypoint.sh
#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status.
function echo-red { COLOR='\033[31m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
function echo-green { COLOR='\033[32m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
function echo-yellow { COLOR='\033[33m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
function echo-blue { COLOR='\033[34m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
echo-yellow "[ INFO ] started entrypoint.sh script"
init_db () {
echo-yellow "[ INFO ] started init_db function"
PASS_TO_INIT=$SA_PASSWORD
INPUT_SQL_FILE="init-db.sql"
until /opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U sa -P "$PASS_TO_INIT" -i $INPUT_SQL_FILE > /dev/null 2>&1
do
echo-red "SQL server is unavailable - password=$PASS_TO_INIT- sleeping 1 sec...."
sleep 1 # Sleep for a second....
done
echo-green "Success initialized db"
}
init_db & /opt/mssql/bin/sqlservr
#docker-compose.yml
version: "3.7"
services:
sql2019server:
build:
context: ./src_msSQL
dockerfile: Dockerfile
#image: mcr.microsoft.com/mssql/server:2019-latest
image: ${COMPOSE_PROJECT_NAME:?err}-mssql-2019-latest
container_name: ${COMPOSE_PROJECT_NAME:?err}_container
restart: unless-stopped #always
#hostname: sql-server
ports:
- "1433:1433"
environment:
- "ACCEPT_EULA=Y"
- "MSSQL_USER=SA"
- "SA_PASSWORD=MyPass123"
- "MSSQL_PID=Express"
- "MSSQL_LCID=1049" # русский
- "MSSQL_COLLATION=1049"
- "MSSQL_MEMORY_LIMIT_MB=3500" #задает максимальный объем памяти (в МБ), который можно использовать SQL Server. По умолчанию он составляет 80% от общего объема физической памяти.
- "MSSQL_TCP_PORT=1433"
# - "MSSQL_IP_ADDRESS=0.0.0.0"
- "MSSQL_BACKUP_DIR=/var/opt/mssql/backup" #Задайте расположение каталога резервного копирования по умолчанию.
- "MSSQL_DATA_DIR=/var/opt/mssql/data" #Перейдите в каталог, где создаются новые базы данных файлы данных SQL Server (.mdf).
- "MSSQL_LOG_DIR=/var/opt/mssql/log" #где создаются новые файлы журналов (LDF) базы данных SQL Server.
- "MSSQL_DUMP_DIR=/var/opt/mssql/dumps" #где SQL Server будет Депонировать дампы памяти и другие файлы для устранения неполадок по умолчанию.
- "MSSQL_ENABLE_HADR=0" #Включение группы доступности. Например "1" включена и отключена "0" - репликация
# - "MSSQL_AGENT_ENABLED=true" #Включите агент SQL Server. Например «true» включен, и «false» отключена. По умолчанию агент отключен.
# - "MSSQL_MASTER_DATA_FILE" #Задает расположение файла данных базы данных master.
# - "MSSQL_ERROR_LOG_FILE" #Задает расположение файла журнала базы данных master.
# - "MSSQL_MASTER_LOG_FILE" #Задает расположение файлов журнала ошибок.
deploy:
resources:
limits:
memory: 4G
cpus: '2.0'
#docker-compose.yml
-----------------------------------------
version: "3.7"
services:
sql2019server:
build:
context: ./src_msSQL
dockerfile: Dockerfile
#image: mcr.microsoft.com/mssql/server:2019-latest
image: ${COMPOSE_PROJECT_NAME:?err}-mssql-2019-latest
container_name: ${COMPOSE_PROJECT_NAME:?err}_container
restart: unless-stopped #always
#hostname: sql-server
ports:
- "1433:1433"
secrets:
- sa_password
environment:
- "ACCEPT_EULA=Y"
- "MSSQL_USER=SA"
# - "SA_PASSWORD=MyPass123"
- "MSSQL_SA_PASSWORD_FILE=/run/secrets/sa_password"
- "MSSQL_PID=Express"
- "MSSQL_LCID=1049" # русский
- "MSSQL_COLLATION=1049"
- "MSSQL_MEMORY_LIMIT_MB=3500" #задает максимальный объем памяти (в МБ), который можно использовать SQL Server. По умолчанию он составляет 80% от общего объема физической памяти.
- "MSSQL_TCP_PORT=1433"
# - "MSSQL_IP_ADDRESS=0.0.0.0"
# - "MSSQL_BACKUP_DIR=/var/opt/mssql/backup" #Задайте расположение каталога резервного копирования по умолчанию.
# - "MSSQL_DATA_DIR=/var/opt/mssql/data" #Перейдите в каталог, где создаются новые базы данных файлы данных SQL Server (.mdf).
# - "MSSQL_LOG_DIR=/var/opt/mssql/log" #где создаются новые файлы журналов (LDF) базы данных SQL Server.
- "MSSQL_DUMP_DIR=/var/opt/mssql/dumps" #где SQL Server будет Депонировать дампы памяти и другие файлы для устранения неполадок по умолчанию.
- "MSSQL_ENABLE_HADR=0" #Включение группы доступности. Например "1" включена и отключена "0" - репликация
# - "MSSQL_AGENT_ENABLED=true" #Включите агент SQL Server. Например «true» включен, и «false» отключена. По умолчанию агент отключен.
# - "MSSQL_MASTER_DATA_FILE" #Задает расположение файла данных базы данных master.
# - "MSSQL_ERROR_LOG_FILE" #Задает расположение файла журнала базы данных master.
# - "MSSQL_MASTER_LOG_FILE" #Задает расположение файлов журнала ошибок.
deploy:
resources:
limits:
memory: 4G
cpus: '2.0'
volumes:
- ./_vol_msSQL/data:/var/opt/mssql/data
- ./_vol_msSQL/log:/var/opt/mssql/log
- ./_vol_msSQL/secrets:/var/opt/mssql/secrets
- ./_vol_msSQL/backup:/var/opt/mssql/backup
#глобальный раздел
secrets:
sa_password:
file: ./sa_password.secret # Add this file in .gitignore to ignore from a repository
# .env
-----------------------------------------
COMPOSE_PROJECT_NAME=sql_server_compose
# sa_password.secret
-----------------------------------------
MyPass123FromSecret
# src_msSQL/Dockerfile
-----------------------------------------
FROM mcr.microsoft.com/mssql/server:2019-latest
EXPOSE 1433
WORKDIR /app
COPY ./entrypoint.sh ./
COPY ./init-db.sql ./
USER root
RUN chmod +x ./entrypoint.sh
RUN mkdir -p /var/opt/mssql/data && chown mssql /var/opt/mssql/data
RUN mkdir -p /var/opt/mssql/log && chown mssql /var/opt/mssql/log
RUN mkdir -p /var/opt/mssql/backup && chown mssql /var/opt/mssql/backup
USER mssql
ENTRYPOINT ["./entrypoint.sh"]
# src_msSQL/entrypoint.sh
-----------------------------------------
#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status.
function echo-red { COLOR='\033[31m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
function echo-green { COLOR='\033[32m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
function echo-yellow { COLOR='\033[33m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
function echo-blue { COLOR='\033[34m' ; NORMAL='\033[0m' ; echo -e "${COLOR}$1${NORMAL}"; }
echo-yellow "[ INFO ] started entrypoint.sh script"
init_db () {
echo-yellow "[ INFO ] started init_db function"
PATH_TO_SECRET_sa_password=/run/secrets/sa_password
if [ ! -z ${PATH_TO_SECRET_sa_password+x} ]
then
PASS_TO_INIT=$(cat ${PATH_TO_SECRET_sa_password})
echo-green "[ SUCCESS ] FINDED IN SECRETS PASSWORD='$PASS_TO_INIT'"
else
echo-red "[ ERROR ] DID NOT FINDED SECRET sa_password"
PASS_TO_INIT=""
fi
INPUT_SQL_FILE="init-db.sql"
until /opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U sa -P "$PASS_TO_INIT" -i $INPUT_SQL_FILE > /dev/null 2>&1
do
echo-red "SQL server is unavailable - password=$PASS_TO_INIT - sleeping 1 sec...."
sleep 1 # Sleep for a second....
done
echo-green "Success initialized db"
}
init_db & /opt/mssql/bin/sqlservr
# src_msSQL/init-db.sql
-----------------------------------------
/* init-db.sql */
CREATE DATABASE [my-db];
USE [my-db];
CREATE TABLE [User] (
Id INT NOT NULL IDENTITY(1,1),
FirstName VARCHAR(50) NOT null,
LastName VARCHAR(50) NOT NULL,
DateOfBirth DATETIME NOT NULL
CONSTRAINT PK_User_Id PRIMARY KEY (Id ASC)
);
INSERT INTO [User] VALUES ('Jose', 'Realman', '2018-01-01');