Chạy MySQL, PostgreSQL, Redis trong Docker giống như có tủ lạnh chuyên dụng cho từng loại thực phẩm — một lệnh là có ngay database sẵn sàng. Kèm Compose full stack, backup/restore và replication.
15 phút đọc•
Mục lục bài viết42
Bạn có biết?
Bạn có biết rằng việc chạy database trong Docker giống như có một tủ lạnh chuyên dụng cho từng loại thực phẩm vậy? MySQL như ngăn đông lạnh, PostgreSQL như ngăn mát, còn Redis như ngăn đá khô. Mỗi container database được setup chỉ trong vài giây, bạn chỉ cần gõ lệnh là có ngay một database sẵn sàng sử dụng.
Bạn đã đi qua gần hết series Docker — giờ là lúc tổng hợp mọi kiến thức cho production! Checklist bảo mật, tối ưu hiệu năng, monitoring, chiến lược deploy và troubleshooting các lỗi thường gặp.
Quản lý container bằng tay trên nhiều server thật mệt mỏi? Docker Swarm biến nhiều host thành một cluster duy nhất — tự động phân phối, scale và tự phục hồi. Khởi tạo Swarm và deploy service.
Thay vì một tòa nhà khổng lồ, microservices xây mỗi chức năng một tòa nhà riêng — Docker là hệ thống đường xá kết nối chúng. Tìm hiểu microservices với Compose, API Gateway và Message Queue.
6379
7
Redis với password
docker run -d --name redis-cache
-e REDIS_PASSWORD=secret
-p6379:6379
redis:7
Kết nối
docker exec -it redis-cache redis-cli
redis-cli -a secret
Connection: localhost:6379
Port mặc định: 6379
Persistence
Redis hỗ trợ hai mode lưu trữ:
RDB — Snapshot định kỳ
AOF — Append-only file (an toàn hơn)
Dùng image redis:7-alpine để tiết kiệm dung lượng.
Database server trong data center — mỗi container Docker là một instance database độc lập
Docker Compose cho Full Stack
Đây là file Docker Compose để chạy cả MySQL, PostgreSQL và Redis cùng lúc:
# Trên master
docker exec mysql-master mysql -u root -prootpass
-e "CREATE USER 'replica'@'%' IDENTIFIED BY 'replicapass';"
docker exec mysql-master mysql -u root -prootpass
-e "GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';"
docker exec mysql-master mysql -u root -prootpass
-e "FLUSH PRIVILEGES;"# Lấy binary log position
docker exec mysql-master mysql -u root -prootpass
-e "SHOW MASTER STATUS;"# Trên slave
docker exec mysql-slave mysql -u root -prootpass
-e "CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='replica',
MASTER_PASSWORD='replicapass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=XXX;"
docker exec mysql-slave mysql -u root -prootpass
-e "START SLAVE;"# Kiểm tra trạng thái slave
docker exec mysql-slave mysql -u root -prootpass \
-e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running"
Docker Secrets cho Database Passwords
Thay vì dùng environment variables với password trong plain text, Docker Secrets quản lý thông tin nhạy cảm an toàn hơn:
# Tạo secrets (chỉ hoạt động trong Swarm mode)printf"my-secret-pass" | docker secret create db_password -
printf"app-user" | docker secret create db_user -
# Dùng trong service
docker service create
--name mysql-db
--secret db_password
--secret db_user
-e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_password
-e MYSQL_USER_FILE=/run/secrets/db_user
mysql:8
Dùng volume driver local với option type=none để mount trực tiếp thư mục host, giảm overhead so với Docker-managed volumes
Đảm bảo filesystem host hỗ trợ direct I/O — quan trọng cho MySQL/PostgreSQL performance
Tránh dùng NFS hoặc network filesystem cho database volumes trên production
Kernel Parameters
services:postgres:image:postgres:15sysctls:-net.core.somaxconn=1024-vm.overcommit_memory=1# PostgreSQL trong container cần shared memory lớn hơnshm_size:256mb
0 bình luận
Đang tải bình luận...
Để lại bình luận