December 1, 2022

sullivanprogressplaza

It's the Technology

How to Back Up Your Docker Volumes

Graphic showing the Docker logo

Docker volumes are utilized to store persistent facts individually from your containers. Info which is kept in a volume stays obtainable immediately after your containers prevent, allowing for you to containerize stateful workloads.

Although volumes outlive containers, this is not more than enough protection for output programs. You really should again up your volumes so you can recuperate them soon after a catastrophe. Generating typical quantity backups assures you’re in a position to restore your environment if your Docker host is compromised or facts is unintentionally deleted.

Running Quantity Backups

Docker doesn’t have a designed-in mechanism for backing up volumes or exporting their contents. You have to have to set up your possess alternative to entry the quantity and duplicate its data to your backup spot.

Developing a non permanent container that mounts the volume you have to have to back again up is typically the least difficult way to commence. Include the --volumes-from flag to a docker run command to automatically mount an present container’s volumes into your backup container. You can then use tools these kinds of as tar and gzip to deposit an archive of the volume’s articles into your performing listing.

Here’s a finish case in point of this system:

# Create a container that merchants knowledge in the "mysql_facts" volume
docker operate -d 
    --name mysql 
    -v mysql_knowledge:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=mysql 
    mysql:8

# Start a temporary container to again up the "mysql_facts" volume
docker operate --rm 
    --volumes-from mysql
    -v $PWD:/backup-dir 
    ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql

The --volumes-from flag implies the momentary backup container receives entry to the mysql container’s volumes. The /var/lib/mysql directory inside of the backup container exposes the volume’s articles mainly because this is the path used by the mysql container. Tarring the route will develop an archive of your volume that you can use as a backup. It will get deposited into your functioning listing for the reason that of the bind mount that’s set up by the -v flag.

The --rm flag will eliminate the backup container as soon as the command completes. This leaves the archive in your functioning directory, all set to be moved to prolonged-term storage. You can automate backup development by introducing the docker operate command as a cron job.

Restoring Your Backup

You can use a comparable strategy to restore your backup. When you are changing the contents of an present quantity, produce one more temporary container with the quantity and a bind mount to your backup archive. Extract the contents of the archive into the volume’s mount path.

$ docker run --rm 
    --volumes-from mysql
    -v $PWD:/backup-dir
    bash -c "cd /var/lib/mysql && tar xvf /backup-dir/mysql-backup.tar"

This can be risky if containers are actively utilizing the volume. Overwriting data files that are in use could cause mistakes and unexpected habits. You can use the docker quit command to briefly halt your containers right before bringing them back up with docker start off.

$ docker prevent mysql

# Restore the backup
# ...

$ docker start out mysql

Generate the volume ahead of you start out your container if you’re restoring a backup to a new host:

$ docker volume generate new_quantity

Then mount this quantity to your short term container:

docker run --rm 
    -v new_quantity:/var/lib/mysql
    -v $PWD:/backup-dir 
    ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql

Setting up your application container with the exact quantity will offer entry to the documents you’ve restored:

docker operate -d 
    --title mysql 
    -v new_quantity:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=mysql 
    mysql:8

Testing these strategies allows you check your backups will be usable if you ever experience a catastrophe.

Backing Up Volumes Right

The treatment outlined previously mentioned is the advised way to again up Docker volumes. Nevertheless some conditions could be superior served by immediately copying content from the place volumes are saved on your host’s filesystem.

You’ll typically come across the information of your volumes in /var/lib/docker/volumes. Every volume will get its have subdirectory, this kind of as /var/lib/docker/volumes/mysql. In this top rated-degree path you’ll obtain a _details folder which is made up of all the files saved inside of the volume.

Archiving the /var/lib/docker/volumes listing can be a hassle-free way to swiftly backup every little thing on your host. You’ll need to use sudo nevertheless simply because every little thing under this route is owned by root.

Backing up volumes in this way is not proposed for standard use because it is not moveable across installations. Docker’s quantity driver technique indicates quantity facts will not essentially be stored on your host’s filesystem – it could be on a community share or an additional distant spot. This procedure really should only be attempted when you want a rapid backup just before you run upkeep on a specific machine.

Summary

Docker volumes require to be addressed with treatment due to the fact they incorporate your application’s persistent facts. Making normal again ups will shield you from information loss in situation your host is compromised or an errant container approach deletes data files by oversight.

Though you can develop backups by archiving Docker’s set up listing, this really should be prevented wherever feasible. Temporary backup containers may perhaps look cumbersome but they can be easily scripted and give predictable success across quantity motorists.

Once you have established a quantity backup archive, bear in mind to upload it to distant storage as before long as probable. A backup saved on the machine it originates from will be no support if you eliminate access or a hardware failure happens.