Docker
  • Introdução a Containeres e Docker
    • Introdução
    • O que é um container e suas vantanges
    • VM versus Container
    • Como funcionam os containers
    • Linux
    • Container sem Docker
      • cgroup
      • cpu.max
    • LxC
    • LxD
    • Containers versus Imagens
    • Arquitetura do Docker
    • Arquitetura do Docker mais a fundo
    • Projetos Open Source
  • Instalação do Docker
    • Linux
    • Windows
      • Docker Desktop
      • Rancher Desktop
      • WSL
    • Mac
    • Visual Studio Code
  • Primeiros Passos com Docker
    • Criação e listagem básica de um container
    • Interagindo com o container
    • Executando containers continuamente
      • nginx
      • docker container run
      • docker container run nginx
      • docker container run -d nginx
      • docker container exec
    • Como usar publish de porta
      • docker container stop
      • docker container start
      • docker container rm
      • docker container rm -f $(docker container ls -qa)
    • Containers e variáveis de ambiente
      • docker container run -e
  • Desafio
    • Desafio 01 - Banco de Dados Postgresql
    • Desafio 02 - Banco de Dados MySQL
    • Desafio 03 - Banco de Dados MongoDB
  • Executando a sua primeira aplicação em containers
    • Introdução
    • Preparando o container para a aplicação
    • Executando a aplicação
      • docker container cp
  • Primeiros Passos com Docker Images
    • Introdução
    • OverlayFS na Prática
    • Copy-on-Write
    • Formas de criar uma imagem Docker
    • Como funciona o Docker Commit
    • Docker Commit na Prática
      • docker commit
    • Entendendo melhor a sua imagem
      • docker image history
      • docker image inspect
    • Entrando mais a fundo na imagem
    • Como usar a imagem Docker no modo raiz
  • Avançando em imagens Docker com Dockerfile
    • O que é Dockerfile
    • Primeira Imagem com Dockerfile
      • docker image build
    • Como funciona a construção com Dockerfile
    • Possibilidades com Dockerfile
    • FROM
    • RUN
    • WORKDIR
    • COPY
    • ADD
    • LABEL
    • ENV
    • VOLUME
    • ARG
    • EXPOSE
    • USER
    • ENTRYPOINT
    • CMD
    • ENTRYPOINT versus CMD
    • Principais comandos com imagem
    • Imagem da aplicação com Dockerfile
    • Comparando Docker Commit com Dockerfile
  • Docker Registry
    • Introdução
    • Docker Hub
    • Sua imagem com o nome certo
    • Renomear imagens com Docker Tag
      • docker image tag
    • Enviando a sua primeira imagem para o Docker Hub
      • docker image push
      • docker image pull
  • Algumas boas práticas para construção de imagem
    • Um processo por container
    • Usar imagens confiáveis
    • Otimizar sempre a sua imagem
    • Uso inteligente das camadas
    • Dockerignore
  • Multistage Build
    • Introdução
    • Multistage build na prática
    • Target para fazer o build
      • docker image build --target
    • Imagem externa no Multistage build
    • Usar um estágio de build como base
  • Docker Volume
    • Introdução
      • docker volume
    • Bind Mount
    • Particularidades do Bind Mount
    • Bind Mount no Windows
    • Exemplo com Bind Mount
    • Docker Volume
      • docker volume create
      • docker volume inspect
      • docker volume ls
      • docker volume prune
      • docker volume rm
    • Onde ficam os arquivos do Docker volume?
    • Usando o volume no Dockerfile
    • Como fazer backup de um Docker Volume
    • Exemplo com Docker Volume
    • Storage tmpfs
    • Como criar algo funcional com o que aprendemos
  • Network
    • Introdução
    • Componentes do Docker Network
    • Rede Bridge na prática
      • docker network
      • docker network create
      • docker network inspect
      • docker network ls
      • docker network prune
      • docker network rm
    • Criando a sua rede bridge
      • docker network connect
      • docker network disconnect
    • Como funciona a rede bridge por dentro
    • Rede Host na prática
    • Rede none da prática
    • Como adicionar domínios no seu container
  • Aplicação 100% no Docker
    • Introdução
    • Criação da Imagem e Envio para o Docker Hub
    • Criação do Docker Network
    • Container do PostgreSQL
    • Container da Aplicação Web
    • Atualização da aplicação
  • Docker Compose
    • Introdução
      • docker compose
    • A evolução do docker compose
    • Criação básica de um Docker Compose
      • docker compose attach
      • docker compose build
      • docker compose config
      • docker compose cp
      • docker compose create
      • docker compose down
      • docker compose events
      • docker compose exec
      • docker compose images
      • docker compose kill
      • docker compose logs
      • docker compose ls
      • docker compose pause
      • docker compose port
      • docker compose ps
      • docker compose pull
      • docker compose push
      • docker compose restart
      • docker compose rm
      • docker compose run
      • docker compose scale
      • docker compose start
      • docker compose stats
      • docker compose stop
      • docker compose top
      • docker compose unpause
      • docker compose up
      • docker compose version
      • docker compose wait
      • docker compose watch
    • Variáveis de Ambiente
    • Volume Bind Mount
    • Docker Volume
    • Docker Network - Bridge
    • Docker Network - Host Driver e Add Host
    • Ordenando a execução dos containers
    • Compose com build de imagem
    • Como Parametrizar o Compose com Variáveis de Ambiente
    • Múltiplos Composes
    • Extends
    • Merge
    • Include
    • Profiles
    • Comandos importantes do Docker Compose
  • Troubleshooting
    • Introdução
    • Docker Info
    • Docker Events
    • Docker Logs
    • Docker Inspect
    • Docker Top
    • Docker Stats
    • Docker Exec
  • Resiliência e Gerenciamento de Recursos
    • Introdução
    • Docker Restart
      • Introdução
      • on-failure
      • unless-stopped
      • always
      • Docker Compose
    • Healthcheck
      • Introdução
      • Linha de Comando
      • Docker Compose
      • Direto na Imagem
    • Gerenciamento de Recurso
      • CPU
        • Como Gerenciar CPU
        • Prática
      • Memória
        • Como Gerenciar Memória
        • Prática
      • Docker Compose
  • Fazendo um ambiente mais seguro
    • Introdução
    • Docker Scout
      • Introdução
      • Verificação Simples de Imagem
      • Como adicionar um repositório
      • Primeira melhoria na imagem
  • BUSCA RÁPIDA
    • Referências
    • Comandos
      • docker commit
      • docker compose
      • docker container
      • docker image
      • docker network
      • docker volume
    • Dockerfile
Powered by GitBook
On this page
  • O que são Bind Mounts?
  • Características dos Bind Mounts
  • Path Específico
  • Sincronização em Tempo Real
  • Maior Controle
  • Quando Usar Bind Mounts
  • Como Criar e Usar Bind Mounts
  • Montando um Diretório do Host em um Container
  • Exemplo Prático
  • Gerenciamento de Bind Mounts
  • Vantagens e Desvantagens
  • Vantagens
  • Desvantagens
  • Comparação com Volumes Docker:
  • Volumes Docker
  • Bind Mounts
  • Exemplos de Uso
  • Desenvolvimento de Aplicações
  • Compartilhamento de Logs: Para facilitar a análise de logs gerados pelo container
  • Considerações Finais
  • Laboratório
  1. Docker Volume

Bind Mount

Volume gerenciado pelo usuário

O que são Bind Mounts?

Bind mounts são uma forma de montar diretórios ou arquivos do sistema de arquivos do host diretamente em um container Docker. Diferente dos volumes, que são gerenciados pelo Docker, os bind mounts usam paths absolutos do host, permitindo que os dados no container e no host sejam sempre sincronizados.


Características dos Bind Mounts

Path Específico

Ao criar um bind mount, você especifica um path no sistema de arquivos do host que será montado em um path no container.

Sincronização em Tempo Real

Quaisquer alterações feitas no diretório ou arquivo montado dentro do container serão refletidas no host e vice-versa.

Maior Controle

Como o path no host é especificado diretamente, o usuário tem mais controle sobre onde os dados estão armazenados.


Quando Usar Bind Mounts

Bind mounts são úteis em cenários onde:

  • Precisa-se acessar diretamente arquivos do host, como logs, arquivos de configuração ou diretórios de código-fonte.

  • A persistência de dados é necessária durante o desenvolvimento, onde o código-fonte pode ser editado no host e refletido imediatamente no container.

  • Existe a necessidade de integrar ferramentas de build ou IDEs que operam diretamente no sistema de arquivos do host.


Como Criar e Usar Bind Mounts

Montando um Diretório do Host em um Container

docker run -d --name meu_container -v /path/no/host:/path/no/container imagem

Neste exemplo, /path/no/host é o diretório no host que será montado em /path/no/container no container.

Exemplo Prático

docker run -d --name webserver -v /var/www/html:/usr/share/nginx/html nginx

Neste exemplo, o diretório /var/www/html no host será montado em /usr/share/nginx/html no container. Isso permite que o conteúdo do site no host seja servido pelo servidor web NGINX dentro do container.


Gerenciamento de Bind Mounts

Bind mounts não são gerenciados pelo Docker, portanto, não aparecem nos comandos de gerenciamento de volumes (ex: docker volume ls). O gerenciamento do diretório ou arquivo é feito diretamente no sistema de arquivos do host


Vantagens e Desvantagens

Vantagens

Performance

Bind mounts podem ter um desempenho melhor, especialmente ao acessar grandes quantidades de dados, pois os dados não precisam ser movidos para um volume Docker.

Flexibilidade

Permite usar qualquer diretório ou arquivo do host, proporcionando mais controle e flexibilidade.

Desvantagens

Dependência do Host

Como o bind mount depende de paths absolutos do host, pode haver problemas de portabilidade, especialmente ao mover containers entre diferentes ambientes.

Segurança

Montar diretórios críticos do host pode expor dados sensíveis ou criar riscos de segurança se o container for comprometido.


Comparação com Volumes Docker:

Volumes Docker

São gerenciados diretamente pelo Docker, oferecem maior portabilidade, e são ideais para persistência de dados entre containers e hosts de forma agnóstica ao sistema de arquivos.

Bind Mounts

Oferecem mais controle e são ideais para casos específicos onde o acesso direto ao sistema de arquivos do host é necessário.


Exemplos de Uso

Desenvolvimento de Aplicações

Durante o desenvolvimento de software, bind mounts permitem que o código seja editado no host com as mudanças refletidas imediatamente no container:

docker run -d --name dev_container -v /path/to/source:/app node

Compartilhamento de Logs: Para facilitar a análise de logs gerados pelo container

docker run -d --name log_container -v /var/log:/container/logs nginx

Considerações Finais

Bind mounts são uma poderosa ferramenta no Docker para cenários onde o acesso direto aos dados do host é essencial. No entanto, devem ser usados com cautela devido a potenciais implicações de segurança e portabilidade. Eles são ideais para desenvolvimento, integração contínua, e outros cenários onde a sincronização de dados em tempo real entre o host e o container é necessária.


Laboratório

/tmp/volume/bind$ pwd
/tmp/volume/bind$ mkdir vol
/tmp/volume/bind$ tree
.
└── vol

1 directory, 0 files
/tmp/volume/bind$ docker container run -it 
          --mount type=bind,source="$(pwd)/vol",target=/app 
          ubuntu /bin/bash
          
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
31e907dcc94a: Pull complete
Digest: sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab63ee
Status: Downloaded newer image for ubuntu:latest        

root@72bc8b30544b:/# ls
app  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  
root@72bc8b30544b:/# cd app
root@72bc8b30544b:/app# ls

Criação de arquivo fora do container:

$ cd /tmp/volume/bind/vol
/tmp/volume/bind/vol$ touch teste.txt
/tmp/volume/bind/vol$ ls
teste.txt
root@72bc8b30544b:/app# ls
teste.txt

Criação de arquivo dentro do container:

root@72bc8b30544b:/app# touch teste2.txt
root@72bc8b30544b:/app# ls
teste.txt  teste2.txt
/tmp/volume/bind/vol$ ls
teste.txt  teste2.txt
Previousdocker volumeNextParticularidades do Bind Mount

Last updated 9 months ago