DEV Community

Gabriel Batista
Gabriel Batista

Posted on

1

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.

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (0)

nextjs tutorial video

📺 Youtube Tutorial Series

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay