5.1 Cài đặt mạng
Hãy xem xét chi tiết cách cấu hình mạng và volumes cho ứng dụng nhiều container của chúng ta. Điều này đảm bảo các dịch vụ tương tác đúng cách và lưu trữ dữ liệu lâu dài.
Mạng trong Docker cho phép các container tương tác lẫn nhau. Trong ứng dụng này, chúng ta sẽ dùng mạng bridge
để kết nối giữa frontend, backend và cơ sở dữ liệu.
Tạo mạng
Chúng ta đã định nghĩa mạng task-network
trong file docker-compose.yml
:
networks:
task-network:
driver: bridge
Trong đó:
- task-network: là tên của mạng dùng để các container giao tiếp với nhau.
- driver:
bridge
: là loại mạng. Mạngbridge
là mặc định cho giao tiếp giữa các container trên cùng một host.
Kết nối các dịch vụ vào mạng
Chúng ta đã kết nối tất cả các dịch vụ vào mạng này trong file docker-compose.yml
. Hãy kiểm tra để đảm bảo rằng từng dịch vụ đều được kết nối đúng cách:
Ví dụ cho frontend:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Ví dụ cho backend:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Ví dụ cho cơ sở dữ liệu:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
5.2 Cài đặt volumes
Docker volumes cho phép lưu trữ dữ liệu container trên hệ thống host, đảm bảo lưu trữ lâu dài. Trong ứng dụng của chúng ta, sẽ sử dụng volume để lưu trữ dữ liệu cho cơ sở dữ liệu PostgreSQL.
Tạo volume
Chúng ta đã xác định volume db-data
trong file compose.yaml
:
volumes:
db-data:
Trong đó:
-
db-data
: tên volume sẽ được sử dụng để lưu trữ dữ liệu của cơ sở dữ liệu PostgreSQL.
Kết nối volume với service cơ sở dữ liệu
Chúng ta đã kết nối volume db-data
với service cơ sở dữ liệu trong file docker-compose.yml
. Hãy đảm bảo điều này được thực hiện đúng cách:
Ví dụ cho cơ sở dữ liệu:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Trong đó:
-
volumes
: xác định những volumes sẽ được kết nối với container. -
db-data:/var/lib/postgresql/data
: liên kết volumedb-data
với thư mục/var/lib/postgresql/data
bên trong container. Thư mục này được PostgreSQL sử dụng để lưu trữ dữ liệu.
5.3 Tệp đầy đủ compose.yaml
Để rõ ràng và đầy đủ, sau đây là toàn bộ tệp compose.yaml
, bao gồm cấu hình mạng và volumes:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
Kiểm tra cấu hình mạng và volumes
Sau khi cấu hình mạng và volumes, hãy đảm bảo rằng mọi thứ đã được cấu hình đúng và hoạt động ổn định:
- 1. Khởi chạy containers:
Terminal
docker compose up
- 2. Kiểm tra mạng:
- Sử dụng lệnh
docker network ls
để đảm bảo rằng mạngtask-network
đã được tạo. - Sử dụng lệnh
docker network inspect task-network
để kiểm tra rằng tất cả containers đã được kết nối với mạng này.
- Sử dụng lệnh
- 3. Kiểm tra volumes:
- Sử dụng lệnh
docker volume ls
để đảm bảo rằng volumedb-data
đã được tạo. - Sử dụng lệnh
docker volume inspect db-data
để kiểm tra chi tiết volume.
- Sử dụng lệnh
GO TO FULL VERSION