Nếu bạn vừa khởi tạo một máy chủ ảo VPS mới tinh chạy hệ điều hành Ubuntu để chuẩn bị triển khai dự án, công việc kỹ thuật đầu tiên bạn cần thực hiện gần như luôn là thiết lập môi trường container. Việc tìm kiếm một hướng dẫn chuẩn mực về cách cài Docker trên Ubuntu tưởng chừng đơn giản, nhưng thực tế có rất nhiều cạm bẫy kỹ thuật khiến không ít lập trình viên gặp lỗi vặt: từ việc cài nhầm gói docker.io cũ kỹ của kho Ubuntu, xung đột cổng mạng với tường lửa UFW cho đến việc bị tràn đĩa cứng do log container không được kiểm soát.

Một quy trình cài đặt chuẩn cho môi trường sản xuất đòi hỏi bạn phải sử dụng kho lưu trữ chính thức từ Docker Inc, cấu hình khóa bảo mật GPG chuẩn xác và tinh chỉnh tệp daemon.json ngay từ đầu. Trong bài viết thực chiến này, Cypher sẽ hướng dẫn bạn từng bước cách cài Docker trên Ubuntu theo tiêu chuẩn mới nhất, hỗ trợ đầy đủ các phiên bản Ubuntu 24.04 LTS (Noble Numbat), 22.04 LTS (Jammy Jellyfish) và 20.04 LTS (Focal Fossa), giúp máy chủ của bạn vận hành trơn tru và bảo mật tuyệt đối.

1. Khởi đầu: Tại sao cách cài Docker trên Ubuntu theo chuẩn chính thức lại quan trọng?

Khi tìm hiểu về cách cài Docker trên Ubuntu, nhiều bạn thường có thói quen gõ ngay lệnh sudo apt install docker.io vì sự tiện lợi. Tuy nhiên, theo kinh nghiệm nhiều năm quản trị hạ tầng của mình, đây là một sai lầm phổ biến mà bạn cần tránh xa khi xây dựng môi trường làm việc chuyên nghiệp.

Khi so sánh với chuẩn cách cài Docker trên Ubuntu chính thức, gói docker.io có sẵn trong kho lưu trữ mặc định của Ubuntu thường do Canonical duy trì và có chu kỳ cập nhật rất chậm so với bản phát hành gốc từ nhà phát triển. Việc này khiến máy chủ của bạn bỏ lỡ các bản vá bảo mật khẩn cấp, không tương thích với các tính năng mới của công nghệ container hóa được mô tả trên bách khoa toàn thư Wikipedia về Docker, và đặc biệt là thiếu vắng các công cụ hiện đại như Docker Buildx hay plugin Docker Compose V2 chính thức.

Thay vào đó, lựa chọn cài đặt Docker Engine Ubuntu thông qua kho lưu trữ APT chính thức của Docker (gói docker-ce – Community Edition) từ kho mã nguồn Docker Community Edition trên GitHub sẽ đảm bảo hệ thống của bạn luôn nhận được các bản cập nhật mới nhất từ nhà sản xuất. Nắm vững cách cài Docker trên Ubuntu từ nguồn chính thống là nền tảng cốt lõi giúp bạn tự tin vận hành các dịch vụ quan trọng mà không lo phát sinh lỗi xung đột phiên bản.

Trước khi bắt tay thực hiện cách cài Docker trên Ubuntu, nếu bạn là người mới tiếp cận khái niệm container, hãy tham khảo bài viết khái niệm container Docker là gì sẽ giúp bạn hiểu sâu hơn về cơ chế cô lập tiến trình bằng cgroups và namespaces trong nhân Linux trước khi bắt tay vào cấu hình.

2. Chuẩn bị hệ thống và dọn dẹp các phiên bản Docker cũ

Trước khi thực hiện các bước trong quy trình cách cài Docker trên Ubuntu, việc kiểm tra điều kiện tiên quyết của máy chủ và loại bỏ các gói phần mềm xung đột là bước bắt buộc để tránh tình trạng hệ thống tệp bị lỗi.

Kiểm tra cấu hình hệ điều hành và kiến trúc vi xử lý

Đối với cách cài Docker trên Ubuntu, Docker Engine yêu cầu phiên bản hệ điều hành Ubuntu 64-bit (x86_64 / amd64 hoặc arm64). Bạn có thể kiểm tra kiến trúc phần cứng và phiên bản nhân Linux thông qua các tài liệu chuẩn hóa từ tài liệu quản trị hệ điều hành Ubuntu Server bằng các câu lệnh cơ bản sau:

# Kiểm tra phiên bản hệ điều hành Ubuntu
lsb_release -a

# Kiểm tra kiến trúc CPU và phiên bản nhân Kernel
uname -m && uname -r

Nhân Linux Kernel của bạn cần đạt từ phiên bản 3.10 trở lên để hỗ trợ đầy đủ bộ điều khiển tài nguyên cgroups v2 và hệ thống tệp phân lớp overlay2. Mọi bản phát hành Ubuntu hiện đại từ 20.04 LTS trở đi đều đáp ứng xuất sắc điều kiện này cho bài toán cài Docker trên Ubuntu.

Gỡ bỏ triệt để các gói Docker xung đột tiềm ẩn

Khi áp dụng cách cài Docker trên Ubuntu, nếu máy chủ từng cài các gói Docker cũ không chính thức, chúng có thể gây xung đột với gói docker-ce mới. Hãy chạy lệnh sau để làm sạch hệ thống trước khi bắt đầu hướng dẫn cài Docker Ubuntu:

# Gỡ bỏ các gói Docker cũ không chính thức
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
    sudo apt-get remove -y $pkg
done

Lệnh trên chỉ gỡ bỏ các tệp thực thi của ứng dụng cũ mà hoàn toàn không xóa dữ liệu hình ảnh (Images), bộ chứa (Containers) hay ổ đĩa (Volumes) hiện có trong thư mục /var/lib/docker/ của máy chủ, đảm bảo tính an toàn dữ liệu cho bạn khi chuẩn bị cách cài Docker trên Ubuntu.

3. Hướng dẫn từng bước cách cài Docker trên Ubuntu từ kho lưu trữ APT chính thức

Dưới đây là hướng dẫn cài Docker Ubuntu chi tiết và chuẩn mực nhất về cách cài Docker trên Ubuntu theo đúng tài liệu chính thức cài đặt Docker trên Ubuntu từ Docker Documentation. Hãy mở terminal và thực thi tuần tự các khối lệnh sau.

Bước 1: Cập nhật chỉ mục APT và cài đặt gói truyền tải HTTPS

Để bắt đầu cách cài Docker trên Ubuntu, trước hết chúng ta cần làm mới cơ sở dữ liệu gói phần mềm của hệ thống và cài đặt các chứng chỉ bảo mật cần thiết để APT có thể giao tiếp an toàn qua giao thức HTTPS:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

Bước 2: Thiết lập khóa xác thực GPG của Docker

Trong các bước của cách cài Docker trên Ubuntu, khóa GPG (GNU Privacy Guard) giúp hệ điều hành Ubuntu xác thực rằng các gói phần mềm tải về thực sự được ký điện tử bởi chính Docker Inc, ngăn chặn triệt để nguy cơ tấn công trung gian chèn mã độc. Thực hiện tạo thư mục chứa khóa an toàn theo chuẩn hiện đại:

# Tạo thư mục chứa keyring với phân quyền chặt chẽ
sudo install -m 0755 -d /etc/apt/keyrings

# Tải và chuyển đổi khóa GPG chính thức của Docker
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Bước 3: Thêm kho lưu trữ chính thức vào danh sách nguồn APT

Tiếp theo trong các bước cách cài Docker trên Ubuntu, chúng ta sẽ thêm địa chỉ kho lưu trữ của Docker vào tệp cấu hình sources.list.d. Câu lệnh dưới đây sẽ tự động nhận diện kiến trúc phần cứng (amd64 hay arm64) và phiên bản phân phối của Ubuntu (noble, jammy hay focal) để điền đúng đường dẫn:

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

Ở giai đoạn này của cách cài Docker trên Ubuntu, sau khi thêm kho lưu trữ mới, bạn hãy chạy lại lệnh sudo apt-get update một lần nữa để hệ điều hành nạp danh sách các gói phần mềm mới nhất từ máy chủ Docker về bộ nhớ tạm.

Bước 4: Cài đặt Docker Engine, containerd và Docker Compose

Bây giờ là lúc tiến hành bước quan trọng nhất của cách cài Docker trên Ubuntu. Chúng ta sẽ cài đặt toàn bộ bộ công cụ hoàn chỉnh gồm nhân Docker Engine, công cụ dòng lệnh CLI, runtime containerd và các plugin mở rộng cần thiết:

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Các thành phần vừa được cài đặt bao gồm:

  • docker-ce: Bản thân tiến trình daemon chạy ngầm của Docker Engine, đảm nhận việc quản lý toàn bộ vòng đời của các container trên hệ thống.
  • docker-ce-cli: Tiện ích giao tiếp dòng lệnh giúp người dùng gửi chỉ thị điều khiển tới daemon.
  • containerd.io: Môi trường thực thi container độc lập tuân thủ tiêu chuẩn OCI (Open Container Initiative), nền tảng chịu trách nhiệm chạy trực tiếp các tiến trình container.
  • docker-buildx-plugin: Plugin biên dịch hình ảnh thế hệ mới, hỗ trợ biên dịch đa nền tảng CPU (Multi-arch Builds) song song với tốc độ vượt trội.
  • docker-compose-plugin: Phiên bản Docker Compose V2 viết bằng ngôn ngữ Go, tích hợp trực tiếp vào lệnh docker compose thay cho phiên bản Python cũ trước đây.

Bước 5: Kiểm tra trạng thái dịch vụ và chạy thử nghiệm

Để hoàn tất quá trình cách cài Docker trên Ubuntu, bạn hãy kiểm tra xem dịch vụ daemon đã được kích hoạt thành công hay chưa bằng lệnh systemctl:

# Kiểm tra trạng thái dịch vụ Docker daemon
sudo systemctl status docker

# Chạy thử container mẫu để kiểm chứng đường truyền
sudo docker run hello-world

Nhìn thấy thông báo Hello from Docker! đồng nghĩa quy trình cách cài Docker trên Ubuntu và cài đặt Docker Engine Ubuntu của bạn đã thành công 100%. Docker daemon đã tải hình ảnh hello-world từ Docker Hub về máy, khởi tạo một container mới, in lời chào ra màn hình và thoát thành công.

4. Cấu hình sau cài đặt: Quản trị Docker không cần quyền sudo và an toàn bảo mật

Mỗi khi gõ lệnh docker mà phải kèm theo tiền tố sudo là trải nghiệm khá phiền phức và tiềm ẩn nguy cơ gõ nhầm lệnh nguy hiểm. Khi nắm được cách cài Docker trên Ubuntu, việc thiết lập nhóm quyền quản trị không cần sudo là bước cấu hình tiện ích đầu tiên bạn nên làm.

Thêm tài khoản vào nhóm docker (docker group)

Khi hoàn tất cách cài Docker trên Ubuntu, mặc định Docker daemon gắn kết với một Unix socket cục bộ tại đường dẫn /var/run/docker.sock. Socket này chỉ cho phép tài khoản root và các thành viên trong nhóm docker sở hữu quyền truy cập. Bạn có thể thêm tài khoản người dùng hiện tại của mình vào nhóm này:

# Tạo nhóm docker (thường đã được tạo sẵn trong quá trình cài đặt)
sudo groupadd docker

# Thêm tài khoản hiện tại vào nhóm docker
sudo usermod -aG docker $USER

# Nạp lại nhóm quyền mới mà không cần đăng xuất máy chủ
newgrp docker

Bây giờ, sau khi hoàn thành bước phụ của cách cài Docker trên Ubuntu, bạn có thể kiểm tra lại bằng lệnh docker ps hoặc docker run hello-world mà không cần gõ từ khóa sudo ở đầu câu lệnh nữa.

Cảnh báo bảo mật: Nhóm docker tương đương với quyền root

Thú thật là, rất nhiều tài liệu bỏ qua lời cảnh báo an ninh quan trọng này khi hướng dẫn cách cài Docker trên Ubuntu. Bất kỳ người dùng nào có quyền truy cập vào socket Docker đều có thể dễ dàng chiếm toàn quyền điều khiển máy chủ vật lý (Privilege Escalation).

Khi chia sẻ về cách cài Docker trên Ubuntu an toàn, chỉ với một câu lệnh docker run -v /:/host -it ubuntu chroot /host, người đó đã có thể đọc và chỉnh sửa toàn bộ tệp tin nhạy cảm của hệ điều hành bao gồm cả /etc/shadow. Do đó, hãy áp dụng nghiêm ngặt các quy tắc bảo mật Docker container an toàn kết hợp với việc thiết lập kỹ thuật bảo mật máy chủ SSH Hardening để bảo vệ tài khoản quản trị của bạn.

Cấu hình Docker tự động khởi động cùng hệ thống

Bước tiếp theo sau cách cài Docker trên Ubuntu là đảm bảo các container tự động khởi chạy lại sau khi máy chủ bị khởi động lại do sự cố mất điện hay bảo trì phần cứng, hãy bật cờ tự khởi động trong systemd:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

5. Tinh chỉnh cấu hình Docker Daemon (/etc/docker/daemon.json) chuẩn sản xuất

Đây là phần kiến thức thực chiến đắt giá nhất mà một kỹ sư DevOps cần thực hiện sau khi hoàn tất cách cài Docker trên Ubuntu. Theo mặc định, Docker không đặt giới hạn cho dung lượng tệp nhật ký ghi log của container, điều này sớm muộn sẽ làm đầy tràn 100% dung lượng ổ cứng máy chủ của bạn.

Trong cẩm nang cách cài Docker trên Ubuntu, hãy tạo hoặc chỉnh sửa tệp cấu hình trung tâm tại /etc/docker/daemon.json để áp dụng các thiết lập tối ưu sau:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  },
  "live-restore": true,
  "storage-driver": "overlay2"
}

Ý nghĩa kỹ thuật của từng tham số cấu hình trên:

  • max-size: 50m và max-file: 3: Giới hạn mỗi tệp log của một container tối đa là 50MB và chỉ lưu giữ tối đa 3 tệp xoay vòng (log rotation). Điều này ngăn chặn triệt để tình trạng ứng dụng ghi log tràn lan làm nghẽn đĩa cứng máy chủ.
  • live-restore: true: Tính năng cực kỳ hữu ích giúp các container đang chạy vẫn tiếp tục hoạt động bình thường ngay cả khi bạn khởi động lại hoặc nâng cấp tiến trình Docker daemon, giúp giảm thiểu tối đa thời gian gián đoạn dịch vụ (downtime).
  • storage-driver: overlay2: Đảm bảo Docker sử dụng trình điều khiển lưu trữ phân lớp hiệu năng cao nhất trên nền tảng nhân Linux hiện đại.

Để hoàn thiện cấu hình trong cách cài Docker trên Ubuntu, sau khi lưu tệp, bạn chỉ cần nạp lại daemon bằng lệnh sudo systemctl reload docker.

6. Xử lý xung đột mạng kinh điển giữa Docker và tường lửa UFW

Nếu bạn đang sử dụng tường lửa UFW để bảo vệ máy chủ của mình, hãy đặc biệt lưu ý vấn đề này khi tìm hiểu cách cài Docker trên Ubuntu. Đây là một lỗ hổng bảo mật chết người đã làm hại vô số doanh nghiệp trên toàn thế giới.

Một lưu ý sống còn sau cách cài Docker trên Ubuntu là mặc định khi chạy container mở cổng -p 8080:8080, Docker daemon sẽ tự ý can thiệp trực tiếp vào các chuỗi quy tắc iptables của nhân Linux (chuỗi PREROUTING và DOCKER chain). Các quy tắc này đứng TRƯỚC chuỗi quy tắc lọc gói tin của UFW. Hậu quả là, ngay cả khi bạn đã cấu hình chặn cổng 8080 trên UFW bằng lệnh sudo ufw deny 8080, người dùng từ bên ngoài Internet vẫn có thể truy cập thẳng vào dịch vụ bên trong container.

Để xử lý dứt điểm rủi ro này sau cách cài Docker trên Ubuntu và cài Docker trên Ubuntu, bạn có hai phương án tiếp cận:

  • Phương án 1 (Khuyên dùng cho dịch vụ nội bộ): Ràng buộc cổng lắng nghe trực tiếp vào dải địa chỉ cục bộ (Localhost) bằng cách thêm tiền tố 127.0.0.1 vào cờ mở cổng: docker run -p 127.0.0.1:8080:8080 my-app. Khi đó, chỉ các tiến trình nội bộ máy chủ (như Nginx Reverse Proxy) mới có thể kết nối tới dịch vụ.
  • Phương án 2 (Đồng bộ luật tường lửa): Áp dụng các quy tắc định tuyến ufw-docker để ép buộc lưu lượng mạng của Docker phải tuân thủ bảng lọc của UFW theo hướng dẫn chi tiết tại bài viết cấu hình tường lửa UFW Firewall trên vnhte.com.

7. Quản lý Docker Compose V2 trên Ubuntu

Trong quy trình hiện đại của cách cài Docker trên Ubuntu, bạn không cần phải tải riêng tệp thực thi nhị phân docker-compose viết bằng Python như trước kia nữa. Gói docker-compose-plugin mà chúng ta đã cài đặt ở Bước 3 chính là phiên bản Docker Compose V2 chính thức.

Đi kèm với cách cài Docker trên Ubuntu, tài liệu tại hướng dẫn cài đặt Docker Compose trên Linux khẳng định Compose V2 được viết hoàn toàn bằng ngôn ngữ Go, tích hợp trực tiếp vào câu lệnh dòng lệnh với cú pháp có dấu cách: docker compose thay vì dấu gạch nối docker-compose cũ.

Để kiểm tra việc thiết lập Docker Compose trên Ubuntu sau khi thực hiện cách cài Docker trên Ubuntu, hãy gõ lệnh: bạn gõ lệnh:

# Kiểm tra phiên bản Docker Compose V2
docker compose version

# Kết quả mẫu:
Docker Compose version v2.29.1

Với plugin này, bạn có thể dễ dàng quản lý toàn bộ hệ thống ứng dụng đa dịch vụ (như Web App, Redis Cache, Database) chỉ với một tệp compose duy nhất, nâng cao năng suất vận hành Docker Compose trên Ubuntu lên mức tối đa.

8. Bảng so sánh các phương pháp cài đặt Docker trên Ubuntu

Để giúp bạn có cái nhìn tổng quan nhất về các lựa chọn khác nhau khi tìm hiểu cách cài Docker trên Ubuntu, Cypher đã tổng hợp bảng so sánh 3 phương pháp phổ biến nhất hiện nay:

Tiêu chí so sánhKho APT chính thức (docker-ce)Kho mặc định Ubuntu (docker.io)Script tiện ích (get.docker.com)
Độ mới phiên bảnMới nhất (Cập nhật tức thì từ Docker)Cũ (Phụ thuộc chu kỳ gói Canonical)Mới nhất (Tự động tải bản mới nhất)
Mức độ ổn địnhRất cao (Được kiểm thử chính thức)Cao (Theo tiêu chuẩn phân phối Linux)Khó kiểm soát trong môi trường CI/CD
Tích hợp Buildx & ComposeCó sẵn qua các plugin riêng biệtThường phải cài thủ công thêm ngoàiTự động cài đặt đầy đủ bộ công cụ
Khả năng nâng cấp tự độngDễ dàng qua lệnh apt update & upgradeDễ dàng qua lệnh apt thông thườngKhông khuyến khích dùng để nâng cấp
Khuyến nghị sử dụngChuẩn mực cho máy chủ sản xuất (Production)Chỉ dùng cho thử nghiệm cục bộ nhanhDùng cho môi trường Staging/Dev cá nhân

Bảng đối chiếu trên chứng minh rõ ràng rằng việc kiên trì áp dụng cách cài Docker trên Ubuntu thông qua kho APT chính thức là con đường chuyên nghiệp nhất cho mọi dự án nghiêm túc.

9. Hướng dẫn gỡ cài đặt hoàn toàn và giải phóng dung lượng rác

Khi bạn cần chuyển đổi môi trường hoặc làm mới hoàn toàn máy chủ, việc nắm vững cách gỡ bỏ sạch sẽ các tệp tin của Docker cũng quan trọng không kém việc biết cách cài Docker trên Ubuntu.

Nếu bạn muốn xóa sạch để thực hiện lại cách cài Docker trên Ubuntu từ đầu, hãy chạy các lệnh sau:

# Gỡ bỏ các gói phần mềm Docker chính thức
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

# Tự động dọn dẹp các gói phụ thuộc không còn sử dụng
sudo apt-get autoremove -y --purge

Lưu ý quan trọng khi gỡ hoặc làm lại cách cài Docker trên Ubuntu: Lệnh apt purge mặc định sẽ KHÔNG xóa dữ liệu hình ảnh, bộ chứa hay ổ đĩa lưu trữ của bạn. Để dọn dẹp sạch sẽ 100% dung lượng đĩa, bạn phải xóa thủ công các thư mục lưu trữ cốt lõi:

# Xóa sạch dữ liệu container, volumes và hình ảnh
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# Xóa khóa GPG và danh sách nguồn APT đã thêm
sudo rm -f /etc/apt/keyrings/docker.asc
sudo rm -f /etc/apt/sources.list.d/docker.list

Sau khi thực hiện các bước trên, máy chủ của bạn sẽ trở lại trạng thái ban đầu sạch sẽ như lúc chưa cài đặt phần mềm.

10. Tổng kết và kinh nghiệm vận hành Docker từ Cypher

Qua bài hướng dẫn toàn diện này, chắc chắn bạn đã nắm vững toàn bộ quy trình cách cài Docker trên Ubuntu chuẩn xác từ kho lưu trữ APT chính thức, hiểu rõ nguyên lý quản trị quyền hạn nhóm docker và cách cấu hình daemon.json để bảo vệ hệ thống tệp đĩa cứng.

Để đúc kết lại các kinh nghiệm thực chiến khi triển khai cách cài Docker trên Ubuntu, mình xin gửi tới bạn vài lời khuyên then chốt:

  • Luôn sử dụng kho lưu trữ chính thức của Docker để đảm bảo nhận được các bản vá lỗi bảo mật khẩn cấp và công cụ Compose V2 mới nhất.
  • Đừng bao giờ quên cấu hình giới hạn kích thước tệp log trong daemon.json ngay sau khi cài đặt để tránh thảm họa đĩa cứng bị đầy tràn.
  • Hãy thận trọng tối đa với cơ chế tự ý ghi đè iptables của Docker khi máy chủ có bật tường lửa UFW, ưu tiên bind cổng vào 127.0.0.1 cho các dịch vụ nội bộ.
  • Định kỳ dọn dẹp các hình ảnh lơ lửng và container đã tắt bằng lệnh docker system prune để duy trì không gian lưu trữ thông thoáng cho máy chủ.

Bạn đã cài đặt thành công Docker trên máy chủ Ubuntu của mình chưa? Bạn có gặp phải trục trặc nào về phân quyền hoặc mạng trong quá trình thực hiện không? Hãy để lại bình luận bên dưới để Cypher và cộng đồng lập trình viên cùng hỗ trợ bạn nhé!