Docker - Apresentando o comando WORKDIR
Hoje veremos com mais detalhes o comando WORKDIR do Docker. |
O comando
WORKDIR é usado para definir o diretório de
trabalho de um contêiner do Docker a qualquer momento.
O comando é especificado
no arquivo Dockerfile.
Obs: Um
arquivo Dockerfile é o arquivo de texto que cria
imagens do Docker. Este arquivo de texto contém
instruções
específicas sobre o contêiner.
Qualquer comando
RUN, CMD, ADD, COPY ou ENTRYPOINT será executado no
diretório de trabalho especificado pelo
comando WORKDIR.
Se o comando
WORKDIR não estiver gravado no Dockerfile, ele será criado automaticamente pelo
compilador Docker.
Portanto, pode-se dizer que o comando executa
mkdir e cd implicitamente:
FROM ubuntu:16.04 WORKDIR /projeto RUN npm install |
Neste código se o
diretório do projeto não existir, ele será
criado e o comando RUN será executado dentro do
diretório
projeto.
Nota: O comando WORKDIR /usr/src/app seria então equivalente a executar RUN mdkir -p /usr/src/app
Reutilizando WORDDIR
O comando WORKDIR pode ser reutilizado para definir um novo diretório de
trabalho em qualquer estágio do Dockerfile.
O caminho do novo diretório de trabalho deve ser fornecido em relação ao diretório de trabalho atual.
FROM ubuntu:16.04 WORKDIR /projeto RUN npm install WORKDIR ../projeto2
RUN touch arquivo.cpp |
Embora os
diretórios possam ser criados e alterados manualmente, é altamente recomendável
que você use o WORKDIR
para especificar o diretório atual no qual você gostaria
de trabalhar, pois isso facilita a solução de problemas.
Desta forma você
pode pensar no WORKDIR como um CD dentro do contêiner (ele afeta os comandos
que vêm depois no
Dockerfile, como o comando RUN).
Se você removeu o
WORKDIR no seu exemplo acima, a instalação do RUN npm não funcionaria porque
você não estaria no
diretório /projeto dentro do seu contêiner.
A seguir temos um exemplo onde aplicação do comando WORKDIR é feita no local
errado :
FROM microsoft/aspnetcore:2 COPY --from=build-env /publish /publish WORKDIR /publish ENTRYPOINT ["dotnet", "/publish/api.dll"] |
Vamos corrigir a aplicação do comando WORKDIR :
FROM microsoft/aspnetcore:2 WORKDIR /publish
COPY --from=build-env /publish |
No código também removemos a indicação para a pasta /publish do comando COPY.
E estamos conversados...
"E, chegando-se
Jesus, falou-lhes, dizendo: É-me dado todo o poder no céu e na terra."
Mateus 28:18
Referências:
C# - StreamReader, StringReader e TextReader .
C# - Imprimindo um arquivo texto -
C# - Usando OpenFileDialog - Macoratti
Docker - Criando um Contâiner para .NET Core
Minicurso Docker - Apresentando o Docker
Docker - Trabalhando com contêineres