Reputation: 1874
I'm reading Docker's user guide section on volumes at: https://docs.docker.com/engine/userguide/containers/dockervolumes/
At the very first part it indicates how to create and add a volume to a container, this I will call "method 1":
You can use the -v multiple times to mount multiple data volumes. Now, mount a single volume in your web application container.
$ docker run -d -P --name web -v /webapp training/webapp python app.py
This will create a new volume inside a container at /webapp.
Later on it goes to talk about Data volume containers, this I will call "method 2":
If you have some persistent data that you want to share between containers, or want to use from non-persistent containers, it’s best to create a named Data Volume Container, and then to mount the data from it.
$ docker create -v /dbdata --name dbstore training/postgres /bin/true
Here's what I don't get, what's the difference between implementing a volume through simply using the -v
command with docker run
(method 1) v.s. implementing a volume by using a "Data volume container" (method 2)?
It seems both ways you are just creating a volume that is persistent through the life of image's non-persistent containers, correct me if I'm wrong.
Upvotes: 3
Views: 828
Reputation: 8063
In my understanding, at least from docker 1.12 on, a volume is always the same thing: some persistant data stored somewhere on the host. But there are different ways to manage a volume:
docker volume create
, and let docker manage it. It will be saved somewhere on the host system (e.g. /var/lib/docker), but you don't really care where and how exactly.Then, there are "tricks" (as described here. For instance:
"if you create a named volume by running a new container from image by docker run -v my-precious-data:/data imageName, the data within the container under /data will be copied into the named volume."
So the way you create/manage your volume might differ a bit, but it essentially always is a volume.
Upvotes: 1