Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Você pode ter casos em que é importante que um aplicativo seja capaz de persistir dados em um contêiner ou você deseja mostrar arquivos em um contêiner que não foram incluídos no tempo de compilação do contêiner. O armazenamento persistente pode ser fornecido aos contêineres de duas maneiras:
- Montagens de ligação
- Volumes nomeados
O Docker tem uma ótima visão geral de como usar volumes , por isso é melhor ler isso primeiro. O resto desta página se concentra nas diferenças entre Linux e Windows e fornece exemplos sobre o Windows.
Montagens de Ligação
As montagens de ligação permitem que um contêiner compartilhe um diretório com o host. Isso é útil se você quiser um local para armazenar arquivos na máquina local que estão disponíveis se você reiniciar um contêiner ou quiser compartilhá-lo com vários contêineres. Se você quiser que o contêiner seja executado em várias máquinas com acesso aos mesmos arquivos, um volume nomeado ou montagem SMB deve ser usado.
Observação
A montagem associativa diretamente em volumes compartilhados de cluster (CSV) não é suportada, enquanto máquinas virtuais que atuam como um host de contêiner podem ser executadas em um volume CSV.
Permissões
O modelo de permissão usado para montagens de ligação varia com base no nível de isolamento do contêiner.
Os contentores que usam isolamentoHyper-V usam um modelo simples de permissões de só leitura ou de leitura e escrita. Os arquivos são acessados no host usando a LocalSystem conta. Se o acesso for negado no contêiner, verifique se LocalSystem tem acesso a esse diretório no host. Quando o sinalizador somente leitura é usado, as alterações feitas no volume dentro do contêiner não serão visíveis ou persistidas no diretório no host.
Os contêineres do Windows que usam isolamento de processo são ligeiramente diferentes porque usam a identidade do processo dentro do contêiner para acessar dados, o que significa que as ACLs de arquivo são respeitadas. A identidade do processo em execução no contêiner ("ContainerAdministrator" no Windows Server Core e "ContainerUser" nos contêineres do Nano Server, por padrão) será usada para acessar os arquivos e diretórios no volume montado em vez de LocalSystem, e precisará ter acesso para usar os dados.
Como essas identidades só existem no contexto do contêiner - não no host onde os arquivos estão armazenados -, você deve usar um grupo de segurança conhecido, como Authenticated Users ao configurar as ACLs para conceder acesso aos contêineres.
Advertência
Não vincule diretórios confidenciais, como C:\ em um contêiner não confiável. Isso permitiria que ele alterasse arquivos no host aos quais normalmente não teria acesso e poderia criar uma violação de segurança.
Exemplo de uso:
-
docker run -v c:\ContainerData:c:\data:ROpara acesso somente de leitura -
docker run -v c:\ContainerData:c:\data:RWpara acesso de leitura e gravação -
docker run -v c:\ContainerData:c:\datapara acesso de leitura-gravação (padrão)
Ligações simbólicas
Os links simbólicos são resolvidos no contêiner. Se você vincular um caminho de host a um contêiner que seja um link simbólico ou contenha links simbólicos - o contêiner não poderá acessá-los.
Montagens SMB
No Windows Server versão 1709 e posterior, o recurso chamado "SMB Global Mapping" torna possível montar um compartilhamento SMB no host e, em seguida, passar diretórios nesse compartilhamento para um contêiner. O contêiner não precisa ser configurado com um servidor, compartilhamento, nome de usuário ou senha específicos - tudo isso é tratado no host. O contentor funcionará como se tivesse armazenamento local.
Etapas de configuração
No host de contêiner, mapeie globalmente o compartilhamento SMB remoto:
$creds = Get-Credential New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:Este comando usará as credenciais para autenticar com o servidor SMB remoto. Em seguida, mapeie o caminho de compartilhamento remoto para G: letra da unidade (pode ser qualquer outra letra de unidade disponível). Os contêineres criados nesse host de contêiner agora podem ter seus volumes de dados mapeados para um caminho na unidade G:.
Observação
Ao usar o mapeamento global SMB para contêineres, todos os usuários no host de contêiner podem acessar o compartilhamento remoto. Qualquer aplicativo em execução no host do contêiner também terá acesso ao compartilhamento remoto mapeado.
Criar contêineres com volumes de dados mapeados para uma partilha SMB montada globalmente através do docker run -it --name demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
Dentro do contêiner, c:\AppData1 será mapeado para o diretório "ContainerData" do compartilhamento remoto. Todos os dados armazenados no compartilhamento remoto mapeado globalmente estarão disponíveis para aplicativos dentro do contêiner. Vários contêineres podem obter acesso de leitura/gravação a esses dados compartilhados com o mesmo comando.
Este suporte de mapeamento global SMB é um recurso do lado do cliente SMB que pode funcionar em cima de qualquer servidor SMB compatível, incluindo:
- Servidor de arquivos escalável sobre o Storage Spaces Direct (S2D) ou uma SAN tradicional
- Arquivos do Azure (compartilhamento SMB)
- Servidor de arquivos tradicional
- Implementação por terceiros do protocolo SMB (ex: dispositivos NAS)
Observação
O mapeamento global SMB não suporta pastas DFS Namespaces (DFSN). Por exemplo, se você mapear um compartilhamento raiz DFSN com New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1', ao ler os destinos de pasta da raiz, retornará o erro "O local de rede não pode ser alcançado".
Volumes nomeados
Os volumes nomeados permitem criar um volume por nome, atribuí-lo a um contêiner e reutilizá-lo posteriormente com o mesmo nome. Você não precisa acompanhar o caminho real de onde ele foi criado, apenas o nome. O mecanismo Docker no Windows tem um plug-in de volume nomeado interno que pode criar volumes na máquina local. Um plug-in adicional é necessário se você quiser usar volumes nomeados em várias máquinas.
Exemplos de passos:
-
docker volume create unwound- Crie um volume chamado 'desenrolado' -
docker run -v unwound:c:\data microsoft/windowsservercore- Inicie um contêiner com o volume mapeado para c:\data - Escreva alguns arquivos em c:\data no contêiner e, em seguida, pare o contêiner
-
docker run -v unwound:c:\data microsoft/windowsservercore- Iniciar um novo contentor - Executar
dir c:\datano novo contêiner - os arquivos ainda estão lá
Observação
O Windows Server converterá nomes de caminhos de destino (o caminho dentro do contêiner) em minúsculas; ou seja, -v unwound:c:\MyData, ou -v unwound:/app/MyData em contêineres Linux, resultará em um diretório dentro do contêiner de c:\mydata, ou /app/mydata em contêineres Linux, sendo mapeado (e criado, se não existir).