Cài Đặt Docker và Docker Compose trên Linux
Tổng Quan
Chào mừng bạn đến với hướng dẫn cài đặt Docker và Docker Compose! Trong kỷ nguyên phát triển phần mềm hiện đại, Docker đã trở thành một công cụ không thể thiếu cho việc đóng gói, phân phối và chạy ứng dụng một cách nhất quán. Docker Compose là mảnh ghép hoàn hảo, cho phép bạn định nghĩa và chạy các ứng dụng đa container chỉ với một lệnh duy nhất.
Docker là gì?
Docker là một nền tảng mã nguồn mở giúp tự động hóa việc triển khai ứng dụng dưới dạng các "container". Container là các đơn vị phần mềm độc lập, chứa mọi thứ cần thiết để chạy một ứng dụng, bao gồm mã nguồn, runtime, thư viện hệ thống và các cài đặt. Điều này đảm bảo ứng dụng của bạn sẽ chạy giống hệt nhau trên mọi môi trường, từ máy tính cá nhân của nhà phát triển đến máy chủ sản xuất.
Docker Compose là gì?
Docker Compose là một công cụ giúp định nghĩa và chạy các ứng dụng Docker đa container. Với Compose, bạn sử dụng một tệp YAML để cấu hình các dịch vụ của ứng dụng (ví dụ: một container cho web server, một container cho database), sau đó chỉ cần một lệnh duy nhất để khởi tạo và quản lý toàn bộ ứng dụng. Điều này đặc biệt hữu ích cho các dự án microservices hoặc các ứng dụng phức tạp có nhiều thành phần phụ thuộc.
Tầm Quan Trọng và Ứng Dụng
- Môi trường phát triển nhất quán: Đảm bảo tất cả thành viên trong nhóm làm việc trên cùng một môi trường, loại bỏ lỗi "nó chạy trên máy tôi".
- Triển khai nhanh chóng: Đóng gói ứng dụng và tất cả các phụ thuộc vào một container, giúp việc triển khai lên môi trường sản xuất trở nên nhanh chóng và đáng tin cậy.
- CI/CD: Dễ dàng tích hợp vào quy trình Tích hợp liên tục/Triển khai liên tục (CI/CD).
- Khả năng mở rộng: Dễ dàng mở rộng các dịch vụ độc lập của ứng dụng.
- Phát triển Microservices: Lý tưởng cho việc xây dựng và quản lý các ứng dụng dựa trên kiến trúc microservices.
Metadata
- Thời gian thực hiện: Khoảng 20-30 phút
- Độ khó: Trung bình
- Yêu cầu: Kiến thức cơ bản về Linux Command Line Interface (CLI).
Yêu Cầu Hệ Thống
Để cài đặt Docker và Docker Compose, hệ thống của bạn cần đáp ứng các yêu cầu sau:
Cấu hình Tối thiểu
- Hệ điều hành: Một bản phân phối Linux 64-bit (ví dụ: Ubuntu 20.04+, Debian 10+, CentOS 7+).
- Kernel Linux: Phiên bản 3.10 trở lên.
- RAM: 2GB.
- Dung lượng đĩa: 20GB trống.
- CPU: Hỗ trợ ảo hóa (thường là mặc định trên các CPU hiện đại).
Cấu hình Khuyến nghị
- Hệ điều hành: Ubuntu 22.04 LTS hoặc phiên bản mới nhất của bản phân phối bạn chọn.
- RAM: 4GB trở lên.
- Dung lượng đĩa: 50GB SSD trở lên.
- CPU: CPU đa lõi.
- Kết nối mạng: Ổn định để tải xuống các gói cài đặt.
Các Bước Thực Hiện Chi Tiết
Chúng ta sẽ thực hiện các bước cài đặt trên một hệ thống Ubuntu. Các bước có thể tương tự trên các bản phân phối Linux khác nhưng có thể có sự khác biệt về trình quản lý gói (ví dụ: yum thay cho apt).
Bước 1: Gỡ cài đặt các phiên bản Docker cũ (Nếu có)
Nếu bạn đã từng cài đặt Docker hoặc các phiên bản cũ hơn, bạn nên gỡ cài đặt chúng trước để tránh xung đột.
# Cập nhật danh sách gói trước
sudo apt-get update
# Gỡ cài đặt các gói Docker cũ
# Các gói này có thể là: docker, docker.io, docker-engine, containerd, runc
sudo apt-get remove docker docker-engine docker.io containerd runc
💡 Mẹo: Lệnh apt-get autoremove có thể giúp gỡ bỏ các gói phụ thuộc không còn cần thiết sau khi gỡ cài đặt Docker.
Bước 2: Cài đặt các gói phụ thuộc cần thiết
Chúng ta cần cài đặt một số gói để apt có thể sử dụng các repository qua HTTPS:
# Cập nhật danh sách gói
sudo apt-get update
# Cài đặt các gói cần thiết
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
Bước 3: Thêm GPG key chính thức của Docker
Để đảm bảo các gói bạn tải xuống là chính hãng và không bị giả mạo, chúng ta sẽ thêm GPG key của Docker:
# Tạo thư mục cho khóa GPG nếu chưa tồn tại
sudo mkdir -p /etc/apt/keyrings
# Tải xuống và thêm GPG key của Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
✅ Lệnh này sẽ tải GPG key từ máy chủ của Docker và lưu nó vào /etc/apt/keyrings/docker.gpg.
Bước 4: Thêm Repository của Docker vào APT sources
Bây giờ chúng ta sẽ thêm repository của Docker vào danh sách nguồn của APT để có thể tải xuống các gói Docker:
# Thêm repository Docker vào APT sources
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
arch=$(dpkg --print-architecture): Tự động phát hiện kiến trúc CPU của hệ thống (ví dụ:amd64).signed-by=/etc/apt/keyrings/docker.gpg: Chỉ định khóa GPG để xác minh các gói.$(lsb_release -cs): Tự động phát hiện tên mã của bản phân phối Ubuntu của bạn (ví dụ:jammycho Ubuntu 22.04,focalcho Ubuntu 20.04).stable: Chỉ định kênh ổn định của Docker.
Bước 5: Cài đặt Docker Engine
Sau khi đã thêm repository, chúng ta có thể tiến hành cài đặt Docker Engine:
# Cập nhật lại danh sách gói để APT nhận diện repository mới
sudo apt-get update
# Cài đặt Docker Engine, CLI và containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
⚙️ Kiểm tra cài đặt Docker:
Để xác minh Docker đã được cài đặt thành công và đang chạy, hãy chạy container hello-world đơn giản:
sudo docker run hello-world
Nếu cài đặt thành công, bạn sẽ thấy một thông báo tương tự như sau:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Bước 6: Cấu hình Docker không cần sudo (Tùy chọn nhưng Khuyến nghị)
Theo mặc định, bạn cần sử dụng sudo để chạy các lệnh docker. Để tránh phải gõ sudo mỗi lần, bạn có thể thêm người dùng hiện tại vào nhóm docker.
⚠️ Cảnh báo bảo mật: Việc thêm người dùng vào nhóm docker cấp cho người dùng đó quyền tương đương với quyền root trên hệ thống. Hãy cân nhắc kỹ trước khi thực hiện, đặc biệt trên các máy chủ dùng chung.
# 1. Tạo nhóm 'docker' nếu nó chưa tồn tại
sudo groupadd docker
# 2. Thêm người dùng hiện tại vào nhóm 'docker'
# Thay $USER bằng tên người dùng của bạn hoặc sử dụng biến môi trường $USER
sudo usermod -aG docker $USER
# 3. Kích hoạt các thay đổi nhóm
# Bạn cần đăng xuất và đăng nhập lại, hoặc chạy lệnh 'newgrp docker'
newgrp docker
Sau khi chạy newgrp docker (hoặc đăng xuất/đăng nhập lại), bạn có thể kiểm tra lại bằng cách chạy lệnh docker run hello-world mà không cần sudo:
docker run hello-world
Nếu thành công, bạn đã có thể sử dụng Docker mà không cần sudo.
Bước 7: Cài đặt Docker Compose (Phiên bản V2 - Plugin)
Với Docker Engine phiên bản mới, Docker Compose đã được tích hợp dưới dạng một plugin của Docker CLI (Docker Compose V2). Nếu bạn đã làm theo Bước 5 và cài đặt gói docker-compose-plugin, thì Docker Compose đã có sẵn!
⚙️ Kiểm tra cài đặt Docker Compose:
docker compose version
Nếu bạn thấy phiên bản được hiển thị (ví dụ: Docker Compose version v2.20.2), nghĩa là Docker Compose đã được cài đặt thành công.
💡 Lưu ý: Nếu vì lý do nào đó bạn cần cài đặt Docker Compose V1 (đã cũ và không còn được khuyến nghị) hoặc muốn cài đặt phiên bản V2 bằng cách tải binary thủ công (ví dụ trên các bản phân phối không có gói plugin), bạn có thể làm như sau:
Cài đặt Docker Compose V2 bằng cách tải Binary thủ công (Tùy chọn thay thế)
Đây là phương pháp phổ biến và đáng tin cậy để cài đặt Docker Compose V2, đặc biệt nếu bạn muốn kiểm soát phiên bản cụ thể hoặc bản phân phối Linux của bạn không cung cấp gói docker-compose-plugin mới nhất.
# 1. Tải xuống phiên bản Docker Compose mới nhất (kiểm tra trang releases của Docker Compose trên GitHub để có phiên bản mới nhất)
# Ví dụ: v2.20.2
DOCKER_COMPOSE_VERSION="v2.20.2" # Thay thế bằng phiên bản mới nhất nếu cần
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2. Cấp quyền thực thi cho binary
sudo chmod +x /usr/local/bin/docker-compose
🌐 Kiểm tra phiên bản Docker Compose:
docker-compose --version
Lưu ý rằng khi cài đặt thủ công, lệnh sẽ là docker-compose (có dấu gạch ngang) thay vì docker compose (không có dấu gạch ngang) khi là plugin. Tuy nhiên, cả hai cách đều trỏ đến cùng một binary và hoạt động tương tự.
Troubleshooting và Các Vấn Đề Thường Gặp
1. Lỗi: "Cannot connect to the Docker daemon. Is the docker daemon running on this host?"
- Nguyên nhân: Dịch vụ Docker có thể không chạy hoặc người dùng không có quyền truy cập.
- Giải pháp:
- Kiểm tra trạng thái dịch vụ Docker:
sudo systemctl status docker - Nếu không chạy, khởi động dịch vụ:
sudo systemctl start docker - Đảm bảo dịch vụ Docker tự động khởi động khi boot:
sudo systemctl enable docker - Nếu bạn chưa thêm người dùng vào nhóm
docker, hãy làm theo Bước 6. Sau đó, đăng xuất và đăng nhập lại hoặc chạynewgrp docker.
- Kiểm tra trạng thái dịch vụ Docker:
2. Lỗi: "docker: command not found" hoặc "docker-compose: command not found"
- Nguyên nhân: Docker hoặc Docker Compose không được cài đặt đúng cách, hoặc đường dẫn thực thi không có trong biến môi trường
PATH. - Giải pháp:
- Kiểm tra lại các bước cài đặt.
- Đảm bảo
/usr/bin(cho Docker) và/usr/local/bin(cho Docker Compose nếu cài thủ công) có trong biếnPATHcủa bạn:echo $PATH - Nếu bạn cài Docker Compose thủ công, hãy chắc chắn rằng bạn đã cấp quyền thực thi (
chmod +x).
3. Lỗi: "E: Unable to locate package docker-ce"
- Nguyên nhân: Repository của Docker chưa được thêm đúng cách hoặc
apt-get updatechưa được chạy. - Giải pháp:
- Kiểm tra lại Bước 3 và Bước 4. Đảm bảo không có lỗi chính tả.
- Chạy
sudo apt-get updatetrước khi cài đặt. - Đảm bảo tên mã của bản phân phối Linux của bạn (ví dụ:
jammy,focal) được nhận diện chính xác.
4. Vấn đề về quyền khi tải xuống từ GitHub (curl)
- Nguyên nhân: Proxy hoặc tường lửa có thể chặn truy cập GitHub.
- Giải pháp:
- Kiểm tra kết nối internet của bạn.
- Nếu bạn đang dùng proxy, bạn cần cấu hình
curlđể sử dụng proxy:Sau đó thử lại lệnhexport HTTP_PROXY="http://your.proxy.server:port"
export HTTPS_PROXY="http://your.proxy.server:port"curl.
Kết Luận
Bạn đã hoàn thành việc cài đặt Docker Engine và Docker Compose trên hệ thống Linux của mình! Với Docker, bạn có thể dễ dàng đóng gói và chạy các ứng dụng trong môi trường container độc lập. Docker Compose sẽ giúp bạn quản lý các ứng dụng đa container một cách hiệu quả, từ phát triển đến triển khai.
Best Practices
- Cập nhật thường xuyên: Luôn giữ Docker và Docker Compose của bạn ở phiên bản mới nhất để tận hưởng các tính năng mới, cải thiện hiệu suất và vá lỗi bảo mật.
- Quản lý tài nguyên: Theo dõi việc sử dụng tài nguyên của các container để tránh quá tải hệ thống.
- Bảo mật Image: Chỉ sử dụng các Docker Image từ các nguồn đáng tin cậy hoặc tự xây dựng Image của riêng bạn từ Dockerfile được kiểm tra kỹ lưỡng.
- Sử dụng
.dockerignore: Tương tự như.gitignore, tệp.dockerignoregiúp loại trừ các tệp không cần thiết khỏi context build, làm cho Image nhỏ hơn và quá trình build nhanh hơn.
Tài liệu Tham khảo
Chúc bạn thành công trên hành trình với Docker và Docker Compose!