在docker内部运行docker



我有一些dll (.net core应用程序,可以在linux上运行),做数据库迁移。它收到几个参数,其中一个是包含我的应用程序数据库迁移的dll。我创建了所有映像(迁移应用程序和包含迁移的项目,EF核心迁移),并使用docker run -e Server=xxx -e DatabaseName=xxx -e UserId=xxx -e Password=xxx migrate:v0.3.5

运行它们。这是我的docker映像:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["ef-migrations-cli/EfMigrationsCLI/EfMigrationsCLI/EfMigrationsCLI.csproj", "ef-migrations-cli/EfMigrationsCLI/EfMigrationsCLI/"]
RUN dotnet restore "ef-migrations-cli/EfMigrationsCLI/EfMigrationsCLI/EfMigrationsCLI.csproj"
COPY . .
WORKDIR /src
COPY ["RED.Database.Server/RED.Database.Server.csproj", "RED.Database.Server/"]
COPY . .

WORKDIR "/src/ef-migrations-cli/EfMigrationsCLI/EfMigrationsCLI"
FROM build AS publish
RUN dotnet publish "EfMigrationsCLI.csproj" -c Release -o /app/publish
WORKDIR /src
WORKDIR "/src/RED.Database.Server"
FROM build AS publish2
RUN find /src/RED.Database.Server/RED.Database.Server.csproj -name *.csproj
RUN dotnet publish "/src/RED.Database.Server/RED.Database.Server.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish2 /app/publish .
COPY --from=publish /app/publish .
ENV Server "please_set_Server_env_variable_when_docker_run"
ENV DatabaseName "please_set_DatabaseName_env_variable_when_docker_run"
ENV UserId "please_set_UserId_env_variable_when_docker_run"
ENV Password "please_set_Password_env_variable_when_docker_run"
ENV DatabaseContext "REDDatabaseContext"
ENV MigrationsAssembly "RED.Database.Server.dll"
ENTRYPOINT [ "sh", "-c", "dotnet EfMigrationsCLI.dll --userid=${UserId} --password=${Password} --databasename=${DatabaseName} --server=${Server} --databaseContext=REDDatabaseContext --migrationsAssembly=${MigrationsAssembly}" ]

我想把分开我的迁移DLL作为单独的docker映像(因为它不会经常更改,或者永远),并有另一个映像来构建包含迁移的项目并将其传递给第一个容器。

如何实现这一点?

我不明白你是否想在容器中构建图像或在容器内获取图像但是

我想你可以看这个https://hub.docker.com/_/ubuntu在区域设置章节,你可以看到可以运行apt-get命令安装https://docs.docker.com/engine/install/ubuntu/

所以我想,你可以

RUN apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get update && apt-get install docker-ce docker-ce-cli containerd.io
RUN docker run hello-world

那你就"必须适应你的需求。希望这是一个好的轨道,为您遵循

最新更新