Docker file encontrado no tutorial https://dotnet.microsoft.com/learn/aspnet/microservice-tutorial/docker-file
# Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY myMicroservice.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "myMicroservice.dll"]
A execução desse Dockerfile foi dividida em duas partes: Build e Run. Essa divisão em camadas é necessária para reduzir o tamanho da imagem final.
Primeira camada: Build
# Dockerfile
# Essa linha informa qual imagem será usada durante sua execução
# Está sendo usada a imagem oficial que já contém o SDK do
# dotnet core 3.1
# A palavra chave `AS build` é utilizada pra dar um `nome` à
# camada e simplificar quando esta for ser utilizada em momentos
# posteriores.
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
# Essa linha configura qual o `workdir`, ou seja, qual pasta
# essa execução irá utilizar como base. No caso está sendo
# definida a pasta `/src`.
WORKDIR /src
# Essa linha copia o arquivo `myMicroservice.csproj` para dentro da
# execução dessa camada. O `.` é pra indicar que a cópia será feita
# para a raiz da pasta temporária (/src) na qual a execução está acontecendo.
COPY myMicroservice.csproj .
# Essa linha executa o comando `dotnet restore`, que irá utilizar o
# arquivo copiado previamente para restauras as dependências do projeto.
RUN dotnet restore
# Essa linha copia agora todos os outros arquivos do projeto para a
# raiz da pasta temporária (/src) na qual a execução está acontecendo.
# Isso é necessário para compilar o código posteriormente.
COPY . .
# Essa linha compila e empacota o projeto. O trecho `-o /app` configura
# o output para a pasta `/app` dentro da pasta temporária (/src) na qual
# a execução está acontecendo
RUN dotnet publish -c release -o /app
# ... Continua na segunda camada do arquivo
Segunda camada: Run
# Dockerfile
# ...
# Essa linha informa qual imagem será usada durante sua execução
# Está sendo usada a imagem oficial que já contém o runtime (aspnet)
# do dotnet core 3.1
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
# Essa linha configura qual o `workdir`, ou seja, qual pasta
# essa execução irá utilizar como base. No caso está sendo
# definida a pasta `/app`.
WORKDIR /app
# Essa linha copia agora todos os arquivos da pasta `/app` da camada
# anterior para a raiz da pasta temporária (/app) na qual a execução
# está acontecendo na segunda camada.
# O trecho `--from=build` indica que agora estão sendo utilizados os
# Arquivos provenientes da camada anterior, denominada `build`.
COPY --from=build /app .
# Essa linha define qual comando será executado quando essa imagem for
# iniciada pelo `docker run`. Neste caso será rodado o comando:
# > dotnet myMicroservice.dll
# Esse é o comando padrão para rodar um projeto dotnet core compilado.
ENTRYPOINT ["dotnet", "myMicroservice.dll"]