Como você organiza os Dockerfiles pertencentes a um projeto quando você tem um Dockerfile para o banco de dados, um para o servidor de aplicativos e assim por diante? Você cria algum tipo de hierarquia na fonte? Um grande projeto empresarial não pode consistir em apenas um Dockerfile?
214
Respostas:
Nota do autor
Esta resposta está desatualizada. O figo não existe mais e foi substituído pelo Docker compor . As respostas aceitas não podem ser excluídas ....
O Docker Compose suporta a construção da hierarquia do projeto. Portanto, agora é fácil oferecer suporte a um Dockerfile em cada subdiretório.
Resposta original
Acabei de criar um diretório que contém um Dockerfile para cada componente. Exemplo:
Ao criar os contêineres, forneça o nome do diretório e o Docker selecionará o arquivo Docker correto.
fonte
Nas versões mais recentes (> = 1.8.0) da janela de encaixe , você pode fazer isso
Uma grande salva.
EDIT: atualizar versões por comentário de raksja
EDIT: comentário de @vsevolod: é possível obter destaque de sintaxe no código VS, fornecendo arquivos .Dockerfile extension (em vez de nome), por exemplo, Prod.Dockerfile, Test.Dockerfile etc.
fonte
Dockerfile.web
como configuração de execução. Então, eu criei um problema: youtrack.jetbrains.com/issue/WEB-28185docker-compose.yml
arquivo, por exemplo?Use
docker-compose
e múltiploDockerfile
em diretórios separadosComo Kingsley Uchnor disse , você pode ter vários
Dockerfile
, um por diretório, que representam algo que você deseja criar.Eu gosto de ter uma
docker
pasta que contém cada aplicativo e sua configuração. Aqui está um exemplo de hierarquia de pastas do projeto para um aplicativo Web que possui um banco de dados.docker-compose.yml
exemplo:docker-compose
Exemplo de uso da linha de comando:Caso você precise de arquivos de pastas anteriores ao criar seu Dockerfile
Você ainda pode usar a solução acima e colocá-la
Dockerfile
em um diretório comodocker/web/Dockerfile
, tudo o que você precisa é definir a compilaçãocontext
dadocker-compose.yml
seguinte maneira:Dessa forma, você poderá ter coisas como esta:
e
./docker/web/Dockerfile
assim:Aqui estão alguns comandos rápidos do tldr docker-compose . Certifique-se de consultar a documentação oficial para obter mais detalhes.
fonte
COPY ../package.json /app/package.json
)? Esse arquivo geralmente estará no nível da raiz e a janela de encaixe proibiu o acesso ao pai. Que abordagem você seguirá?web
projeto de.
(indocker-compose.yml
:build: .
). Dessa forma,web
tem acesso aos arquivos raiz ao criar. Eu já vi essa pergunta relacionada: stackoverflow.com/questions/24537340/… e podemos construir a partir do diretório pai ao usar adocker
linha de comando e esta resposta mostra como fazer isso com o docker-compose: stackoverflow.com/a/45353241/ 1092815-f
opção é boa, mas eu prefiro usardocker-compose
com subpastas. Eu acho que ambas as respostas são válidas. A maioria das pessoas pode preferir manter oDockerfile
nome padrão para suportar a maioria dos IDEs fora da caixa. Não estou invalidando a primeira resposta, estou apenas fornecendo uma alternativa. Eu simplesmente não gosto que meu IDE pense que meu Dockerfile é umphp
arquivo quando eu usoDockerfile.php
, mas sim, ele funciona. Eu já vi alguns exemplos na documentação do docker;Dockerfile.build
,Dockerfile.debug
, Etc.example.Dockerfile
mantém o destaque da sintaxe e os ícones no VSCode.No Intellij, alterei simplesmente o nome dos arquivos do docker para * .Dockerfile e associei o tipo de arquivo * .Dockerfile à sintaxe do docker.
fonte
Adicione uma camada de abstração, por exemplo, um arquivo YAML como neste projeto https://github.com/larytet/dockerfile-generator que se parece com
Um script / make Python curto pode gerar todos os Dockerfiles a partir do arquivo de configuração.
fonte
Ao trabalhar em um projeto que requer o uso de vários arquivos docker, basta criar cada arquivo docker em um diretório separado. Por exemplo,
app / db /
Cada um dos diretórios acima conterá seu arquivo docker. Quando um aplicativo está sendo criado, o docker pesquisará todos os diretórios e criará todos os arquivos do docker.
fonte