Mounting volumes from host directories
You use the --volume option to explicitly map a directory in a container from a known location on the host. The target location in the container can be a directory created with the VOLUME command, or any directory in the container's filesystem. The source is the location on the host filesystem.
I'll create a dummy configuration file for my app in a directory on the C drive on my Windows machine:
PS> mkdir C:\app-config | Out-Null
PS> echo 'VERSION=17.06' > C:\app-config\version.txt
Now I'll run a container which maps a volume from the host, and read the configuration file which is actually stored on the host:
> docker container run `
--volume C:\app-config:C:\app\config `
dockeronwindows/ch02-volumes `
cat C:\app\config\version.txt
VERSION=17.06
The --volume option specifies the mount in the format {source}:{target}. The source is the host location, which needs to exist. The target is the container location, which does not need to exist - but needs to be empty if it does exist.
Volume mounts are useful for running stateful applications in containers, like databases. You can run SQL Server in a container, and have the database files stored in a location on the host - which could be a RAID array on the server. When you have schema updates, you remove the old container and start a new container from the updated Docker image. You use the same volume mount for the new container, so the data is preserved from the old container.