DEV Community

Aisalkyn Aidarova
Aisalkyn Aidarova

Posted on

Docker Lab 3 – Docker Volumes (The Real Power of Docker)

Duration: 45–60 minutes

Level: Beginner


Learning Objectives

After this lab students will understand:

  • What a Docker Volume (Bind Mount) is
  • Why DevOps engineers use volumes
  • Difference between copying files and mounting files
  • Why developers love Docker volumes
  • Live code changes without rebuilding Docker images

Real DevOps Scenario

Imagine a frontend developer is building a website.

Without Docker:

Edit HTML
↓

Upload to server

↓

Restart Nginx

↓

Refresh Browser
Enter fullscreen mode Exit fullscreen mode

This is slow.

With Docker Volume:

Edit HTML

↓

Save

↓

Refresh Browser

↓

Changes appear instantly
Enter fullscreen mode Exit fullscreen mode

This is exactly how many developers work locally.


Today's Goal

Instead of copying the website inside the Docker image,

we will let Docker use our local folder.

Mac Folder

↓

Docker Volume

↓

Container

↓

Browser
Enter fullscreen mode Exit fullscreen mode

Step 1 Create Project

mkdir docker-volume-lab

cd docker-volume-lab
Enter fullscreen mode Exit fullscreen mode

Step 2 Create Website

touch index.html
Enter fullscreen mode Exit fullscreen mode

Open

nano index.html
Enter fullscreen mode Exit fullscreen mode

Paste

<!DOCTYPE html>
<html>
<head>
    <title>Docker Volume Lab</title>
</head>

<body>

<h1>Docker Volume Lab</h1>

<h2>Hello Students!</h2>

<p>This file comes directly from my laptop.</p>

</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Save

CTRL+O

ENTER

CTRL+X
Enter fullscreen mode Exit fullscreen mode

Step 3 Pull Nginx Image

docker pull nginx
Enter fullscreen mode Exit fullscreen mode

Explain

We only download Nginx.

We do NOT create our own image today.


Step 4 Run Container Using Volume

docker run -d \
-p 8080:80 \
-v $(pwd):/usr/share/nginx/html \
--name volume-lab \
nginx
Enter fullscreen mode Exit fullscreen mode

Explain Every Option

docker run

Create container


-d

Detached mode

Run in background


-p 8080:80

Laptop

8080

↓

Container

80
Enter fullscreen mode Exit fullscreen mode

Browser connects to

localhost:8080
Enter fullscreen mode Exit fullscreen mode

Nginx listens on

80
Enter fullscreen mode Exit fullscreen mode

-v

Most important option today.

Volume

or

Bind Mount


$(pwd)

Means

Current Folder

Example

/Users/john/docker-volume-lab
Enter fullscreen mode Exit fullscreen mode

:

Means

Connect

this folder

to

that folder


/usr/share/nginx/html

Nginx serves websites from this folder.

Instead of copying files,

Docker reads directly from your laptop.


Architecture

Mac

index.html

↓

Docker Volume

↓

Container

↓

Nginx

↓

Browser
Enter fullscreen mode Exit fullscreen mode

Step 5 Check Running Container

docker ps
Enter fullscreen mode Exit fullscreen mode

Expected

volume-lab

Up
Enter fullscreen mode Exit fullscreen mode

Step 6 Open Browser

http://localhost:8080
Enter fullscreen mode Exit fullscreen mode

Expected

Docker Volume Lab

Hello Students!

This file comes directly from my laptop.
Enter fullscreen mode Exit fullscreen mode

Step 7 Change Website

Open

nano index.html
Enter fullscreen mode Exit fullscreen mode

Change

<h2>Hello Students!</h2>
Enter fullscreen mode Exit fullscreen mode

to

<h2>Hello DevOps Engineers!</h2>
Enter fullscreen mode Exit fullscreen mode

Save.


Step 8 Refresh Browser

No Docker commands.

No rebuild.

No restart.

Just refresh.

Expected

Hello DevOps Engineers!
Enter fullscreen mode Exit fullscreen mode

Explain Why

Docker is NOT storing the website.

Docker is reading directly from

your laptop.

Laptop File

↓

Docker

↓

Browser
Enter fullscreen mode Exit fullscreen mode

Step 9 Verify Inside Container

Enter container

docker exec -it volume-lab bash
Enter fullscreen mode Exit fullscreen mode

Go to

cd /usr/share/nginx/html
Enter fullscreen mode Exit fullscreen mode

Check

ls
Enter fullscreen mode Exit fullscreen mode

See

index.html
Enter fullscreen mode Exit fullscreen mode

Open

cat index.html
Enter fullscreen mode Exit fullscreen mode

Students will see

the updated file.

Explain

This file is NOT inside Docker.

Docker is reading it from the laptop.

Exit

exit
Enter fullscreen mode Exit fullscreen mode

Step 10 Delete Website

Back on Mac

rm index.html
Enter fullscreen mode Exit fullscreen mode

Refresh Browser.

Expected

404 Not Found


Why?

Because Docker is reading

the laptop folder.

If the laptop file disappears,

the website disappears.


Step 11 Stop Container

docker stop volume-lab
Enter fullscreen mode Exit fullscreen mode

Step 12 Remove Container

docker rm volume-lab
Enter fullscreen mode Exit fullscreen mode

Verify

docker ps -a
Enter fullscreen mode Exit fullscreen mode

Container is gone.


Key Difference

Lab 1

Dockerfile

↓

COPY

↓

Image

↓

Container
Enter fullscreen mode Exit fullscreen mode

Website lives

inside

the image.


Lab 3

Laptop

↓

Volume

↓

Container
Enter fullscreen mode Exit fullscreen mode

Website stays

on the laptop.

Docker simply reads it.


Why DevOps Engineers Use Volumes

Volumes are commonly used for:

  • Local development (edit code without rebuilding images)
  • Sharing files between the host and containers
  • Persisting database data (e.g., MySQL, PostgreSQL)
  • Keeping logs outside containers
  • Storing uploaded files

Challenge Exercise

Ask students to:

  1. Add their name to the page:
<h3>Created by Samara</h3>
Enter fullscreen mode Exit fullscreen mode
  1. Add today's date.

  2. Change the background color:

<body style="background-color: lightblue;">
Enter fullscreen mode Exit fullscreen mode
  1. Refresh the browser.

No rebuild.

No restart.

If the changes appear immediately, they have successfully used a Docker volume.

Top comments (0)