Khởi Tạo Docker Container Cho Cơ Sở Dữ Liệu: Redis, MongoDB, MySQL và PostgreSQL với Bảo Mật và Lưu Trữ

Redis - Lệnh khởi tạo

docker run -d \
  --name redis-server \
  --restart unless-stopped \
  -p 6379:6379 \
  -v /home/user/redis-data:/data \
  --memory=2g \
  --shm-size=128m \
  redis:7.4 \
  --appendonly yes \
  --appendfsync everysec \
  --requirepass 'SecureRedisPass123!'
      
Phiên bản kiểm tra sức khỏe
docker run -d \
  --name redis-server \
  --restart unless-stopped \
  -p 6379:6379 \
  -v /home/user/redis-data:/data \
  --memory=2g \
  --shm-size=128m \
  --health-cmd="redis-cli -a 'SecureRedisPass123!' ping" \
  --health-interval=15s \
  --health-timeout=3s \
  --health-retries=3 \
  redis:7.4 \
  --appendonly yes \
  --appendfsync everysec \
  --requirepass 'SecureRedisPass123!'
  • docker run: Khởi tạo một Docker container mới.
  • --name redis-server: Đặt tên cho container là redis-server. Tên này giúp dễ dàng quản lý container sau này.
  • -p 6379:6379:
  • Ánh xạ cổng 6379 của máy chủ đến cổng 6379 bên trong container.
  • 6379 là cổng mặc định của Redis, cho phép truy cập dịch vụ Redis qua localhost:6379.
  • -v /home/user/redis-data:/data:
  • Mount thư mục /home/user/redis-data của máy chủ vào thư mục /data trong container.
  • Redis lưu các file持久化 vào /data, dữ liệu sẽ được lưu trữ trên máy chủ ngay cả khi container bị xóa hoặc khởi động lại.
  • -d: Chạy container ở chế độ nền (detached mode).
  • --restart unless-stopped:
  • Cấu hình chính sách khởi động lại container. Container sẽ tự động khởi động lại nếu dừng đột ngột, nhưng không khởi động lại nếu được dừng thủ công.
  • --appendonly yes:
  • Bật chế độ AOF (Append Only File) để Redis ghi các thao tác viết vào file, đảm bảo dữ liệu được lưu trữ ngay lập tức.
  • --requirepass 'SecureRedisPass123!': Đặt mật khẩu cho Redis, yêu cầu client phải cung cấp mật khẩu để truy cập.

MongoDB - Lệnh khởi tạo

docker run --name db-mongo -p 27017:27017 -v /data/mongo-data:/data/db -e MONGO_INITDB_ROOT_USERNAME=superadmin -e MONGO_INITDB_ROOT_PASSWORD='MongoDBSecurePass2024' -d --restart unless-stopped mongo
  • docker run: Khởi tạo một Docker container mới.
  • --name db-mongo: Đặt tên container là db-mongo để quản lý dễ dàng.
  • -p 27017:27017:
  • Ánh xạ cổng 27017 của máy chủ đến cổng 27017 trong container.
  • 27017 là cổng mặc định của MongoDB, cho phép kết nối qua localhost:27017.
  • -v /data/mongo-data:/data/db:
  • Mount thư mục /data/mongo-data của máy chủ vào thư mục /data/db trong container.
  • /data/db là thư mục lưu trữ dữ liệu mặc định của MongoDB, đảm bảo dữ liệu được lưu trữ lâu dài.
  • -e MONGO_INITDB_ROOT_USERNAME=superadmin: Đặt tên người dùng admin là superadmin.
  • -e MONGO_INITDB_ROOT_PASSWORD='MongoDBSecurePass2024':
  • Đặt mật khẩu cho người dùng admin là MongoDBSecurePass2024.
  • Trong môi trường sản xuất, hãy sử dụng mật khẩu mạnh để tăng cường bảo mật.
  • -d: Chạy container ở chế độ nền.
  • --restart unless-stopped: Thiết lập chính sách khởi động lại container.
  • mongo: Sử dụng image MongoDB chính thức để tạo và khởi động container.

MySQL - Lệnh khởi tạo

docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=MySqlSecurePass123 -d -p 3306:3306 -v /home/user/mysql-data:/var/lib/mysql --restart unless-stopped mysql:8.0
  • --name mysql-db: Đặt tên container là mysql-db.
  • -e MYSQL_ROOT_PASSWORD=MySqlSecurePass123: Đặt mật khẩu người dùng root của MySQL là MySqlSecurePass123.
  • -d: Chạy container ở chế độ nền.
  • -p 3306:3306: Ánh xạ cổng 3306 của máy chủ đến cổng 3306 của container.
  • -v /home/user/mysql-data:/var/lib/mysql: Mount thư mục local /home/user/mysql-data vào /var/lib/mysql trong container để đảm bảo dữ liệu được lưu trữ lâu dài.
  • --restart unless-stopped:
  • Thiết lập chính sách khởi động lại container.
  • Container sẽ tự động khởi động lại nếu dừng đột ngột, nhưng không khởi động lại nếu được dừng thủ công.
  • mysql:8.0: Sử dụng image MySQL phiên bản 8.0.

PostgreSQL - Lệnh khởi tạo

docker run -d \
  --name postgres-db \
  --restart unless-stopped \
  -e POSTGRES_PASSWORD='PostgresSecurePass2024' \
  -e TZ=Asia/Ho_Chi_Minh \
  -p 5432:5432 \
  -v /data/postgres-data:/var/lib/postgresql/data \
  --shm-size=512m \
  postgres:15.4
  
  Phiên bản nâng cao
  docker run -d \
  --name postgres-prod \
  --restart unless-stopped \
  -e POSTGRES_PASSWORD='PostgresSecurePass2024' \
  -e TZ=Asia/Ho_Chi_Minh \
  -p 5432:5432 \
  -v /data/postgres-data:/var/lib/postgresql/data \
  --health-cmd="pg_isready -U postgres" \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  --shm-size=512m \
  postgres:15.4
  • docker run: Khởi tạo một Docker container mới.
  • --name postgres-db: Đặt tên container là postgres-db để dễ dàng quản lý.
  • --restart unless-stopped:
  • Thiết lập chính sách khởi động lại container.
  • Container sẽ tự động khởi động lại nếu dừng đột ngột, nhưng không khởi động lại nếu được dừng thủ công.
  • -e POSTGRES_PASSWORD='PostgresSecurePass2024': Đặt mật khẩu cho người dùng postgres của PostgreSQL.
  • -e TZ=Asia/Ho_Chi_Minh: Đặt múi giờ cho container là Asia/Ho_Chi_Minh.
  • -p 5432:5432:
  • Ánh xạ cổng 5432 của máy chủ đến cổng 5432 của container.
  • 5432 là cổng mặc định của PostgreSQL.
  • -v /data/postgres-data:/var/lib/postgresql/data:
  • Mount thư mục /data/postgres-data của máy chủ vào /var/lib/postgresql/data trong container.
  • Đây là thư mục lưu trữ dữ liệu mặc định của PostgreSQL, đảm bảo dữ liệu được lưu trữ lâu dài.
  • -d: Chạy container ở chế độ nền.
  • --shm-size=512m: Đặt kích thước shared memory là 512MB.
  • postgres:15.4: Sử dụng image PostgreSQL phiên bản 15.4.

"Phiên bản nâng cao" bổ sung

  • --health-cmd="pg_isready -U postgres": Định nghĩa lệnh kiểm tra sức khỏe, sử dụng công cụ pg_isready để kiểm tra kết nối đến người dùng postgres.
  • --health-interval=30s: Kiểm tra sức khỏe mỗi 30 giây.
  • --health-timeout=10s: Thời gian chờ tối đa cho mỗi lần kiểm tra là 10 giây.
  • --health-retries=3: Sau 3 lần kiểm tra liên tiếp thất bại, container sẽ được đánh dấu là unhealthy.

Kiểm tra trạng thái sức khỏe: docker inspect postgres-db --format='{{.State.Health.Status}}'

Thẻ: docker Redis MongoDB mysql PostgreSQL

Đăng vào ngày 12 tháng 7 lúc 11:17