DEV Community

Gabriel Batista
Gabriel Batista

Posted on

Como Definir o Contexto Adequado ao Construir um Dockerfile

Quantas vezes você já se deparou com a situação em que tentou criar um Dockerfile e, de repente, ele não conseguia copiar os arquivos para o container? A razão por trás disso pode estar relacionada à escolha do contexto adequado.

Quando trabalhamos com Dockerfiles, é fundamental entender que o Docker utiliza um diretório como ponto de partida inicial para a construção da imagem. Isso significa que apenas os arquivos presentes nesse diretório e seus subdiretórios são acessíveis durante o processo de build.

Por exemplo, considere a seguinte estrutura de diretórios:

├ exemplo dockerfile
│   ├── docker
│   │   ├── Dockerfile
│   │   └── .dockerignore
│   └── package.json
│   └── server.js
Enter fullscreen mode Exit fullscreen mode

Dockerfile:

FROM node:18

# Create app directory

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080

CMD [ "node", "server.js" ]
Enter fullscreen mode Exit fullscreen mode

Se tentarmos executar o comando de build a partir do diretório docker, como o exemplo a seguir:

docker build -t image/teste .
Enter fullscreen mode Exit fullscreen mode

Nos deparamos com o seguinte erro:

error docker build

Esse erro ocorre devido a incapacidade do Docker de localizar os arquivos desejados, uma vez que o contexto atual, ou seja, o diretório docker, não inclui o diretório pai que contém os arquivos relevantes.

Então, qual é a solução?

Para garantir que a compilação seja bem-sucedida, é crucial ampliar o contexto de construção. Em vez de executar o comando de build a partir do diretório docker, você deve retornar à raiz do projeto e, em seguida, utilizar o seguinte comando:

docker build -f docker/Dockerfile -t image/teste .
Enter fullscreen mode Exit fullscreen mode

Vamos analisar cada componente desse comando:

docker build: Este é o comando que dá início ao processo de construção da imagem Docker.

-f docker/Dockerfile: Especifica o arquivo Dockerfile a ser usado para construir a imagem.

-t image/teste: Essa opção define um nome (ou uma "tag") para a imagem que será criada.

".": O ponto no final do comando indica o contexto de construção, ou seja, o diretório no qual o Docker procurará o Dockerfile e quaisquer outros arquivos necessários para a construção da imagem. O ponto representa o diretório atual.

Após a execução bem-sucedida dessa instrução, você pode esperar o seguinte resultado:

docker build success

Com essa abordagem, você consegue especificar qual Dockerfile deseja utilizar e também indicar qual é o contexto. O ponto "." representa a raiz do projeto e instrui o Docker a considerar esse ponto como o contexto inicial para a construção da imagem.

Top comments (0)