Skip to content

Instantly share code, notes, and snippets.

@igoventura
Last active March 26, 2020 03:24
Show Gist options
  • Save igoventura/5dc1bde9849a7c1c6a3da89eb6b4b48f to your computer and use it in GitHub Desktop.
Save igoventura/5dc1bde9849a7c1c6a3da89eb6b4b48f to your computer and use it in GitHub Desktop.
Tutorial dockerfile dotnet core

Explicando o dockerfile

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"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment