In my experiements on running Jenkins on Docker, I wondered how the volumne worked when I provided
-v to the run command.
I found a great article which succintly explains a lot about the Docker Volume - which will be handy for any docker beginer.
Original article is here
My summary goes below:
- Docker Volume is the way to persist data between container restarts and share it between containers.
- A volume is stored on the host file system. Usually within obscure directories inside
/var/lib/docker. However, a specific directory on host system can also be mounted as volume in a container.
- Volumes can be managed using
docker volumeand its sub commands.
- Docker won’t delete volume unless specifically instructed to do so. This can result in stale data on the host system. So tidying up once in a while might come handy.
- Important Caveat - Don’t try to modify the content of the volume in the Dockerfile (via RUN) as each build step creates a new volume and your changes will be discarded. If you want to change the volume content, do so using the ENTRYPOINT command in the Dockerfile. Have a look at this link.
- If you are looking for a thorough overview of different approaches to manage application data, including the use of Volume, Bind mounts, tmpfs mounts, read this longer article
Image Credit: https://docs.docker.com/engine/admin/volumes/images/types-of-mounts-volume.png