Editado 2 meses atrás por ExtremeHow Equipe Editorial
Docker DesktopPastasCompartilhamento de ArquivosHostContêineresConfiguraçãoDevOpsDesenvolvimento de SoftwareComputação em NuvemVirtualização
Tradução atualizada 2 meses atrás
Docker é uma ferramenta poderosa usada para desenvolver e implantar aplicações dentro de containers. Containers são um ambiente isolado onde as aplicações podem ser executadas sem interferência de outros processos na mesma máquina. Ao usar o Docker, você pode se deparar com situações em que precisa compartilhar arquivos ou pastas entre a máquina host e os containers Docker. Este guia irá orientá-lo no processo de compartilhamento de pastas entre uma máquina host e containers Docker de maneira detalhada e abrangente. Cobriremos os conceitos básicos, daremos exemplos e analisaremos os possíveis desafios.
Antes de seguir para os passos de compartilhamento de pastas, é importante entender como o Docker lida com a persistência de dados. Containers Docker são efêmeros; uma vez desligados, quaisquer dados armazenados neles podem ser perdidos. O Docker fornece diversos mecanismos para gerenciar e persistir dados, e uma das formas principais é através dos volumes. Um volume do Docker é um armazenamento de dados persistente ao qual um container pode acessar, e ele existe fora do ciclo de vida do container.
O Docker gerencia volumes de forma independente, o que significa que eles estão isolados de qualquer container específico. Isso contribui significativamente para a durabilidade dos dados, porque mesmo que você exclua um container, os dados dentro do seu volume permanecem intactos e podem ser anexados a outro container. Volumes são ideais para compartilhar pastas entre hosts e containers Docker devido à sua independência de tempo de vida do container e sua capacidade de serem controlados de forma explícita.
O Docker oferece suporte a diferentes tipos de volumes para diferentes casos de uso:
A maneira mais simples de compartilhar uma pasta entre um host e um container Docker é através de um bind mount. Vamos ver os passos envolvidos e um exemplo:
Crie um diretório no seu sistema host que você deseja compartilhar com o Docker. Por exemplo, você pode criar um diretório chamado /Users/username/shared
.
Em seguida, atualize o comando Docker run para incluir o bind mount. Use a flag -v
ou --volume
após o mapeamento do caminho. Por exemplo, para montar /Users/username/shared
em /shared
no seu container, o comando é:
docker run -v /Users/username/shared:/shared my-image
Neste exemplo, my-image
refere-se à imagem Docker que você está executando. A montagem permite que quaisquer alterações feitas em /shared
dentro do container sejam refletidas na pasta /Users/username/shared
no host.
Uma vez que o container estiver em execução com um bind mount, quaisquer arquivos modificados dentro de /shared
no container afetam diretamente os arquivos no diretório /Users/username/shared
no host e vice-versa.
Aqui está um exemplo prático de compartilhamento de arquivos entre um host e um container Docker usando o servidor web Nginx. Digamos que você queira servir arquivos HTML localizados em um diretório na sua máquina host:
website
no seu host.website
adicione um arquivo index.html
com algum conteúdo.Use o seguinte comando para montar o diretório website
do /usr/share/nginx/html
no container:
docker run --name my-nginx -v "$PWD"/website:/usr/share/nginx/html:ro -d nginx
A opção :ro
torna o bind mount somente leitura dentro do container.
Visite http://localhost
em um navegador web para ver o arquivo index.html
servido pelo Nginx a partir de um diretório compartilhado no seu host.
Enquanto bind mounts se relacionam diretamente com caminhos no sistema de arquivos do host, os volumes Docker são mais abstratos e gerenciados pelo Docker. Vamos aprender como criar e usar volumes Docker:
Use o comando docker volume create
para criar um novo volume, conforme mostrado abaixo:
docker volume create my-volume
Este comando cria um volume chamado my-volume
que será gerenciado pelo Docker.
Para anexar o volume criado ao container, use o seguinte comando:
docker run -v my-volume:/app/data my-image
Este exemplo monta my-volume
no container em /app/data
. Quaisquer dados escritos em /app/data
permanecem em my-volume
, mesmo se o container for parado ou excluído.
Considere um cenário onde você deseja armazenar um banco de dados entre reinicializações de container. Você pode usar um volume para montar o diretório de dados de um container de banco de dados:
docker volume create db-data
docker run -d --name my-database -v db-data:/var/lib/mysql mysql:5.7
Neste caso, quaisquer alterações de dados no diretório /var/lib/mysql
são armazenadas no volume db-data
.
Mesmo se você parar e excluir o container my-database
, o volume db-data
retém os dados, pronto para ser anexado a outra instância.
Configurar um bind mount pode ser fácil, mas pode ser problemático. Aqui estão alguns problemas comuns e soluções:
É importante garantir que o container possua as permissões necessárias para acessar o diretório montado. Caso contrário, você pode receber erros de Permissão Negada
.
Verifique o caminho do host e o caminho do container fornecidos no parâmetro -v
para garantir que estão corretos.
O daemon Docker pode ser executado como um usuário diferente do usuário do host, o que pode afetar as permissões de acesso. Você pode tentar executar o Docker com privilégios elevados ou ajustar as permissões do usuário conforme necessário.
O compartilhamento de pastas entre o host e o container Docker é uma funcionalidade essencial que facilita o desenvolvimento, a persistência de dados e a colaboração. É importante decidir qual tipo de montagem (bind mount ou volume) é apropriado para o seu caso de uso. Bind mounts oferecem controle direto do caminho, enquanto volumes Docker são mais portáteis e fáceis de gerenciar para persistência de dados a longo prazo.
Aqui estão algumas melhores práticas a serem consideradas:
Com essas percepções, métodos e exemplos, você deve estar bem equipado para lidar eficazmente com o compartilhamento de pastas entre seu host e containers Docker. Sinta-se à vontade para explorar mais e modificar os métodos para atender às necessidades do seu projeto.
Se você encontrar algo errado com o conteúdo do artigo, você pode