#sql-server #docker #.net-core #docker-compose #containers
Вопрос:
Мне нужно создать контейнер Docker API с базой данных SQL Server 2017. С этой частью нет никаких проблем. Моя проблема в том, что я хотел бы восстановить .bak
файл внутри контейнера docker, чтобы разработчику интерфейса нужно было только выполнить настройку docker, чтобы запустить весь сервер, включая базу данных с тестовыми данными.
Любая помощь будет признательна 😉
Мой файл Docker-Compse
version: '3.4'
services:
api:
image: ${DOCKER_REGISTRY-}api
build:
context: .
dockerfile: Api/Dockerfile
depends_on:
- db
db:
image: "mcr.microsoft.com/mssql/server:2017-latest"
ports:
- "1433:1433"
volumes:
- "sqlvolume:/var/opt/mssql"
restart: always
environment:
SA_PASSWORD: "<password>"
ACCEPT_EULA: "Y"
И мой док-файл
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["Api/Api.csproj", "Api/"]
RUN dotnet restore "Api/Api.csproj"
COPY . .
WORKDIR "/src/Api"
RUN dotnet build "Api.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Api.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Api.dll"]
Ответ №1:
Из документов для восстановления базы данных в контейнере необходимо создать каталог резервной копии и скопировать в него файл резервной копии. Оттуда вы можете запустить команду восстановления.
Вы можете выполнить эти действия также в своем файле Dockerfile
FROM mcr.microsoft.com/mssql/server:2019-latest
RUN mkdir /var/opt/mssql/backup
COPY yourbackup.bak /var/opt/mssql/backup/.
COPY entrypoint.sh .
COPY run-initialization.sh .
ENV SA_PASSWORD yourpassword
ENV ACCEPT_EULA Y
CMD /bin/bash ./entrypoint.sh
Это entrypoint.sh
может выглядеть примерно так:
/usr/src/app/run-initialization.sh amp; /opt/mssql/bin/sqlservr
Сценарий инициализации выполняется в фоновом режиме и одновременно с запуском sql server.
Это run-initialization.sh
может выглядеть примерно так:
# Wait to be sure that SQL Server came up
sleep 90s
# Run the restore script to create the DB with schema amp; data
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'yoursapassword' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/yourbackup.bak"'