WORKDIR

A instrução WORKDIR em um Dockerfile define o diretório de trabalho para qualquer instrução RUN, CMD, ENTRYPOINT, COPY, ou ADD que venha após ela no Dockerfile. Se o diretório especificado não existir, ele será criado automaticamente.

Sintaxe Básica

WORKDIR /caminho/para/diretorio

Funcionalidade

  • Definir o Diretório Atual: Após a execução de um comando WORKDIR, todos os comandos subsequentes no Dockerfile são executados nesse diretório, a menos que um comando subsequente altere o diretório de trabalho.

  • Criação Automática de Diretórios: Se o caminho especificado no WORKDIR não existir, o Docker o criará automaticamente. Isso permite que você organize melhor o sistema de arquivos do contêiner sem a necessidade de comandos RUN para criar diretórios.

Exemplos de Uso

Definir o Diretório de Trabalho para uma Aplicação

FROM node:14

# Define o diretório de trabalho para a aplicação
WORKDIR /usr/src/app

# Copia os arquivos para o diretório de trabalho
COPY package*.json ./

# Instala as dependências
RUN npm install

# Copia o restante do código
COPY . .

# Expõe a porta e define o comando de inicialização
EXPOSE 3000
CMD ["npm", "start"]

Neste exemplo:

  • O WORKDIR /usr/src/app define /usr/src/app como o diretório de trabalho.

  • Os comandos COPY, RUN, e CMD subsequentes assumem que o diretório de trabalho atual é /usr/src/app.

Trabalhar com Múltiplos Diretórios

Você pode usar várias instruções WORKDIR para organizar a estrutura do contêiner:

Neste exemplo:

  • A primeira instrução WORKDIR define o diretório /usr/src/dependencies para instalar as dependências.

  • Em seguida, um segundo WORKDIR muda o diretório para /usr/src/app para copiar o código da aplicação e definir o comando de inicialização.

Considerações

  • Evitando Caminhos Relativos: É uma boa prática usar caminhos absolutos com WORKDIR, pois caminhos relativos podem causar comportamento inesperado.

  • Combinando com RUN: Embora você possa usar RUN cd /path/to/dir dentro de um comando RUN, o uso de WORKDIR é preferível, pois permanece ativo para todos os comandos subsequentes e torna o Dockerfile mais legível e organizado.

Comportamento com Múltiplos WORKDIR

Se você definir WORKDIR várias vezes no mesmo Dockerfile, o diretório de trabalho atual será atualizado, mas o comando WORKDIR anterior não será desfeito.

Nesse exemplo:

  • O primeiro comando WORKDIR define /app como o diretório de trabalho.

  • O segundo WORKDIR redefine o diretório de trabalho para /app/subdir.

O uso do WORKDIR facilita a construção de imagens Docker organizadas e consistentes, garantindo que os arquivos e comandos sejam sempre executados no contexto certo.

Laboratório

O uso do WORKDIR seria basicamente criar e entrar num diretório:

Se a imagem abaixo for construída e um container for executado baseado nesta imagem, é possível visualizar os diretórios desta distribuição:

Alterando e reconstruindo a imagem para utilizar WORKDIR é possível verificar que o diretório /app foi criado e ao iniciar o container o diretório inicial foi /app ao invés de /:

Destaque para a inclusão do WORKDIR na construção da imagem:

Last updated