In this guide, we about see how to attach a persistent volume in a docker container. If we don’t have a separate storage the data will not persist once the container is no longer up and running.

For demonstration purpose we are going to use with an MYSQL container its data will be saved under /var/lib/mysql inside the docker container, so our volume should be bind mounted under the same location from our docker host to the container with required proper SELinux contexts.



Articles related to Docker Series:
  1. How to install Docker on Red Hat Enterprise Linux and CentOS Linux 7
  2. Search for Docker images and launch a container
  3. Connect to Docker containers and expose the network
  4. How to manage Docker containers
  5. Managing Docker data persistently by attaching a volume

 

Step 1: Label with SELinux context for docker volume

Create a directory to save the data of the container and it should be labelled with “svirt_sandbox_file_t” Moreover it needs to be owned by user and group 27:27 recursively.

# mkdir /mysql_container
# chown -R 27:27 /mysql_container
# chcon -t svirt_sandbox_file_t /mysql_container

 

Manage data in Docker container

Create bind volume for docker container

Step 2: Mounting a Volume

Let’s download MySQL docker image to launch a docker container

# docker pull mysql

 

To know about the available Environment Variables of MYSQL container image navigate to

Click Here to know the MySQL containers environment variables from Docker Hub

We are using with only below three of environment variables for now.

MYSQL_ROOT_USER
MYSQL_ROOT_PASSWORD
MYSQL_DATABASE

 

Launch a container from MySQL image in detach mode in the name of “mysql-pro-dbsrv” by mounting volume from source to destination using “-v” option. By following we can assign to a number of variables which going to be used inside the container. To assign variables to use with “-e” the option.

# docker run --name mysql-pro-dbsrv -d -v /mysql_container:/var/lib/mysql/ -e MYSQL_ROOT_USER=root -e MYSQL_ROOT_PASSWORD=password123 mysql
# docker ps

 

Launch a container by attaching a volume

Launch a container by attaching a volume

  1. –name Name of the container
  2. -d Launching container in detach mode
  3. -v Bind mount a volume
  4. -e Set environment variables

Step 3: Verifying environment variable and MYSQL DB

Once container up and running access its shell to verify DB files.

# docker exec -it mysql-pro-dbsrv /bin/bash
# ls -lthr /var/lib/mysql/

 

List the MySQL file inside the container

List the MySQL file inside the container

List the Environment variables and do a grep

# env | grep MYSQL

 

Finding the assigned env variable in a container

Finding the assigned env variable in a container

Login to MYSQL Database with assigned environmental variables.

# mysql -u root -p
# exit

 

Verify MySQL login in Container

Verify MySQL login in Container

Now, let us check MYSQL related files from docker host. The database files are saved under below location which mounted inside a Docker container.

# ls -lthr /mysql_container/

 

List the MySQL files in bind mount locally from the Docker host

List the MySQL files in bind mount locally from the Docker host




Step 4: Removing MYSQL container and data

To remove a Docker persistent storage we need to follow the above steps in reverse order.

But before starting with removing first we need to stop the container, and then remove the container, by following remove all files from bind source and finally remove the MySQL image.

# docker stop mysql-pro-dbsrv
# docker rm mysql-pro-dbsrv
# rm -rfv /var/local/mysql
# docker rmi mysql

 

Removing docker container and bind volume

Removing docker container and bind volume

That’s it we have completed with mounting a volume to save data persistently in Docker containers.

Conclusion:

In this short article, we have seen how to save Docker data persistently by binding a volume. By following let us cover with more docker topics till then subscribe with the newsletter to keep updated.

Babin Lonston
Overall 13+ Years of experience in IT field, 7+ years of experience in Linux administration with Virtualization & Cloud technologies. Love documentation and being Numismatics for a long time.

How to manage Docker containers

Previous article

How to install Android Studio 3.2.1 on Ubuntu 16.04 LTS/17.10/18.04 LTS

Next article

You may also like

Comments

Leave a reply

Your email address will not be published.