Como montar um diretório de host em um contêiner Docker

O Docker fornece ferramentas para conectar os sistemas de arquivos de contêineres e o sistema operacional host que executa o contêiner, como montagens e volumes de ligação. Eles podem ser muito úteis em ambientes de desenvolvimento e produção.
Por que montar a partir do host?
Geralmente, com o Docker, você deseja que as imagens sejam executadas independentemente do sistema host. Se você quiser, por exemplo, atualizar o código ou os arquivos de configuração de um aplicativo, é provável que queira criar uma nova versão do contêiner e reimplantá-lo. Isso permite dimensionar e mover imagens rapidamente sem se preocupar com o hardware em que são executadas.
No entanto, em um ambiente de desenvolvimento, ser capaz de montar diretamente um diretório para permitir o recarregamento a quente de configuração ou código pode ser muito útil. Por exemplo, você pode estar trabalhando em um arquivo JS ou plugin PHP que pode simplesmente arrastar e soltar no contêiner. Ou você pode querer montar um diretório de configuração NGINX inteiro para funcionar em seu site. Seja qual for o seu caso de uso, montar arquivos não é uma solução ruim.
Também é útil na produção, se você tiver serviços de host que dependem de arquivos em contêineres. Por exemplo, você pode ter um serviço de ingestão e agregação de log que preferiria que os arquivos de log do contêiner estivessem em um diretório acessível a partir do host. Embora provavelmente haja algumas soluções puras no Docker para seus problemas, às vezes é mais simples montar um volume.
Compatibilidade com macOS
Observação: como as montagens são feitas por meio da API Docker, elas funcionarão independentemente do sistema operacional host. No entanto, o macOS tem proteções extras e montagens fora de alguns diretórios de host podem falhar com “ montagens negadas ” em tempo de execução. Isso inclui / Usuários, que cobre a maioria das operações, mas se necessário, você pode corrigir isso nas configurações do Docker em Preferências > Recursos > Compartilhamento de arquivos adicionando o diretório de destino à lista.
Montando um diretório de host
Criar um bind mount é muito simples. Adicione-o com o sinalizador --mount type = bind na inicialização, especificando um diretório de origem e de destino para montar.
docker run -d \ -it \ --name container \ --mount type = bind, source = / nginxconfig, target = / etc / nginx \ nginx: mais recente
Publicidade
As montagens Bind são as mais simples, mas o Docker fornece a API de Volume para gerenciar um pouco melhor esses tipos de montagens. Os dados armazenados serão gerenciados pelo Docker e o diretório do volume será criado automaticamente no diretório do Docker. Pode não ser o que você deseja se tiver um diretório existente em mente, mas este método é melhor, pois não depende da estrutura de arquivos do sistema operacional host.
volume docker criar nginx-config docker run -d \ --name devtest \ --mount source = nginx-config, target = / etc / nginx \ nginx: mais recente
Você também pode usar o Docker Compose para definir os volumes:
versão: serviços "3.0": web: imagem: nginx: portas mais recentes: - "80:80" volumes: - nginx-config: / etc / nginx / volumes: nginx-config:
Eles são armazenados em um formato padrão acessível ao Linux:
/ var / lib / docker / volumes / volumeID / _data
No entanto, no macOS, você precisará se conectar à máquina virtual Docker para poder visualizar os volumes.
RELACIONADO: o que são volumes do Docker e como usá-los?
Montagem de arquivos únicos
Montar diretórios inteiros funciona bem quando você deseja editar muitos arquivos de configuração / código armazenados no host. No entanto, às vezes você pode querer apenas montar um único arquivo para editar, sem tocar nos outros arquivos.
Para fazer isso, você pode executar o contêiner com uma montagem de ligação, que oferece suporte a arquivos individuais se você especificar o caminho:
docker run -it \ --mount type = bind, source = / path / file. cfg, target = / etc / example / file. cfg \ nginx sh
Publicidade
Se você tiver muitos arquivos para montar dessa forma, poderá colocá-los todos no mesmo diretório de host e montar esse diretório em um local diferente no contêiner. Você pode então usar links simbólicos dentro do contêiner para vincular arquivos no diretório montado ao local apropriado.
Nenhum comentário