Hands-on Lab

#Lab: Docker Networking Deep Dive

Master Docker networking concepts and configurations.

#๐ŸŽฏ Objectives

  • Understand Docker network drivers
  • Configure container communication
  • Implement custom networks
  • Debug networking issues

#๐Ÿ“‹ Prerequisites

  • Docker installed

#โฑ๏ธ Duration: 30 minutes


#Task 1: Explore Default Networks (5 min)

bash
1# List default networks
2docker network ls
3
4# Inspect bridge network
5docker network inspect bridge
6
7# Run container on default bridge
8docker run -d --name web1 nginx
9
10# Check container IP
11docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web1

#Task 2: Create Custom Bridge Network (10 min)

bash
1# Create custom network
2docker network create --driver bridge app-net
3
4# Inspect the network
5docker network inspect app-net
6
7# Run containers on custom network
8docker run -d --network app-net --name server1 nginx
9docker run -d --network app-net --name server2 nginx
10
11# Test DNS resolution (containers can reach each other by name)
12docker exec server1 ping -c 3 server2
13docker exec server2 ping -c 3 server1
14
15# Compare: default bridge has no DNS
16docker run -d --name isolated nginx
17docker exec isolated ping -c 1 server1  # This will fail

#Task 3: Multi-Network Communication (10 min)

bash
1# Create multiple networks
2docker network create frontend-net
3docker network create backend-net
4
5# Run frontend (on frontend network)
6docker run -d --network frontend-net --name frontend nginx
7
8# Run backend (on backend network)
9docker run -d --network backend-net --name backend nginx
10
11# Database only on backend network
12docker run -d --network backend-net --name database alpine sleep 3600
13
14# Connect backend to both networks (acts as gateway)
15docker network connect frontend-net backend
16
17# Frontend can reach backend, but not database directly
18docker exec frontend ping -c 2 backend      # Works
19docker exec frontend ping -c 2 database     # Fails (isolated)
20docker exec backend ping -c 2 database      # Works

#Task 4: Port Mapping Variations (5 min)

bash
1# Specific port
2docker run -d -p 8080:80 --name port-specific nginx
3
4# Random port
5docker run -d -P --name port-random nginx
6docker port port-random
7
8# Bind to specific interface
9docker run -d -p 127.0.0.1:8081:80 --name port-localhost nginx
10
11# UDP port
12docker run -d -p 5353:53/udp --name dns-server alpine sleep 3600

#โœ… Success Criteria

  • Created custom bridge network
  • Containers communicate by name
  • Multi-network isolation works
  • Port mappings configured

#๐Ÿงน Cleanup

bash
docker stop web1 server1 server2 isolated frontend backend database port-specific port-random port-localhost dns-server
docker rm web1 server1 server2 isolated frontend backend database port-specific port-random port-localhost dns-server
docker network rm app-net frontend-net backend-net