People new to Docker often don't realize that Docker filesystems are temporary by default. If you start up a Docker image you'll get a container that on the surface behaves much like a virtual machine. You can create, modify, and delete files. However, unlike a virtual machine, if you stop the container and start it up again, all your changes will be lost -- any files you previously deleted will now be back, and any new files or edits you made won't be present.
Volumes in docker containers allow for persistent data, and for sharing host-machine data inside a container.
[[email protected] ~]# docker run -it -v /data --name=vol3 8251da35e7a7 /bin/bash
[email protected]:/# cd /data/
[email protected]:/data# touch abc{1..10}
[email protected]:/data# ls
abc1 abc10 abc2 abc3 abc4 abc5 abc6 abc7 abc8 abc9
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d87bf9607836 8251da35e7a7 "/bin/bash" About a minute ago Up 31 seconds vol3 [[email protected] ~]#
[[email protected] ~]# docker inspect d87bf9607836
"Mounts": [ { "Name": "cdf78fbf79a7c9363948e133abe4c572734cd788c95d36edea0448094ec9121c", "Source": "/var/lib/docker/volumes/cdf78fbf79a7c9363948e133abe4c572734cd788c95d36edea0448094ec9121c/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true
[[email protected] ~]# docker run -it --volumes-from vol3 8251da35e7a7 /bin/bash
[email protected]545be:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# ls
/data
abc1 abc10 abc2 abc3 abc4 abc5 abc6 abc7 abc8 abc9
[[email protected] ~]# docker run -it -v /etc:/etc1 8251da35e7a7 /bin/bash
Here: /etc is host machine directory and /etc1 is the target inside container