【发布时间】:2020-12-19 18:15:42
【问题描述】:
我是 Docker 新手。我的项目有以下目录结构
docker-compose.yml
|-services
|-orders
|-DockerFile
我正在使用具有以下内容的标准 ASP.Net Core DockerFile:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["Services/Orders/Orders.csproj", "Services/Orders/"]
RUN dotnet restore "Services/Orders/Orders.csproj"
COPY . .
WORKDIR "/src/Services/Orders"
RUN dotnet build "Orders.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Orders.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Orders.dll"]
我的 docker-compose.yml 文件有
# Please refer https://aka.ms/HTTPSinContainer on how to setup an https developer certificate for your ASP .NET Core service.
version: "3.4"
services:
orders-api:
image: orders-api
build:
context: .
dockerfile: Services/Orders/Dockerfile
ports:
- "2222:80"
我对这两个文件有些混淆
-
问题一:WORKDIR /app 在第 2 行有什么用?
我的理解是,我们使用的是可以扩展的基础镜像 当我们在第 1 行导入基础图像然后设置 第 2 行和第 3 行中的 WORKDIR 和端口,它们将被以下命令使用 使用这张图片?
-
问题 2:为什么我们为 SDK 映像设置 WORKDIR /src 而不是 WORKDIR /app?
-
问题 3:复制命令中的路径是否与 Dockerfile 或 Docker-compose.yml 文件相关?
在 COPY ["Services/Orders/Orders.csproj", "Services/Orders/"] 行中,我们指定的路径似乎与 docker-compose.yml 文件相关,而不是与 DockerFile 相关进一步嵌套在文件夹中。这是否意味着 Dockerfile 中的路径需要与 docker-compose.yml 相关?我问这个是因为我在想如果我使用这个 Dockerfile 运行 docker build 命令,那么我会收到一个错误,因为复制命令中的路径无效。
【问题讨论】:
标签: docker asp.net-core docker-compose