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/diretorioFuncionalidade
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
WORKDIRnão existir, o Docker o criará automaticamente. Isso permite que você organize melhor o sistema de arquivos do contêiner sem a necessidade de comandosRUNpara 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/appdefine/usr/src/appcomo o diretório de trabalho.Os comandos
COPY,RUN, eCMDsubsequentes 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
WORKDIRdefine o diretório/usr/src/dependenciespara instalar as dependências.Em seguida, um segundo
WORKDIRmuda o diretório para/usr/src/apppara 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 usarRUN cd /path/to/dirdentro de um comandoRUN, o uso deWORKDIRé preferível, pois permanece ativo para todos os comandos subsequentes e torna o Dockerfile mais legível e organizado.
Comportamento com Múltiplos WORKDIR
WORKDIRSe 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
WORKDIRdefine/appcomo o diretório de trabalho.O segundo
WORKDIRredefine 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