Need to Manage Docker Volumes using Docker Compose? We can help you
Docker Compose is a tool used for defining and running multi-container Docker applications.
This means that we can organize or arrange Docker containers to use them in a better way with the help of Docker Compose.
The main advantage of using Docker Compose is that it works in all environments such as production, staging, development, testing, as well as CI workflows.
Here at Bobcares, we often use Docker Compose to manage Docker Volumes of our customers using Docker.
Today, let’s see how our Support Engineers do this for our customers as a part of our Server Management Services.
How to Manage Docker Volumes using Docker Compose
Docker Volumes are mounted on Docker containers to store data the Docker Container generates while running. We can manage it with the help of Compose.
Before going into the steps to manage Docker Volumes with the help of Docker Compose we will see what are the prerequisites for this setup.
We will use the following version of Docker runtime and Docker-Compose:
1. Docker version 18.09.2, build 6247962 2. Docker-compose version 1.23.2, build 1110ad01 3. Compose file version 3: Works with 1.13.0 and above
Steps to use Docker Compose to manage Docker
Now we will see the steps our Support Engineers use to manage Docker volumes with the help of Docker Compose.
Taking Ghost CMS deployment as an example here, we will check the steps to follow.
1. First, we will create a directory ‘ComposeSamples’ and inside it, we will create a file ‘docker-compose.yaml’.
$ mkdir ComposeSamples $ cd ComposeSamples Contents of docker-compose.yaml: version: "3.0" services: web: image: ghost:latest ports: - "2368:2368" volumes: - cms-content:/var/lib/ghost/content volumes: cms-content:
The above Compose file has a website running with the latest image of ghost CMS from Docker Hub’s official repository.
A Ghost container’s default port 2368 and default mount point for the website’s contents /var/lib/ghost/content are considered as the container’s official documentation here.
Hence we can say that the volume called cms-content mounted at /var/lib/ghost/content.
[Need assistance? We are happy to help you!]
2. Syntax and Verbosity
The syntax we can introduce to a volume using docker-compose is quite simple. We will start with something similar to a container and mention the name of the volume that we want to mount inside it.
We will give the below syntax if we do not wish to give a name:
version: "3.0" services: web: image: ghost:latest ports: - "2368:2368" volumes: - /var/lib/ghost/content
For making it more verbose, we will mention the Docker Volume as a top-level definition given below:
version: "3.0" services: web: image: ghost:latest ports: - "2368:2368" volumes: - cms-content:/var/lib/ghost/content ## Define that cms-content is in fact a volume. volumes: cms-content:
3. Bind Mounts
Bind mounts are parts of the host file system which can be mounted directly inside the Docker container.
For adding a bind mount we will simply mention the host directory we wish to share and the mount point inside the Docker container will get mounted.
volumes: - /home/<USER>/projects/ghost: /var/lib/ghost/content
We can use any path instead of /home/<USER>/projects/ghost on the Docker host we want, as long as we have access to it.
When we use a more verbose syntax, the syntax file will be as given below:
volumes: - type: bind source: /home/USER/projects/ghost target: /var/lib/ghost/content
To conclude we saw how our Support Engineers use Compose for manging Docker Volumes.