A VOLUME
instrução cria um volume de dados em seu contêiner do Docker no tempo de execução. O diretório fornecido como um argumento para VOLUME
é um diretório que ignora o Union File System e é usado principalmente para dados persistentes e compartilhados.
Se você executar docker inspect <your-container>
, verá na Mounts
seção que há um Source
que representa o local do diretório no host e um Destination
que representa o local do diretório montado no contêiner. Por exemplo,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Aqui estão três casos de uso para docker run -v
:
docker run -v /data
: Isso é análogo a especificar a VOLUME
instrução em seu Dockerfile.
docker run -v $host_path:$container_path
: Isso permite que você monte a $host_path
partir de seu host $container_path
em seu contêiner durante o tempo de execução. No desenvolvimento, isso é útil para compartilhar o código-fonte em seu host com o contêiner. Na produção, isso pode ser usado para montar coisas como as informações de DNS do host (encontradas em /etc/resolv.conf
) ou segredos no contêiner. Por outro lado, você também pode usar essa técnica para gravar os logs do contêiner em pastas específicas no host. Ambos $host_path
e$container_path
devem ser caminhos absolutos.
docker run -v my_volume:$container_path
: Isso cria um volume de dados em seu contêiner em $container_path
e nomeia-o my_volume
. É essencialmente o mesmo que criar e nomear um volume usando docker volume create my_volume
. Nomear um volume como este é útil para um volume de dados de contêiner e um volume de armazenamento compartilhado usando um driver de armazenamento de vários hosts como o Flocker .
Observe que a abordagem de montar uma pasta de host como um volume de dados não está disponível no Dockerfile. Para citar a documentação do docker ,
Nota: Isso não está disponível em um Dockerfile devido à portabilidade e ao propósito de compartilhamento dele. Como o diretório do host é, por natureza, dependente do host, um diretório do host especificado em um Dockerfile provavelmente não funcionaria em todos os hosts.
Agora, se você deseja copiar seus arquivos para contêineres em ambientes que não sejam de desenvolvimento, você pode usar as instruções ADD
ou COPY
em seu Dockerfile. Eles são o que eu geralmente uso para implantação de não desenvolvimento.
COPY
aADD
. Eles são quase iguais, masADD
têm algumas habilidades extras para escrever URLs e arquivos compactados que podem ser surpreendentes.