Montagem de Volumes
O parâmetro -v no docker run permite montar volumes, compartilhando dados entre o host e o contêiner. Isso é incrivelmente útil para persistir dados ou fornecer arquivos de configuração ao contêiner.
Vamos começar criando uma estrutura simples de diretórios no nosso host:
mkdir -p ~/project/nginx-data
echo "<html><body><h1>Hello from mounted volume</h1></body></html>" > ~/project/nginx-data/index.html
Estes comandos realizam o seguinte:
- Criam um novo diretório
nginx-data dentro da pasta project no seu diretório pessoal.
- Criam um arquivo HTML simples chamado
index.html dentro deste novo diretório.
Agora, vamos executar um contêiner Nginx e montar este diretório:
docker run -d --name nginx-volume -p 8081:80 -v ~/project/nginx-data:/usr/share/nginx/html nginx
Vamos detalhar este comando:
docker run: Comando para executar um novo contêiner.
-d: Executa o contêiner em segundo plano.
--name nginx-volume: Atribui o nome "nginx-volume" ao nosso contêiner.
-p 8081:80: Mapeia a porta 8081 do host para a porta 80 no contêiner.
-v ~/project/nginx-data:/usr/share/nginx/html: Monta o diretório nginx-data do nosso host no diretório /usr/share/nginx/html do contêiner. É aqui que o Nginx busca o conteúdo para servir.
nginx: O nome da imagem utilizada.
Agora, vamos verificar se a página personalizada está sendo servida:
curl http://localhost:8081
Você deverá ver o conteúdo do seu arquivo HTML personalizado: "Hello from mounted volume!"
Se não vir o conteúdo personalizado, verifique:
- Se o arquivo
~/project/nginx-data/index.html existe no seu sistema host.
- Se o contêiner está rodando:
docker ps | grep nginx-volume
- Os logs do Nginx para eventuais erros:
docker logs nginx-volume
Este método de montar um diretório do host em um contêiner é chamado de "bind mount". É uma forma direta de compartilhar arquivos. Pontos importantes para lembrar:
- O caminho do diretório no host deve ser um caminho absoluto.
- Se o diretório no host não existir, o Docker o criará automaticamente.
- Qualquer alteração nos arquivos (seja no host ou no contêiner) será visível instantaneamente para ambos.
- Cuidado com as permissões: o contêiner roda como root por padrão, o que pode criar arquivos que seu usuário no host não consiga modificar.
Ao usar este método, evitamos erros de "não é um diretório" porque estamos montando uma pasta inteira. Essa abordagem oferece flexibilidade para adicionar ou modificar arquivos sem precisar recriar o contêiner.