创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库
Posted
技术标签:
【中文标题】创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库【英文标题】:Create ASP.NET Core Web API backend container including restored database for frontend 【发布时间】:2021-11-22 06:05:04 【问题描述】:我需要使用 SQL Server 2017 数据库创建一个 API Docker 容器。那部分没有问题。我的问题是我想在 docker 容器中恢复一个 .bak
文件,这样前端开发人员只需要执行 docker-compose up 即可让整个后端运行,包括带有测试数据的数据库。
任何帮助将不胜感激;)
我的 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"
还有我的 Dockerfile
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】:从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 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 & data
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'yoursapassword' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/yourbackup.bak"'
【讨论】:
以上是关于创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用 ASP.NET Core MVC 创建 Web API
使用 ASP.NET Core MVC 创建 Web API
在c#asp.net core web api中创建jwt令牌[重复]
使用 ASP.NET Core MVC 创建 Web API