Docker network
Container-ууд хоорондоо болон гадаад сүлжээтэй хэрхэн холбогддогийг Docker network удирддаг. Network ойлгохгүйгээр олон container-тай аппликейшн ажиллуулахад хэцүү.
Анхдагч network-ууд
Docker суулгасны дараа гурван network автоматаар үүснэ:
docker network ls
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 bridge bridge local
b2c3d4e5f6a1 host host local
c3d4e5f6a1b2 none null local
Bridge network (анхдагч)
Container ажиллуулахад -network заагаагүй бол bridge network-т орно.
docker run -d --name app1 nginx
docker run -d --name app2 nginx
app1 ба app2 хоёулаа bridge network-т байна. Гэхдээ анхдагч bridge-д нэрээр хандах боломжгүй — зөвхөн IP хаягаар.
# Container-ийн IP хаяг харах
docker inspect app1 | grep '"IPAddress"'
# "IPAddress": "172.17.0.2"
# IP-аар хандаж болно, гэхдээ IP өөрчлөгдөж болно
docker exec app2 curl 172.17.0.2
Custom bridge network (зөвлөмж)
Өөрийн network үүсгэвэл container-ууд нэрээр хандаж болно — DNS автоматаар ажиллана.
# Network үүсгэх
docker network create mynet
# Container-уудыг тэр network-т ажиллуулах
docker run -d --name db --network mynet postgres:16 -e POSTGRES_PASSWORD=secret
docker run -d --name app --network mynet -p 3000:3000 myapp
app container нь db нэрээр PostgreSQL-д хандаж болно:
// Container дотор "db" нэр ажиллана
const pool = new Pool({ host: "db", port: 5432 });
Host network
Container нь host машины сүлжээг шууд ашиглана — port mapping шаардлагагүй. Зөвхөн Linux-т ажиллана (Mac/Windows-т бүрэн дэмжигдэхгүй).
docker run -d --network host nginx
# Nginx host-ийн 80 port-д шууд сонсоно
# -p флаг шаардлагагүй
Гүйцэтгэл маш сайн боловч тусгаарлалт байхгүй тул production-д болгоомжтой ашиглана.
None network
Сүлжээний холбоо огт байхгүй — бүрэн тусгаарлагдсан container.
docker run -d --network none myapp
# Гаднаас ч, дотроос ч сүлжээнд хандах боломжгүй
Аюулгүй байдлын шаардлагатай тооцооллын ажлуудад хэрэглэнэ.
docker network команд
# Network үүсгэх
docker network create mynet
# Driver зааж үүсгэх
docker network create --driver bridge mynet
# Subnet заах
docker network create --subnet 192.168.10.0/24 mynet
# Бүх network жагсаах
docker network ls
# Network-ийн дэлгэрэнгүй мэдээлэл
docker network inspect mynet
# Container-ийг network-т нэмэх (ажиллаж байхад ч болно)
docker network connect mynet app1
# Container-ийг network-ээс салгах
docker network disconnect mynet app1
# Network устгах
docker network rm mynet
# Ашиглагдаагүй network устгах
docker network prune
docker network inspect
docker network inspect mynet
[
{
"Name": "mynet",
"Driver": "bridge",
"Subnet": "172.20.0.0/16",
"Containers": {
"a1b2...": {
"Name": "db",
"IPv4Address": "172.20.0.2/16"
},
"c3d4...": {
"Name": "app",
"IPv4Address": "172.20.0.3/16"
}
}
}
]
Container хоорондын холбоо
Жишээ: Node.js апп + Redis + PostgreSQL
# Network үүсгэх
docker network create appnet
# PostgreSQL
docker run -d \
--name postgres \
--network appnet \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=mydb \
postgres:16
# Redis
docker run -d \
--name redis \
--network appnet \
redis:7-alpine
# Node.js апп
docker run -d \
--name app \
--network appnet \
-p 3000:3000 \
-e DB_HOST=postgres \
-e REDIS_HOST=redis \
myapp:1.0
app container дотор:
postgresнэрээр PostgreSQL-д ханданаredisнэрээр Redis-т хандана- Гаднаас зөвхөн
app-ийн 3000 port харагдана
Олон network
Container нэгэн зэрэг хэд хэдэн network-т байж болно:
docker network create frontend
docker network create backend
# Backend-д ажиллах DB
docker run -d --name db --network backend postgres:16
# Хоёр network-т байх апп
docker run -d --name app --network backend myapp
docker network connect frontend app
# Зөвхөн frontend-д байх nginx
docker run -d --name nginx --network frontend -p 80:80 nginx
Интернет → nginx (frontend) → app (frontend + backend) → db (backend)
db нь frontend network-т байхгүй тул гаднаас шууд хандах боломжгүй.
Network driver-ууд харьцуулалт
| Driver | Хэрэглэх үе | DNS | Гүйцэтгэл | | ------- | --------------------------------- | --- | ------------ | | bridge | Нэг host дахь container-ууд | ✓ | Сайн | | host | Гүйцэтгэл хамгийн чухал үед | — | Хамгийн сайн | | none | Сүлжээ шаардлагагүй тооцоолол | — | — | | overlay | Хэд хэдэн host (Swarm/Kubernetes) | ✓ | Дунд |
Дараагийн хичээлд:
Docker Compose ашиглан олон container-ийг нэг файлаар тохируулж ажиллуулна.