创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库

Create ASP.NET Core Web API backend container including restored database for frontend

我需要使用 SQL Server 2017 数据库创建一个 API Docker 容器。那部分没有任何问题。我的问题是我想在 docker 容器中恢复一个 .bak 文件,这样前端开发人员只需要做一个 docker-compose 就可以得到整个后端 运行 包括带有测试数据的数据库。

如有任何帮助,我们将不胜感激 ;)

我的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"

还有我的Docker文件

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"]

docs恢复容器中的数据库,您必须创建一个备份目录并将备份文件复制到其中。您可以从那里 运行 恢复命令。

您也可以在 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 & /opt/mssql/bin/sqlservr

初始化脚本 运行 在后台运行,同时 sql 服务器启动。

run-initialization.sh 可能如下所示:

# Wait to be sure that SQL Server came up
sleep 90s

# Run the restore script to create the DB with schema & data
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'yoursapassword' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/yourbackup.bak"'