Antes de mergulhar no que é um Dockerfile, vamos realizar um pequeno experimento. Lembra da imagem Python que baixamos na seção anterior? Vamos primeiro entrar no contêiner usando o comando docker run -it. Lembre-se do que o parâmetro -it faz — ele atribui um pseudo-TTY ao contêiner, permitindo que o usuário interaja com ele. Uma vez dentro do contêiner, vamos listar todos os arquivos no diretório atual:
[root@novita ~]# docker run -it python:3.7 /bin/bash
root@692f87774bf7:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@692f87774bf7:/#
Em seguida, vamos criar um arquivo chamado hello.py e listar todos os arquivos novamente:
root@692f87774bf7:/# touch hello.py
root@692f87774bf7:/# ls
bin boot dev etc hello.py home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Você pode ver que hello.py foi criado. Agora, vamos sair do contêiner e reentrar no modo interativo usando o mesmo comando docker run -it python:3.7 /bin/bash e listar todos os arquivos novamente:
root@692f87774bf7:/# exit
exit
[root@novita ~]# docker run -it python:3.7 /bin/bash
root@65c767655e8a:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@65c767655e8a:/#
Você provavelmente já percebeu o problema. Curiosamente, o arquivo que criamos desapareceu. Isso acontece porque as ações realizadas dentro do contêiner não modificam a imagem. O contêiner apenas adiciona uma camada gravável sobre a imagem, como um papel vegetal sobre um modelo de caligrafia — não importa o que você escreva no papel vegetal, ele não afeta a camada inferior. Essa característica é um pouco semelhante a um snapshot de VM. Mas aqui está o problema: se as ações dentro do contêiner não modificam a imagem, como podemos alcançar uma implantação rápida sem repetir certas operações antes de cada implantação de código? Isso seria muito ineficiente. Suponha que você seja o líder técnico de uma plataforma de mídia social e, de repente, ocorra um evento viral que exija escalar rapidamente centenas de servidores em nuvem para lidar com um grande volume de tráfego. Sua equipe escolheu Docker para implantação de aplicativos. Se você implantar usando o método acima, os usuários podem ficar decepcionados. Quando seu serviço se recuperar, eles podem já ter ido embora. É aí que entra o Dockerfile. De acordo com a introdução oficial do Docker: o Docker pode construir imagens automaticamente lendo as instruções de um Dockerfile. Um Dockerfile é um documento de texto que contém todos os comandos que um usuário pode executar na linha de comando para montar uma imagem. Usando docker build, os usuários podem criar uma compilação automatizada que executa várias instruções de linha de comando em sequência. Em termos mais simples, um Dockerfile é um documento de texto contendo todos os comandos necessários para construir uma imagem a partir da linha de comando. É como um manual de instruções para montar um conjunto de blocos na imagem desejada. Vamos explorar como construir um Dockerfile a partir de um cenário prático, usando uma imagem Python como exemplo. Na minha máquina local (fora do contêiner), há um script Python chamado Optimal_Hotel_Matching.py. É um programa de web scraping. Vamos tentar executá-lo dentro do contêiner: Como esperado, há um erro porque a biblioteca HTTP requests, que é um módulo de terceiros, não está instalada na imagem Python. Este é um cenário típico onde precisamos configurar um ambiente de dependências. Vamos tentar resolver isso usando um Dockerfile. Antes de escrever nosso primeiro Dockerfile, vamos nos familiarizar com algumas instruções comuns do Dockerfile:
FROM: Especifica a imagem base para a construção.MAINTAINER: Descreve o criador da imagem com nome e email.RUN: Um dos comandos mais cruciais em um Dockerfile. Ele executa comandos no contêiner e confirma os resultados.CMD: Especifica o comando a ser executado quando o contêiner inicia.COPY: Copia arquivos do host para o sistema de arquivos do contêiner.WORKDIR: Define o diretório de trabalho para quaisquer comandosRUN,CMDouENTRYPOINTque seguem no Dockerfile.
Agora, vamos escrever nosso primeiro Dockerfile para atender às nossas necessidades: instalar a biblioteca requests e executar o script. Aqui está uma solução possível:
FROM python:3.7 # Especifica a imagem base como python:3.7
MAINTAINER ultra "tech@novita.ai" # Nome e email do criador da imagem
RUN pip install requests # Instala a biblioteca requests
WORKDIR /dockerfileTest # Define o diretório de trabalho
COPY . . # Copia o conteúdo do diretório atual para o contêiner
CMD ["python", "Optimal_Hotel_Matching.py"] # Comando para executar o script
Salve o conteúdo acima em um arquivo chamado Dockerfile no diretório do seu projeto. Agora, vamos construir a imagem usando o comando docker build, marcando-a para fácil identificação:
[root@novita dockerfileTest]# docker build --tag python:requests .
Sending build context to Docker daemon 5.12 kB
...
Após a conclusão da construção, use o comando docker images para verificar:
[root@novita dockerfileTest]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python requests 04f20acdc288 2 hours ago 926 MB
...
Você pode ver que uma nova imagem Python marcada como requests foi gerada localmente. Tente executar esta imagem para ver se o erro No module named 'requests' persiste, e se o programa é executado como esperado.
[root@novita dockerfileTest]# docker run python:requests
Computing distance between 116.368816,39.866464 and 116.438946,39.921624
Computing distance between 116.370910,39.869603 and 116.438946,39.921624
...
Sucesso! O contêiner executou o código e saiu. É o fim? Neste artigo, compartilhei uma aplicação simples de Dockerfiles. Em ambientes de produção empresarial reais, os Dockerfiles tendem a ser mais complexos.
Novita AI é a plataforma de nuvem completa que impulsiona suas ambições de IA. Com APIs perfeitamente integradas, computação serverless e aceleração de GPU, fornecemos as ferramentas econômicas que você precisa para construir e escalar rapidamente seu negócio baseado em IA. Elimine dores de cabeça de infraestrutura e comece gratuitamente - Novita AI torna seus sonhos de IA realidade.
Leitura Recomendada:
