Setting Up Nginx With Docker Volumes And Bind Mounts
Introduction
In this blogpost, i will walk you through the process of setting up an Nginx container using Docker, with both a Docker-managed volume and bind mount. This allows you to manage data persistence and easily share files between the host system and the container.
Containers are ephemeral, meaning they short-lived so i will guide you through a better practice of using a volume or bind mounts to persist data outside of the container, so that it can be used by other containers or even outside of Docker and also retains modifications made to files even if the container is stopped or removed. To know more on containers click link to read https://hashnode.com/post/clw833r0y000c0al4bbu3dfe8
What Is A Volume?
Docker creates and maintains controlled storage areas called volumes. Because volumes are made to be independent of a container's lifecycle, even after they are created, attached to, and removed from a container, other containers will still be able to use them. Volumes may be backed up and restored, and they can be shared within containers.
What Is Bind Mounts?
Bind mounts allow you to mount a file or directory from the host computer into a container using Docker. This implies that processes running inside the container can access and modify files on the host machine—in this case, our Ubuntu machine—just as if the files were stored inside the container itself.
Prerequisites
Before you begin, ensure you have the following:
A machine running Ubuntu (instructions are based on Ubuntu 22.04 LTS).
Install Docker on your system.
Step-by-Step Guide
Step 1: Enter Root and Update Package - Authenticate user by running the command sudo su
and input password.
Step 1a: Update your package lists using command apt update
to ensure you have the latest information on the newest versions of packages and their dependencies.
Step 2: Enter Default Directory - Run command cd /var/lib/docker
to enter directory - ls
view the default files within Docker. This is where he containers, volumes etc will be saved
Step 3: Create A Docker Volume - Use command docker volume create <name your volume>
Step 3a: Verify The Creation Of The Volume - Use command docker volume ls
Step 4: Come out of Default Directory Use Command cd --
Step 4a: Enter Root Directory, Run Command cd ~
Step 5: Run an Nginx Container With The Docker Volume & Bind Mount - Run an Nginx container and mount the created volume to the /app
directory inside the container - -d
means detach so we are running the volume in a detached mode
Step 5a: Check The Running Container
Step 5b: To Inspect The Container Run Command docker inspect <container Id>
NOTE : Get your container Id when you check as seen in step 5a
Step 5b continuation : View The Volume Mounted
Step 5c: Inspect Your Volume
Step 6: Create a Directory and a File on the Host - Create a directory on the host system using the command mkdir <name your directory>
Step 7: Create A Text File & Input A Message Within This Directory - Echo the text/message you put into your file - cd <name of directory>
Enter into your directory
step 7a: Run command ls
to view your Text File "eunicedata" within your directory
Step 7b: To view the Message/Text In The Txt.File "eunicedata.txt"
Step 7c: Run Command `cd ~` To Come Out of This Directory ("eunicedata") & Return To Home
Step 8: Run an Nginx Container with a Bind Mount - Run a new Nginx container and use a bind mount to link the host directory to the /app/data
directory inside the container - " Nginx:latest" is to differentiate the the current Image from the previous
Step 8a: Verify The Running Containers
Step 9: To Open An Interactive Terminal - Docker exec -it <container ID> /bin/sh
-To access the container, use docker exec. This will generate an absolute path to the container (mention the container ID) . The absolute path gives you the exact location of your file or directory - -it
open the container in an interactive terminal - ,
is the command line interface that you use to communicate with the operating system - The "#" indicates that we are within the container when you click the Enter key.
Step 9a: List Of Default Directories
Step 9b: Navigate to the bind-mounted directory and verify the file - cd app/data
to view what is in the app directory - cat <txt.file>
To see the content "Hello, World!" of your text file within the container
Step 9c: Modify The File Inside The Container - Modified text to " Hello,Hgital" - Run command cat <name directory.txt>
to see the changes in your text file - exit
to exit the container
Step 10: Verify Changes On The Host - You should see the updated content Hello, Hagital
NOTE: This is Mount binding because changes was made in the container and has been updated on our local host succesfully
Conclusion
You have successfully set up an Nginx container with both a Docker volume and a bind mount. This setup ensures data persistence and allows you to share files between your host system and Docker containers efficiently. Docker volumes are ideal for data that should persist regardless of the container lifecycle, while bind mounts are perfect for scenarios where you need to share files between the host and the container.
Subscribe to my newsletter
Read articles from AKEH EUNICE directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by