api chỉ cần gọi http://db:5432.Container gọi nhau bằng tên trong cùng network
# Tạo network và chạy container
docker network create my-net
docker run -d --name db --network my-net postgres:16
docker run -d --name api --network my-net -p 3000:3000 my-api
# DNS tự động — bên trong api có thể ping "db"
docker exec api ping db
# PING db (172.18.0.2): 56 data bytesdocker run rất mệt. Docker Compose dùng file docker-compose.yml khai báo tất cả services, network, volume. Compose tự tạo network — không cần docker network create.services:
web:
image: nginx:alpine
ports: ["8080:80"]
volumes: ["./html:/usr/share/nginx/html"]
api:
build: ./api
ports: ["3000:3000"]
environment: [DB_HOST=db]
depends_on: [db]
db:
image: postgres:16-alpine
volumes: ["pg-data:/var/lib/postgresql/data"]
environment: [POSTGRES_PASSWORD=secret]
volumes: { pg-data: }docker compose up -d # Khởi động tất cả (nền)
docker compose down # Dừng và xóa containers
docker compose logs -f # Xem logs realtime
docker compose ps # Xem trạng thái
docker compose build # Build lại images
docker compose up -d web # Chạy 1 service cụ thể-p 8080:80 → ports: ['8080:80']-v ./html:/usr/share/nginx/html → volumes: ['./html:/usr/share/nginx/html']-e DB_HOST=db → environment: [DB_HOST=db]--name web → services: web: (tên service = container name)--restart always → restart: alwaysservices:
web:
build: .
ports: ["3000:3000"]
environment:
DATABASE_URL: postgres://postgres:pass@db:5432/app
REDIS_URL: redis://redis:6379
depends_on: [db, redis]
db:
image: postgres:16-alpine
volumes: ["pg-data:/var/lib/postgresql/data"]
environment: { POSTGRES_PASSWORD: pass, POSTGRES_DB: app }
redis:
image: redis:7-alpine
volumes: { pg-data: }docker-compose.yml với 2 services: web (nginx), db (postgres)docker compose up -d — xem containers chạydocker compose ps && docker compose logs webdepends_on: [db] cho web và chạy lạidocker compose down — dừng toàn bộ1. Khi 2 container cùng network, chúng giao tiếp thế nào?
2. docker-compose.yml thay thế lệnh Docker nào?