Estou tentando aprofundar minha compreensão do volume do Docker e estou tendo dificuldade em descobrir as diferenças / caso de uso de:
- O
docker volume create
comando - o
docker run -v /path:/host_path
- A
VOLUME
entrada noDockerfile
arquivo
Eu particularmente não entendo o que acontece se você combinar a VOLUME
entrada com a -v
bandeira.
Respostas:
Um volume é um dado persistente armazenado em
/var/lib/docker/volumes/...
Você pode declará-lo em um Dockerfile, o que significa que cada vez que um contêiner é iniciado a partir da imagem, o volume é criado ( vazio ), mesmo se você não tiver nenhuma
-v
opção.Você pode declará-lo em tempo de execução
docker run -v [host-dir:]container-dir
.combinar os dois (
VOLUME
+docker run -v
) significa que você pode montar o conteúdo de uma pasta de host em seu volume persistido pelo contêiner em/var/lib/docker/volumes/...
docker volume create cria um volume sem ter que definir um Dockerfile e construir uma imagem e executar um contêiner. É usado para permitir que outros contêineres montem esse volume rapidamente.
Se você persistiu algum conteúdo em um volume, mas desde então excluiu o contêiner (que por padrão não exclui seu volume associado, a menos que esteja usando docker rm -v), você pode anexar novamente esse volume a um novo contêiner (declarando o mesmo volume).
Consulte " Docker - Como acessar um volume não conectado a um contêiner? ".
Com a criação de volume do docker, é fácil reanexar um volume nomeado a um contêiner.
fonte
Dockerfile
withVOLUME
e a-v /path:/host_path/
bandeira. O conteúdo deVOLUME
será substituído pelo conteúdo de/host_path/
?docker volume create --name my_volume
seguido por adocker run --volume-from my_volume
, como saberá onde estará o ponto de montagem?docker run ...
, como posso gravar em um arquivo armazenado nomy_volume
volume? Não sei o ... caminho? do volume dentro do meu contêiner em execução porque não defini nada? Espero estar claro o suficiente, porque definitivamente não tenho certeza do meu vocábulo: - /docker volume create --name aname
cria um volume nomeado : Você atribui um caminho de contêiner em tempo de execuçãodocker run -v aname:/apath
:: esse contêiner agora tem um volume anexado a ele, montado em sua pasta / apath. Reescrevi a resposta para deixar isso claro.VOLUME
a instrução torna-se interessante quando você a combina com ovolumes-from
parâmetro de tempo de execução.Dado o seguinte Dockerfile:
Crie uma imagem com:
E gire um contêiner com:
A primeira coisa a notar é que você terá uma pasta chamada nesta imagem
myvolume
. Mas não é particularmente interessante, pois quando sairmos do contêiner o volume também será removido.Crie um arquivo vazio nesta pasta, então execute o seguinte no contêiner:
Agora gire um novo contêiner, mas compartilhe o mesmo volume com
my-first-bb
:Você verá que
my-second-bb
contém o arquivohello.txt
namyvolume
pasta.Depois de sair de ambos os contêineres, seu volume também será removido.
fonte
--rm
opção. Eu acho que pode funcionar mencionando isso. Se você não iniciou um contêiner com--rm
, ainda pode remover o contêiner e seus volumes anônimos comdocker rm -v my-container
.