Dockerfile - O processo de criação e build
Hoje veremos os conceitos básicos envolvidos na criação do Dockerfile e no processo de build para criação de imagens Docker. |
Se você esta chegando agora e não sabe o que é Dockerfile sugiro que acompanhe o meu curso de introdução ao Docker nesta série de artigos: Docker - Uma introdução básica - Macoratti.net
Se quiser apenas recordar os conceitos sobre Dockerfile veja este artigo: Docker - Criando uma imagem com Dockerfile - Macoratti
O Dockerfile
O Docker cria imagens automaticamente lendo as instruções de um Dockerfile - um arquivo de texto que contém todos os comandos, em ordem, necessários para construir uma determinada imagem.
Um Dockerfile adere a um formato específico e a um conjunto de instruções que você pode encontrar na referência do Dockerfile.
Uma imagem do Docker consiste em camadas somente leitura, cada uma representando uma instrução Dockerfile. As camadas são empilhadas e cada uma delas é um delta das alterações da camada anterior.
Considere este Dockerfile:
FROM Ubuntu: 18.04 COPY . /app RUN make /app CMD phyton /app/app.py |
Cada instrução
acima cria uma camada na imagem:
FROM cria uma camada a partir da imagem do ubuntu: 18.04 Docker.
COPY adiciona arquivos do diretório atual do cliente do Docker.
RUN constrói sua aplicação com make.
CMD especifica qual comando deve ser executado no contêiner.
Quando você executa uma imagem e gera um contêiner, adiciona uma nova camada
gravável (a "camada de contêiner") sobre as camadas subjacentes.
É nessa camada que vamos trabalhar no contêiner.
Todas as alterações feitas no contêiner em execução, como gravar novos arquivos, modificar arquivos existentes e excluir arquivos, são gravadas nessa camada de contêiner gravável fina.(thin R/W layer).
O processo de build
Quando você emite um comando docker build, o diretório de trabalho atual é chamado de contexto de build ou construção.
Por padrão, pressupõe-se que o Dockerfile esteja localizado nesta pasta, mas você pode especificar um local diferente para o Dockerfile usando o sinalizador de arquivo (-f).
Independentemente de onde o
Dockerfile estiver, todo o
conteúdo recursivo de arquivos e diretórios no diretório atual será enviado para o
daemon do Docker como o contexto de
build ou compilação.
Exemplo de contexto
de build
mkdir projeto
&&
cd projeto
echo "ola Mundo" > ola
echo -e "FROM busybox\nCOPY /ola / \nRUN cat /Ola" > Dockerfile
docker build -t
OlaApp:v1 .
Mova os arquivos Dockerfile e
ola para diretórios separados e construa uma segunda versão
da imagem (sem depender do cache da última compilação).
Use -f para apontar para
o Dockerfile e especificar o diretório do contexto de
build:
mkdir -p dockerfiles context
mv Dockerfile dockerfiles
&& mv ola
context
docker build --no-cache -t
OlaApp:v2
-f dockerfiles/Dockerfile context
Assim, se você incluir arquivos que não são necessários para construir uma imagem, isso resultará em um contexto de build maior e em um tamanho de imagem maior.
Isso vai aumentar o tempo para construir a imagem, o tempo para baixar e enviar as imagens do/e para o repositório, e, o tempo de execução do contêiner.
Para ver o tamanho do
seu contexto de build, procure por uma mensagem com o mesmo teor da mensagem
abaixo quando da criação do seu
Dockerfile:
Sending build context
to Docker daemon 187.8MB
Assim entender esses conceitos básicos para criação do Dockerfile e para o processo de build são fundamentais para que ele seja otimizado e sua imagem seja a menor possível.
"Louvai ao Senhor dos
senhores; porque a sua benignidade dura para sempre."
Salmos 136:3
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
https://docs.microsoft.com/pt-br/dotnet/core/tools/dotnet-publish?tabs=netcore21
Docker - Uma introdução básica - Macoratti.net
ASP .NET Core - Acesso ao MySQL c/ EF Core usando o Docker
Docker - Criando uma imagem com Dockerfile - Macoratti