Containers

Hướng dẫn cài đặt Docker trên Ubuntu 24.04 và chạy Nginx bằng Docker

Docker CE (Community Edition) là nền tảng container phổ biến cho phép đóng gói và chạy ứng dụng một cách linh hoạt. Hiện tại, Docker vẫn giữ vai trò quan trọng trong DevOps và triển khai ứng dụng. Bài viết này sẽ hướng dẫn bạn cách cài đặt Docker CE mới nhất trên Ubuntu 24.04 LTS (Linux) từ nguồn chính thức của Docker (không dùng snap hay gói docker.io có sẵn của Ubuntu), sau đó chạy thử một container Nginx. Hướng dẫn được trình bày chi tiết, thân thiện, dễ hiểu – phù hợp cho người mới bắt đầu học Docker cho người mới và muốn trải nghiệm Docker trong môi trường Ubuntu 24.04.

Cài đặt Docker CE trên Ubuntu 24.04 từ nguồn chính thức

Mặc định Ubuntu cung cấp gói docker.io, nhưng thường là phiên bản cũ và setup qua snap cũng không linh hoạt. Để có phiên bản Docker mới nhất, chúng ta sẽ thêm kho lưu trữ chính thức của Docker và cài đặt Docker Engine từ đó. Trước hết, hãy đảm bảo hệ thống Linux Ubuntu của bạn đã được cập nhật và không có xung đột với phiên bản Docker khác:

  1. Cập nhật hệ thống và cài các gói phụ thuộc: Chạy lệnh sau để cập nhật danh sách gói và cài đặt một số gói cần thiết (đảm bảo apt hỗ trợ HTTPS, chứng chỉ, v.v.):

    sudo apt update
    sudo apt install -y
    apt-transport-https ca-certificates curl gnupg

    Lệnh sudo apt update cập nhật danh sách các packages, còn sudo apt install sẽ cài các gói apt-transport-https, ca-certificates (chứng chỉ SSL), curl (để tải file), và gnupg (hỗ trợ quản lý khoá). Đây là các gói phụ thuộc cần có trước khi thêm kho Docker.

  2. Thêm khóa GPG chính thức của Docker: Docker cung cấp khóa GPG để apt xác thực các gói tải về. Tạo thư mục lưu trữ khóa và tải khóa về hệ thống Linux Ubuntu của bạn:

    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

    Lệnh trên sẽ tạo thư mục /etc/apt/keyrings/ (nếu chưa có) và tải khóa GPG của Docker từ máy chủ chính thức, lưu dưới dạng file docker.gpg. Khóa này giúp bảo đảm các gói cài đặt là từ Docker, tránh bị thay thế (tính toàn vẹn và tin cậy).

  3. Thêm kho lưu trữ Docker vào nguồn APT: Thêm Docker repository phù hợp với phiên bản Ubuntu 24.04 của bạn:

    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
    sudo apt update

    Dòng lệnh trên sử dụng echo để thêm một entry deb trỏ tới kho Docker (stable channel) vào file /etc/apt/sources.list.d/docker.list. Biến $(lsb_release -cs) sẽ tự điền mã phiên bản Ubuntu (Ubuntu 24.04 có codename là “noble”). Sau khi thêm, chạy sudo apt update để cập nhật danh sách gói một lần nữa, bây giờ đã bao gồm các gói từ kho Docker chính thức.

  4. Cài đặt Docker Engine (CE), CLI và containerd: Tiến hành cài Docker CE và các thành phần liên quan:

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

    Lệnh trên sẽ cài đặt phiên bản Docker CE mới nhất từ kho chính thức, bao gồm:

    • docker-ce: Docker Engine (dịch vụ dockerd chính).

    • docker-ce-cli: Công cụ dòng lệnh Docker CLI để bạn gõ lệnh docker ....

    • containerd.io: Containerd – trình quản lý container cấp thấp mà Docker sử dụng để chạy container (quản lý vòng đời container).

    • docker-buildx-plugin (plugin buildx) và docker-compose-plugin (plugin Docker Compose) – các plugins mở rộng khả năng build đa nền tảng và orchestration bằng Compose YAML. (Các plugins này có thể được setup kèm để bạn có đầy đủ tính năng Docker nâng cao).

    Quá trình setup sẽ tự động khởi động dịch vụ Docker daemon. Bạn có thể kiểm tra nhanh phiên bản Docker cài đặt bằng lệnh docker --version hoặc thử chạy container mẫu Hello World để xác nhận Docker hoạt động chính xác.

  5. Kiểm tra Docker Engine đã cài đặt: Chạy container thử nghiệm Hello World do Docker cung cấp:

    sudo docker run hello-world

    Lệnh trên tải một image mẫu tên là hello-world từ Docker Hub và thực thi nó trong container (ở chế độ nền). Khi container chạy, nó sẽ in ra màn hình một thông báo xác nhận rồi tự thoát. Nếu bạn thấy thông báo “Hello from Docker!”  có nghĩa là Docker Engine đã được cài đặt và khởi chạy thành công trên hệ thống Linux Ubuntu của bạn.

    Nếu lệnh trên báo lỗi quyền (permission denied), đừng lo lắng – phần tiếp theo sẽ hướng dẫn bạn cách chạy Docker không cần sudo.

Cấu hình chạy Docker không cần sudo

Theo mặc định, bạn cần quyền sudo mỗi khi chạy lệnh Docker, do Docker daemon chạy với quyền root và nhóm người dùng docker chưa có người dùng nào. Để tiện lợi hơn (và tránh phải gõ sudo mỗi lần), bạn có thể thêm user hiện tại vào nhóm docker. Thao tác này cho phép chạy lệnh Docker với quyền không cần root:

sudo groupadd docker # Tạo nhóm "docker" (nếu group docker chưa tồn tại)
sudo usermod -aG docker $USER # Thêm người dùng hiện tại vào nhóm docker

Lệnh groupadd để tạo nhóm docker (thường gói Docker CE đã tạo sẵn nhóm này rồi) và usermod -aG docker $USER sẽ bổ sung user của bạn vào nhóm đó. $USER là biến môi trường đại diện cho tên người dùng hiện tại.

Sau khi thực hiện, đăng xuất khỏi phiên làm việc và đăng nhập lại để thay đổi có hiệu lực (nhóm mới được áp dụng). Bạn cũng có thể chạy newgrp docker để áp dụng ngay trong terminal hiện tại thay vì logout.

Giờ hãy thử lại lệnh Docker mà không cần sudo. Ví dụ, chạy lại container Hello World một lần nữa:

docker run hello-world

Nếu lệnh chạy thành công và hiện thông báo như trước mà không báo lỗi thiếu quyền, tức là bạn đã cấu hình thành công chạy Docker không cần sudo .

Lưu ý bảo mật: Việc thêm user vào nhóm docker cũng đồng nghĩa user đó có quyền kiểm soát Docker daemon (tương đương quyền root). Hãy chỉ thêm những user tin cậy, và tránh chạy lệnh Docker từ user không đáng tin cậy.

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

Thông thường trên Ubuntu, dịch vụ Docker sẽ tự chạy khi hệ thống Linux Ubuntu khởi động. Tuy nhiên để chắc chắn Docker luôn khởi động cùng hệ thống, bạn nên bật chế độ tự động cho dịch vụ Docker (và containerd):

sudo systemctl enable docker
sudo systemctl enable containerd

Lệnh trên đăng ký Docker daemon và containerd khởi động mỗi khi máy được bật (enable service). Bạn có thể kiểm tra trạng thái dịch vụ Docker bằng sudo systemctl status docker. Kết quả sẽ cho thấy Docker Active (running) và được đánh dấu enabled nghĩa là sẽ tự chạy lúc khởi động máy. Từ giờ, bạn không cần khởi động Docker thủ công sau mỗi lần reboot.

Chạy thử container Nginx trên Docker

Sau khi cài xong Docker, chúng ta sẽ chạy thử một container Nginx – máy chủ web phổ biến – để kiểm chứng mọi thứ hoạt động tốt. Dưới đây là hướng dẫn từng bước để download và chạy Nginx trong Docker, kèm giải thích chi tiết cho từng lệnh:

  1. Download image Nginx mới nhất từ Docker Hub: Docker Hub là kho lưu trữ image container trực tuyến. Ta sẽ kéo image chính thức của Nginx về server:

    docker pull nginx:latest

    Lệnh docker pull sẽ tải image nginx:latest về server từ Docker Hub. Thẻ :latest đại diện cho phiên bản mới nhất (tại thời điểm viết bài, image nginx mới nhất tương ứng phiên bản Nginx 1.25+). Bạn có thể chỉ định rõ phiên bản (ví dụ nginx:1.26) nếu muốn, còn không Docker sẽ mặc định lấy bản mới nhất. Sau khi tải xong, bạn có thể kiểm tra bằng lệnh docker images – sẽ thấy image nginx:latest đã có trong danh sách (với IMAGE ID, kích cỡ, …).

  2. Chạy container Nginx: Sau khi có image, chúng ta tạo và khởi động container dựa trên image đó. Chạy lệnh sau:

    docker run -d --name mynginx -p 80:80 nginx:latest

    Giải thích lệnh trên: docker run sẽ tạo một container mới từ image chỉ định và khởi chạy nó. Các tham số đi kèm gồm:

    • -d: Chạy container ở chế độ tách nền (detached), tức là chạy nền không chiếm terminal. Container sẽ tiếp tục chạy ngay cả khi chúng ta đóng terminal.

    • --name mynginx: Đặt tên cho container là “mynginx” để dễ quản lý. Nếu không chỉ định, Docker sẽ gán một tên ngẫu nhiên.

    • -p 80:80: Máp cổng 80 của máy chủ (host) với cổng 80 của container. Có nghĩa là, truy cập vào cổng 80 trên máy Ubuntu sẽ được chuyển tiếp vào cổng 80 bên trong container (nơi Nginx đang lắng nghe). Nhờ đó, chúng ta có thể truy cập website Nginx từ bên ngoài như thể nó chạy trên server host.

    • nginx:latest: Chỉ định image dùng để tạo container – ở đây là image Nginx mới nhất mà ta vừa tải về.

    Khi chạy lệnh trên, Docker Engine sẽ tạo một container từ image nginx (nếu image chưa tồn tại local thì Docker sẽ tự kéo về trước, nhưng ta đã pull ở bước 1). Container Nginx sau đó khởi chạy trong nền; Docker sẽ trả về một Container ID (một chuỗi ký tự) đại diện cho container vừa tạo nếu thành công.

  3. Kiểm tra container đang chạy: Để xem container Nginx của chúng ta có chạy hay không, dùng lệnh liệt kê các container đang chạy:

    docker ps

    Lệnh trên sẽ liệt kê tất cả container đang chạy (tương đương docker container ls). Bạn sẽ thấy container mynginx vừa khởi tạo xuất hiện trong danh sách, kèm thông tin như Container ID, tên image, thời gian chạy, trạng thái và cổng đã map. Ví dụ, cột STATUS có thể hiện “Up X seconds (healthy)” nghĩa là container đang chạy tốt, và cột PORTS sẽ hiển thị có map cổng 0.0.0.0:80->80/tcp (điều này xác nhận cổng 80 host đã nối với cổng 80 container). Nếu thấy container mynginx trạng thái “Up”, chúng ta đã chạy thành công Nginx trong Docker!

  4. Kiểm tra dịch vụ Nginx bằng lệnh CURL: Bây giờ, hãy thử gửi request đến Nginx container để chắc chắn nó phục vụ web. Bạn có thể dùng lệnh curl ngay trên máy chủ để kiểm tra nhanh:

    curl -I localhost

    Lệnh trên sẽ gửi một request HTTP đến địa chỉ localhost (cổng 80 mặc định). Tùy theo thiết lập mạng, bạn có thể dùng localhost hoặc địa chỉ IP của máy Ubuntu. Tham số -I yêu cầu curl chỉ lấy phần header HTTP (HEAD request) thay vì toàn bộ nội dung trang. Nếu container Nginx hoạt động, curl sẽ nhận được hồi đáp với mã trạng thái HTTP/1.1 200 OK cùng một số header (như Server: nginx/... xác nhận đó là máy chủ Nginx). Bạn cũng có thể dùng curl localhost không tham số để thấy nội dung HTML trang mặc định của Nginx (sẽ bao gồm dòng “Welcome to nginx!”).

    Mẹo: Trong trường hợp bạn chạy Ubuntu trên server và có tường lửa UFW, hãy đảm bảo mở cổng 80 cho HTTP trước khi kiểm tra (sudo ufw allow 80/tcp).

  5. Truy cập Nginx bằng trình duyệt web từ máy tính của bạn: Cuối cùng, thử truy cập trang web Nginx bằng trình duyệt web của bạn. Mở trình duyệt và nhập địa chỉ URL của máy chủ Ubuntu. Nếu bạn đang chạy Docker trên chính máy tính của bạn, có thể dùng http://localhost. Nếu là máy chủ từ xa, hãy dùng http://<địa_chỉ_IP_của_server> (ví dụ: http://192.168.146.164). Bạn sẽ thấy trang web mặc định của Nginx hiển thị.

    Hình minh họa: Giao diện trang “Welcome to nginx!” mặc định khi truy cập container Nginx thành công. Đây là trang chào mừng xác nhận Nginx đã được cài đặt thành công và chạy đúng. Nếu bạn thấy trang này, nghĩa là container Docker đã hoạt động và Nginx sẵn sàng phục vụ nội dung web. Từ đây, bạn có thể tùy chỉnh thêm cấu hình Nginx hoặc triển khai ứng dụng web của mình trong container.

Kết luận

Qua bài viết trên, chúng ta đã thực hiện cài đặt thành công Docker CE trên Ubuntu 24.04 từ nguồn chính thức và chạy thử container Nginx. Bạn đã biết cách thiết lập Docker để không cần dùng sudo, đảm bảo tiện lợi cho việc học tập và thử nghiệm của bạn. Bây giờ, bạn có một môi trường Docker cơ bản để có thể khám phá thêm – ví dụ như triển khai các ứng dụng khác, tìm hiểu Docker Compose, hoặc quản lý nhiều containers. Đây là một bước khởi đầu vững chắc cho hành trình Docker cho người mới bắt đầu. Hãy tiếp tục thực hành và trải nghiệm các tính năng khác của Docker để nâng cao kỹ năng DevOps của mình.

Chúc bạn thành công!

#DockerUbuntu2404 #NginxDocker2025 #CaiDockerMoiNhat #DockerChoNguoiMoi#DevOps

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *