Запуск ms-sql server в docker контейнере

Понадобилось на работе для тестов поюзать ms-sql server, благо он есть и для linux, иначе бы мне пришлось предать свою сущность… Итак приступим.

Требования:

— docker;
— docker-compose;
— linux.

Клонируем из git проект

git clone https://gitlab.com/itc-life/docker-mssql
cd docker-mssql

Собираем образ

docker-compose build

Далее правим docker-compose.yml

Приводим к необходимому виду:
— правим пароль — он должен соответствовать требованиям надежности мелкомягких — иначе не заведется.

Как пример.

version: '2'
services:
  mssql-server-server:
    build: docker/mssql-server-server/.
    container_name: mssql-server-server
    hostname: mssql-server-server
    ports:
      - "1433:1433"
      - "5022:5022"
    volumes:
      - "./data/mssql-server:/var/opt/mssql"
      - "./backups:/backups"
    environment:
      - "ACCEPT_EULA=Y"
      - "SA_PASSWORD=YourStrong!Passw0rd"
      - "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=/backups" #Задайте расположение каталога резервного копирования по умолчанию.
      - "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" #Задает расположение файлов журнала ошибок.
    restart: always
    networks:
      mssql-server-net:
        aliases:
          - mssql-server
networks:
  mssql-server-net:
      driver: bridge

Запускаем

docker-compose up -d

Заходим внутрь докер контейнерв

docker exec -ti -u 0 mssql-server-server sh -c 'stty cols 250 && stty rows 100 && bash'

Восстановим дамп из бэкапа

Иы пробросили каталог ./backups внутрь докер контейнера в каталог /backups.

Восстановим дамп из файла(например) GRN_MAIN.bak

Для этого выполним sql — просмотрим инфу о файле.

docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q "RESTORE FILELISTONLY  FROM DISK = '/backups/GRN_MAIN.bak'"

Нас интересует имя GRN_MAIN.mdf и его расположение, а также имя GRN_MAIN_1.ldf и его расположение.

Теперь произведем восстановление из дампа.

Из консоли

docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q " RESTORE DATABASE GRN_MAIN FROM DISK = '/backups/GRN_MAIN.bak' WITH MOVE 'GRN_MAIN_Data' TO '/var/opt/mssql/data/GRN_MAIN.mdf', MOVE 'GRN_MAIN_Log' TO '/var/opt/mssql/data/GRN_MAIN_1.ldf'"

Ждем окончания. Всё ок.

Или из GUI для ms-sql — например — DBEAVER.
Сначала просмотрим инфу о файле.

RESTORE FILELISTONLY  FROM DISK = '/backups/GRN_MAIN.bak'


Теперь восстановим

RESTORE DATABASE GRN_MAIN
FROM DISK = '/var/opt/mssql/backup/GRN_MAIN.bak'
WITH MOVE 'GRN_MAIN_Data' TO '/var/opt/mssql/data/GRN_MAIN.mdf',
MOVE 'GRN_MAIN_Log' TO '/var/opt/mssql/data/GRN_MAIN_1.ldf'
GO


Сделать бэкап

docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q "BACKUP DATABASE [GRN_MAIN] TO DISK = N'/backups/GRN_MAIN_backup.bak' WITH NOFORMAT, NOINIT, NAME = 'GRN_MAIN-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

Другие команды

Показать версию

docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P 'YourStrong!Passw0rd' \
   -Q 'SELECT @@VERSION'

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.