创建 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"'
我需要使用 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"'