JanelasMacSoftwareConfiguraçõesSegurançaProdutividadeLinuxAndroidDesempenhoConfiguraçãoApple Tudo

Como compartilhar pastas entre um host e containers Docker

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.

Compreendendo os Volumes do Docker

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.

Tipos de volumes Docker

O Docker oferece suporte a diferentes tipos de volumes para diferentes casos de uso:

Usando bind mounts para compartilhar pastas

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:

Um guia passo a passo para usar bind mount

  1. Crie um diretório no host:

    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.

  2. Modifique o comando docker run:

    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.

  3. Acesse a pasta compartilhada no container:

    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.

Exemplo de uso de bind mount

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:

  1. Configure o diretório compartilhado:
    • Crie um diretório chamado website no seu host.
    • Dentro do diretório website adicione um arquivo index.html com algum conteúdo.
  2. Execute o container Nginx com um bind mount:

    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.

  3. Acesse o servidor Nginx:

    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.

Usando volumes Docker para compartilhar pastas

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:

Criando um volume 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.

Anexando um volume a um container

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.

Exemplo de uso de volume

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:

  1. Crie um volume Docker:
    docker volume create db-data
  2. Execute o container de banco de dados com o volume:
    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.

  3. Durabilidade dos dados:

    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.

Debugging e resolução de problemas com bind mount

Configurar um bind mount pode ser fácil, mas pode ser problemático. Aqui estão alguns problemas comuns e soluções:

Conclusão e melhores práticas

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


Comentários