Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

3. Cài đặt Docker và Docker Compose trên Web Server

ICT

Sau khi đã xác định vai trò của Docker trong kiến trúc Web Server hiện đại, bước tiếp theo là cài đặt Docker và Docker Compose một cách bài bản. Việc cài đặt đúng ngay từ đầu giúp tránh rất nhiều vấn đề về sau liên quan đến bảo mật, hiệu năng và vận hành.

Bài viết này tập trung vào cài đặt Docker cho web server chạy production, không đi theo hướng thử nghiệm hay học tập.


1. Chuẩn bị trước khi cài đặt

1.1. Yêu cầu hệ điều hành

Docker hoạt động ổn định nhất trên:

  • Debian 11/12

  • Ubuntu Server 20.04 / 22.04 / 24.04

Khuyến nghị:

  • Hệ điều hành tối thiểu, không cài desktop

  • Kernel mới, được cập nhật bảo mật

  • Có quyền root hoặc sudo đầy đủ

1.2. Kiểm tra các dịch vụ đang chạy

Trước khi cài Docker, cần:

  • Xác định các dịch vụ web hiện có (Nginx, Apache, MariaDB…)

  • Kiểm tra port đang sử dụng

  • Đảm bảo không có cấu hình cũ xung đột với Docker


2. Cài đặt Docker Engine

2.1. Gỡ các phiên bản Docker cũ (nếu có)

 
apt remove -y docker docker-engine docker.io containerd runc

2.2. Cài các gói phụ trợ cần thiết

 
apt update
apt install -y ca-certificates curl gnupg lsb-release

2.3. Thêm Docker GPG key và repository chính thức

 

install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
 | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

chmod a+r /etc/apt/keyrings/docker.gpg
 

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
noble stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null

 

2.4. Cài Docker Engine

 
apt update
apt install -y docker-ce docker-ce-cli containerd.io

2.5. Kiểm tra Docker

 
docker version docker info

Docker service nên ở trạng thái active (running).


3. Cài đặt Docker Compose

Hiện nay Docker Compose được tích hợp dưới dạng plugin.

3.1. Cài Docker Compose plugin

 
apt install -y docker-compose-plugin

3.2. Kiểm tra Docker Compose

 
docker compose version

Khuyến nghị sử dụng:

  • docker compose (không dùng docker-compose legacy)


4. Cấu hình Docker cho môi trường production

4.1. Cho phép user thường chạy Docker (tuỳ chọn)

 
usermod -aG docker <username>

Sau đó đăng xuất và đăng nhập lại.

Với server production, có thể chỉ dùng Docker bằng user root để kiểm soát chặt chẽ hơn.


4.2. Cấu hình thư mục lưu dữ liệu Docker

Mặc định Docker lưu tại /var/lib/docker.
Với web server, nên:

  • Đảm bảo phân vùng đủ dung lượng

  • Hoặc mount sang ổ đĩa riêng nếu cần


4.3. Logging và giới hạn log

Tạo file:

 
/etc/docker/daemon.json
 
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
 } 
 

Reload Docker:

systemctl restart docker

5. Kiểm tra hoạt động của Docker

5.1. Test container cơ bản

 
docker run --rm hello-world

Nếu chạy thành công, Docker đã sẵn sàng.


6. Những lưu ý quan trọng cho Web Server

6.1. Không expose container ra Internet tùy tiện

  • Tránh bind 0.0.0.0

  • Ưu tiên 127.0.0.1 hoặc Docker internal network

6.2. Không chạy tất cả dịch vụ trong một container

  • Mỗi container một vai trò

  • Dễ debug, dễ thay thế

6.3. Docker không thay thế firewall

  • Vẫn cần cấu hình firewall ở host

  • Kiểm soát port và network rõ ràng


7. Cấu trúc thư mục khuyến nghị cho web server

Ví dụ:

 

Cách tổ chức này giúp:

  • Dễ quản lý theo dịch vụ

  • Dễ backup

  • Dễ mở rộng về sau


8. Kết luận

Cài đặt Docker và Docker Compose trên Web Server không khó, nhưng cần làm đúng ngay từ đầu. Một môi trường Docker được cài đặt bài bản sẽ:

  • Ổn định hơn khi vận hành production

  • Dễ chuẩn hóa và nhân bản

  • Là nền tảng cho các bước triển khai tiếp theo

Trong bài tiếp theo, chúng ta sẽ bắt đầu triển khai Web Server bằng Docker, đi từ kiến trúc tổng thể đến cách phân chia vai trò giữa host và container.