Personalizar uma imagem do Docker para executar a sua própria aplicação Web

Concluído

O Hub do Docker é uma excelente fonte de imagens que lhe permite começar a criar as suas próprias aplicações em contentores. Você pode baixar uma imagem que fornece a funcionalidade básica necessária e, em seguida , colocar seu próprio aplicativo em camadas sobre ele para criar uma nova imagem personalizada. Você pode automatizar as etapas desse processo escrevendo um Dockerfile.

No cenário das lojas de roupas online, a empresa decidiu que o Docker é o caminho a seguir. O próximo passo consiste em determinar a melhor forma de colocar as suas aplicações Web em contentores. A empresa planeja criar muitos dos aplicativos usando o ASP.NET Core. Você notou que o Docker Hub contém uma imagem base que inclui essa estrutura. Como prova de conceito, você deseja começar com essa imagem base e adicionar o código de um dos aplicativos Web para criar uma nova imagem personalizada. Você também quer que esse processo seja facilmente repetível, para que possa ser automatizado sempre que você lançar uma nova versão do aplicativo Web.

Nesta unidade, você aprenderá como criar uma imagem personalizada do Docker e como automatizar o processo escrevendo um Dockerfile.

Criar uma imagem personalizada com um Dockerfile

Para criar uma imagem do Docker contendo seu aplicativo, você normalmente começará identificando uma imagem base à qual adicionará arquivos e informações de configuração. O processo de identificação de uma imagem base adequada geralmente começa com uma pesquisa de imagem no Docker Hub. Você quer uma imagem que já contenha uma estrutura de aplicativo e todos os utilitários e ferramentas de uma distribuição Linux, como Ubuntu ou Alpine. Por exemplo, se tiver uma aplicação ASP.NET Core que pretende compactar num contentor, a Microsoft publica uma imagem chamada mcr.microsoft.com/dotnet/core/aspnet que já contém o runtime de ASP.NET Core.

Você pode personalizar uma imagem iniciando um contêiner com a imagem base e fazendo alterações nela. As alterações geralmente envolvem atividades como copiar arquivos do sistema de arquivos local para o contêiner e executar várias ferramentas e utilitários para compilar código. Quando terminar, use o docker commit comando para salvar as alterações em uma nova imagem.

A conclusão manual do processo acima mencionado é morosa e propensa a erros. Você pode criá-lo com uma linguagem de script como o Bash, mas o Docker fornece uma maneira mais eficaz de automatizar a criação de imagens por meio de um Dockerfile.

Um Dockerfile é um arquivo de texto simples que contém todos os comandos necessários para criar uma imagem. Os Dockerfiles são escritos numa linguagem de script mínima concebida para criar e configurar imagens. Eles documentam as operações necessárias para construir uma imagem, começando com uma imagem base.

O seguinte exemplo mostra um Dockerfile que cria uma aplicação .NET Core 2.2 e a compacta numa nova imagem.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]

Neste ficheiro, ocorrem as seguintes operações:

Comando Ação
FROM Baixa a imagem especificada e cria um novo contêiner com base nessa imagem.
WORKDIR Define o diretório de trabalho atual no contêiner, usado pelos comandos subsequentes.
CÓPIA Copia arquivos do computador host para o contêiner. O primeiro argumento (myapp_code) é um ficheiro ou uma pasta no computador anfitrião. O segundo argumento (.) especifica o nome do ficheiro ou da pasta que servirá de destino no contentor. Neste caso, o destino é o diretório de trabalho atual (/app).
EXECUTAR Executa um comando no contêiner. Os argumentos do comando RUN são comandos da linha de comandos.
EXPOR Cria uma configuração na nova imagem que especifica quais portas abrir quando o contêiner é executado. Se o contentor estiver a executar uma aplicação Web, é normal expor-se a porta 80 com o comando EXPOSE.
PONTO DE ENTRADA Especifica a operação que o contêiner deve executar quando é iniciado. Neste exemplo, executa a aplicação recentemente criada. Você especifica o comando que deseja executar e cada um de seus argumentos como uma matriz de cadeia de caracteres.

Por convenção, as aplicações destinadas a ser compactadas sob a forma de imagens do Docker têm normalmente um Dockerfile, localizado na raiz do respetivo código fonte, que tem quase sempre o nome Dockerfile.

O comando docker build cria uma nova imagem ao executar um Dockerfile. A sintaxe deste comando tem vários parâmetros:

  • O sinalizador -f indica o nome do Dockerfile a utilizar.
  • O sinalizador -t especifica o nome da imagem a ser criada, neste exemplo, myapp:v1.
  • O parâmetro final, ., fornece o contexto de criação dos ficheiros de origem para o comando COPY: o conjunto de ficheiros no computador anfitrião que são necessários durante o processo de criação.
docker build -t myapp:v1 .

Nos bastidores, o docker build comando cria um contêiner, executa comandos nele e confirma as alterações em uma nova imagem.