Docker: Creating a data volume container vs simply using the -v flag with `run`?
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.
One Solution collect form web for “Docker: Creating a data volume container vs simply using the -v flag with `run`?”
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:
- Create it and mount it to a container (your method 1). With this, you can use “volumes-from” when you want to mount volumes of one container into another container
- Create the volume using
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.
- Mount a host directory as a volume, in which case you know where it is mounted on your host and your are “responsible” for it.
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.