Kiến thức Hữu ích 😍

Hướng dẫn cài đặt Docker trên CentOS 7 | Mẹo quản lý hiệu quả


Chào bạn, trong thế giới phát triển phần mềm hiện đại, bạn đã bao giờ nghe đến Docker chưa? Docker là một nền tảng mở giúp bạn tự động hóa việc triển khai, kiểm thử và vận hành ứng dụng trong các “container”. Hãy tưởng tượng container như một chiếc hộp chứa đựng mọi thứ mà ứng dụng của bạn cần để chạy: mã nguồn, thư viện, và các công cụ hệ thống. Điều này đảm bảo ứng dụng của bạn sẽ hoạt động nhất quán trên mọi môi trường, từ máy tính cá nhân của lập trình viên đến máy chủ sản phẩm.

Trên hệ điều hành CentOS là gì, một lựa chọn phổ biến cho các máy chủ, việc quản lý môi trường ảo hóa truyền thống thường gặp nhiều thách thức. Các máy ảo (VM) thường cồng kềnh, tiêu tốn nhiều tài nguyên và khởi động chậm. Đây chính là lúc Docker tỏa sáng. Thay vì ảo hóa toàn bộ hệ điều hành, Docker chỉ ảo hóa ở cấp độ ứng dụng. Kết quả là các container cực kỳ nhẹ, khởi động gần như tức thì và sử dụng tài nguyên hiệu quả hơn rất nhiều. Bài viết này sẽ hướng dẫn bạn chi tiết từ A-Z: cách cài đặt, các lệnh sử dụng cơ bản và những mẹo vận hành Docker hiệu quả trên CentOS 7.

Hình minh họa

Cách cấu hình kho lưu trữ để cài đặt Docker trên CentOS 7

Trước khi cài đặt Docker, bước đầu tiên và quan trọng nhất là chuẩn bị hệ thống và thiết lập kho lưu trữ (repository) chính thức của Docker. Việc này đảm bảo bạn luôn nhận được phiên bản Docker mới nhất, ổn định và đi kèm các bản vá bảo mật quan trọng. Đừng bỏ qua bước này nhé, vì nó sẽ giúp hệ thống của bạn an toàn và hoạt động trơn tru hơn trong dài hạn.

Kiểm tra và cập nhật hệ thống

Đầu tiên, hãy đảm bảo hệ thống hệ điều hành CentOS 7 của bạn được cập nhật lên phiên bản mới nhất. Việc này giúp vá các lỗ hổng bảo mật và đảm bảo tính tương thích của các gói phần mềm. Bạn chỉ cần mở terminal và chạy lệnh sau:

sudo yum update -y

Lệnh này sẽ tự động tải về và cài đặt tất cả các bản cập nhật có sẵn cho hệ thống của bạn. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ mạng và số lượng gói cần cập nhật. Hãy kiên nhẫn chờ đợi đến khi quá trình hoàn tất nhé.

Thêm kho lưu trữ Docker chính thức

Sau khi hệ thống đã được cập nhật, chúng ta sẽ tiến hành thêm kho lưu trữ chính thức của Docker. Đầu tiên, bạn cần cài đặt gói yum-utils, gói này cung cấp tiện ích yum-config-manager để quản lý các kho lưu trữ một cách dễ dàng.

sudo yum install -y yum-utils

Tiếp theo, hãy sử dụng lệnh sau để thêm kho lưu trữ Docker vào hệ thống của bạn:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Tại sao việc sử dụng kho lưu trữ chính thức lại quan trọng đến vậy? Vì nó là nguồn duy nhất được Docker tin tưởng và xác thực. Khi cài đặt từ đây, bạn có thể chắc chắn rằng mình đang sử dụng phiên bản Docker ổn định, được kiểm tra kỹ lưỡng và sẽ nhận được các bản cập nhật tính năng cũng như bảo mật ngay khi chúng được phát hành. Điều này giúp bảo vệ hệ thống của bạn khỏi các mối đe dọa tiềm ẩn và đảm bảo hiệu suất tối ưu.

Hình minh họa

Hướng dẫn cài đặt Docker Engine trên CentOS 7

Khi đã cấu hình xong kho lưu trữ, chúng ta đã sẵn sàng để cài đặt Docker Engine. Đây là thành phần cốt lõi của Docker, chịu trách nhiệm xây dựng, chạy và quản lý các container. Quá trình này khá đơn giản và nhanh chóng nhờ vào trình quản lý gói yum của CentOS.

Cài đặt Docker Engine bằng yum

Bây giờ, bạn chỉ cần chạy một lệnh duy nhất để cài đặt Docker Engine phiên bản cộng đồng (Community Edition – CE), giao diện dòng lệnh (CLI) và containerd.

sudo yum install docker-ce docker-ce-cli containerd.io

Hệ thống sẽ yêu cầu bạn xác nhận việc cài đặt và các gói phụ thuộc. Hãy nhấn `y` và Enter để tiếp tục. Trình quản lý yum sẽ tự động tải về và cài đặt các gói cần thiết từ kho lưu trữ mà chúng ta đã thêm ở bước trước. Chỉ trong vài phút, Docker sẽ được cài đặt thành công trên hệ thống CentOS 7 của bạn.

Hình minh họa

Khởi động và kích hoạt dịch vụ Docker

Sau khi cài đặt xong, Docker chưa tự động chạy. Bạn cần khởi động dịch vụ và cấu hình để nó tự khởi động cùng hệ thống mỗi khi bạn reboot máy chủ. Điều này đảm bảo các ứng dụng container của bạn luôn sẵn sàng hoạt động mà không cần can thiệp thủ công.

Sử dụng lệnh sau để khởi động dịch vụ Docker ngay lập tức:

sudo systemctl start docker

Tiếp theo, để Docker tự động khởi chạy mỗi khi máy chủ khởi động, bạn hãy dùng lệnh:

sudo systemctl enable docker

Lệnh này sẽ tạo một liên kết tượng trưng (symlink) trong hệ thống, giúp dịch vụ Docker được kích hoạt trong quá trình boot. Giờ đây, bạn có thể hoàn toàn yên tâm rằng Docker luôn ở trạng thái sẵn sàng để phục vụ.

Kiểm tra trạng thái và dịch vụ Docker sau khi cài đặt

Cài đặt xong rồi, nhưng làm sao để biết Docker đã thực sự hoạt động đúng cách? Bước kiểm tra này cực kỳ quan trọng để đảm bảo mọi thứ đã sẵn sàng trước khi bạn bắt đầu triển khai ứng dụng của mình. Chúng ta sẽ kiểm tra trạng thái dịch vụ và chạy thử một container mẫu để xác nhận.

Kiểm tra trạng thái dịch vụ Docker

Để kiểm tra xem dịch vụ Docker có đang chạy ổn định hay không, bạn có thể sử dụng lệnh systemctl status. Lệnh này sẽ cung cấp thông tin chi tiết về trạng thái hiện tại của dịch vụ.

sudo systemctl status docker

Nếu mọi thứ đều ổn, bạn sẽ thấy một dòng chữ màu xanh lá cây cho biết dịch vụ đang active (running). Kết quả này xác nhận rằng Docker daemon đang lắng nghe các yêu cầu từ Docker client và sẵn sàng để quản lý các container. Nếu bạn thấy trạng thái inactive hoặc failed, hãy quay lại các bước trước để kiểm tra lại hoặc xem log lỗi để tìm nguyên nhân.

Hình minh họa

Chạy thử container đầu tiên

Cách tốt nhất để khẳng định Docker hoạt động hoàn hảo là chạy thử một container. Docker cung cấp một image tên là hello-world được thiết kế đặc biệt cho mục đích này. Nó là một chương trình nhỏ, nhẹ, chỉ in ra một thông điệp chào mừng và thoát.

Hãy chạy lệnh sau trong terminal:

sudo docker run hello-world

Lần đầu tiên chạy lệnh này, Docker sẽ thực hiện các bước sau:

  1. Kiểm tra xem image hello-world đã có trên máy của bạn chưa.
  2. Nếu chưa có, nó sẽ tự động kết nối đến Docker Hub (kho lưu trữ image công cộng của Docker) và tải image này về.
  3. Sau khi tải xong, nó sẽ tạo một container mới từ image đó.
  4. Cuối cùng, nó sẽ chạy container và bạn sẽ thấy một thông điệp bắt đầu bằng “Hello from Docker!”.

Nếu bạn thấy thông báo này, xin chúc mừng! Bạn đã cài đặt và chạy thành công container Docker đầu tiên của mình trên CentOS 7.

Hình minh họa

Các lệnh cơ bản để sử dụng và quản lý container Docker

Bây giờ bạn đã có một môi trường Docker hoạt động, đã đến lúc tìm hiểu các lệnh cơ bản để tương tác với nó. Việc quản lý các container và image là những kỹ năng cốt lõi mà bất kỳ ai sử dụng Docker cũng cần nắm vững. Đừng lo lắng, các lệnh này rất trực quan và dễ nhớ.

Quản lý container

Container là các thực thể chạy của ứng dụng. Bạn sẽ thường xuyên cần xem danh sách, khởi động, dừng hoặc xóa chúng.

  • Liệt kê các container đang chạy:
    docker ps
  • Lệnh này sẽ hiển thị danh sách các container đang hoạt động, cùng với thông tin như ID, image, thời gian chạy và cổng mạng.
  • Liệt kê tất cả container (kể cả đã dừng):
    docker ps -a
  • Thêm cờ -a sẽ cho bạn thấy cả những container đã chạy xong và đang ở trạng thái dừng.
  • Dừng một container đang chạy:
    docker stop <container_id_hoặc_tên>
  • Bạn có thể dùng ID hoặc tên của container để dừng nó.
  • Khởi động một container đã dừng:
    docker start <container_id_hoặc_tên>
  • Xóa một container:
    docker rm <container_id_hoặc_tên>
  • Lưu ý: bạn phải dừng container trước khi xóa nó.

Quản lý hình ảnh (image)

Image là các “bản thiết kế” dùng để tạo ra container. Bạn sẽ cần tải image từ các kho lưu trữ hoặc xóa chúng đi khi không còn sử dụng.

  • Tải một image từ Docker Hub:
    docker pull <tên_image>:<tag>
  • Ví dụ, để tải phiên bản mới nhất của Ubuntu, bạn chạy: docker pull ubuntu:latest.
  • Liệt kê các image có trên máy:
    docker images
  • Lệnh này sẽ hiển thị tất cả các image bạn đã tải về hoặc tự build, cùng với kích thước của chúng.
  • Xóa một image:
    docker rmi <image_id_hoặc_tên>
  • Lưu ý: bạn không thể xóa một image nếu vẫn còn container (kể cả đã dừng) được tạo từ nó. Bạn cần xóa các container liên quan trước.

Hình minh họa

Mẹo và lưu ý khi vận hành Docker trên CentOS 7

Việc cài đặt và sử dụng các lệnh cơ bản chỉ là bước khởi đầu. Để vận hành Docker một cách hiệu quả và an toàn trên môi trường sản phẩm, bạn cần nắm thêm một vài mẹo và lưu ý quan trọng. Những kinh nghiệm này sẽ giúp bạn tối ưu hóa hiệu suất, tăng cường bảo mật và quản lý hệ thống dễ dàng hơn.

  • Cấu hình quyền user không dùng root để chạy Docker: Mặc định, bạn phải dùng sudo để chạy các lệnh Docker. Điều này tiềm ẩn rủi ro bảo mật. Để cho phép người dùng hiện tại chạy Docker mà không cần sudo, hãy thêm họ vào nhóm docker:
    sudo usermod -aG docker ${USER}
    Sau khi chạy lệnh này, bạn cần đăng xuất và đăng nhập lại để thay đổi có hiệu lực.
  • Giới hạn tài nguyên cho container: Trong môi trường chia sẻ, một container có thể “tham lam” chiếm hết tài nguyên CPU và RAM, ảnh hưởng đến các container khác và cả hệ thống. Docker cho phép bạn giới hạn tài nguyên cho mỗi container khi chạy chúng. Ví dụ:
    docker run -d --name my-app --cpus="1.5" --memory="1g" my-image
    Lệnh này sẽ tạo một container chỉ được sử dụng tối đa 1.5 core CPU và 1GB RAM.
  • Backup là gì và quản lý volumes: Dữ liệu bên trong container sẽ bị mất khi container bị xóa. Để lưu trữ dữ liệu bền vững, hãy sử dụng Docker volumes. Volumes là một cơ chế cho phép dữ liệu tồn tại độc lập với vòng đời của container.
    docker volume create my-data
    docker run -d -v my-data:/app/data my-image
    Bằng cách này, bạn có thể dễ dàng backup, di chuyển và chia sẻ dữ liệu giữa các container.
  • Cập nhật Docker định kỳ: Giống như bất kỳ phần mềm nào khác, Docker cũng có các bản cập nhật để vá lỗi, cải thiện hiệu suất và bổ sung tính năng mới. Hãy thường xuyên chạy lệnh sudo yum update docker-ce để đảm bảo bạn đang sử dụng phiên bản mới nhất và an toàn nhất.

Hình minh họa

Các vấn đề thường gặp và cách khắc phục

Dù Docker rất ổn định, đôi khi bạn vẫn có thể gặp phải một số vấn đề trong quá trình cài đặt và sử dụng trên CentOS 7. Đừng quá lo lắng! Hầu hết các lỗi này đều khá phổ biến và có cách khắc phục rõ ràng. Dưới đây là hai sự cố thường gặp nhất và hướng dẫn xử lý chúng.

Docker không khởi động được trên CentOS 7

Bạn đã chạy lệnh sudo systemctl start docker nhưng dịch vụ không khởi động được? Đây là một vấn đề khá phổ biến. Nguyên nhân thường do xung đột với các dịch vụ hệ thống khác hoặc cấu hình sai.

  • Kiểm tra logs: Bước đầu tiên luôn là kiểm tra file log để tìm manh mối. Sử dụng lệnh sau để xem các thông báo lỗi chi tiết nhất:
    sudo journalctl -xe
    Hãy tìm các dòng liên quan đến docker.service để xác định nguyên nhân gốc rễ.
  • Xung đột với FirewallD: Đôi khi, FirewallD (tường lửa mặc định của CentOS 7) có thể chặn các quy tắc mạng mà Docker cần tạo ra. Hãy thử tạm thời vô hiệu hóa FirewallD để xem có phải là nguyên nhân không:
    sudo systemctl stop firewalld
    Nếu Docker khởi động được sau khi dừng FirewallD, bạn cần cấu hình lại tường lửa để cho phép Docker hoạt động.
  • Vấn đề với SELinux: SELinux là một module bảo mật của Linux có thể ngăn Docker thực hiện một số hành động. Nếu log báo lỗi liên quan đến “permission denied”, có thể SELinux đang chặn nó. Bạn có thể kiểm tra các thông báo từ chối của SELinux trong /var/log/audit/audit.log.

Lỗi mạng khi sử dụng container

Một vấn đề khác là container của bạn chạy nhưng không thể kết nối ra internet hoặc các container khác không thể giao tiếp với nhau. Nguyên nhân hầu hết nằm ở cấu hình mạng.

  • Kiểm tra cấu hình mạng Docker: Docker tạo ra các mạng ảo (thường là một mạng bridge) để các container giao tiếp. Dùng lệnh docker network ls để xem danh sách các mạng. Đảm bảo rằng container của bạn được kết nối vào đúng mạng.
  • Kiểm tra NAT và IP Forwarding: Docker cần tính năng IP forwarding của kernel Linux để hoạt động. Hãy kiểm tra xem nó đã được bật hay chưa:
    cat /proc/sys/net/ipv4/ip_forward
    Nếu kết quả là 0, bạn cần bật nó lên. Hãy thêm dòng net.ipv4.ip_forward = 1 vào file /etc/sysctl.conf và chạy sudo sysctl -p.
  • Kiểm tra lại FirewallD: Nếu bạn đang sử dụng FirewallD, hãy chắc chắn rằng bạn đã cho phép masquerading cho vùng mạng mà Docker sử dụng. Điều này cho phép các container truy cập mạng bên ngoài.

Hình minh họa

Best Practices khi sử dụng Docker trên CentOS 7

Để khai thác tối đa sức mạnh của Docker và xây dựng một hệ thống vững chắc, an toàn, việc tuân thủ các “best practices” (thực hành tốt nhất) là vô cùng quan trọng. Đây là những nguyên tắc được cộng đồng đúc kết qua nhiều năm kinh nghiệm vận hành Docker trên các hệ thống lớn.

  • Luôn sử dụng kho lưu trữ chính thức: Như đã đề cập ở phần cài đặt, việc này đảm bảo bạn nhận được các bản cập nhật bảo mật và tính năng mới nhất trực tiếp từ Docker. Đừng bao giờ cài đặt Docker từ các kho lưu trữ không rõ nguồn gốc.
  • Tránh chạy container với quyền root trừ khi cần thiết: Mặc định, các tiến trình bên trong container chạy với quyền root. Điều này tạo ra một rủi ro bảo mật lớn nếu container bị tấn công. Hãy tạo một người dùng không phải root bên trong Dockerfile của bạn và sử dụng câu lệnh USER để chuyển sang người dùng đó trước khi chạy ứng dụng.
    FROM ubuntu:latest
    RUN useradd -m myuser
    USER myuser
    CMD ["/bin/bash"]
  • Tách biệt dữ liệu qua Docker volumes: Không bao giờ lưu trữ dữ liệu quan trọng (như database, file upload) trực tiếp trong filesystem của container. Luôn sử dụng Docker volumes để tách biệt vòng đời của dữ liệu khỏi container. Điều này giúp việc nâng cấp, sao lưu và di chuyển dữ liệu trở nên cực kỳ đơn giản và an toàn.
  • Giám sát tài nguyên và log container thường xuyên: Đừng để hệ thống của bạn chạy trong “hộp đen”. Hãy thường xuyên sử dụng các lệnh như docker stats để theo dõi việc sử dụng CPU, RAM, mạng của các container. Đồng thời, dùng docker logs <container_id> để kiểm tra log của ứng dụng, giúp bạn phát hiện và khắc phục sự cố sớm. Tích hợp các công cụ giám sát chuyên dụng như Prometheus và Grafana là một bước đi chuyên nghiệp hơn.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết từ việc chuẩn bị hệ thống, cài đặt, đến sử dụng và vận hành Docker trên CentOS 7. Bạn có thể thấy, Docker không chỉ là một công cụ mạnh mẽ mà còn mang lại rất nhiều lợi ích thiết thực: môi trường phát triển nhất quán, triển khai ứng dụng nhanh chóng, và sử dụng tài nguyên hệ thống một cách tối ưu. Việc làm chủ Docker trên CentOS 7 sẽ mở ra cho bạn nhiều cơ hội để xây dựng các hệ thống linh hoạt, dễ dàng mở rộng và bảo trì.

Đừng ngần ngại bắt đầu thực hành ngay hôm nay. Hãy thử “docker hóa” một ứng dụng đơn giản của bạn, chẳng hạn như một website WordPress hoặc một API Node.js. Quá trình thực hành sẽ giúp bạn hiểu sâu hơn về cách Docker hoạt động và củng cố các kiến thức đã học.

Khi bạn đã tự tin với các container đơn lẻ, hãy tìm hiểu các công cụ nâng cao hơn trong hệ sinh thái Docker. Docker Compose sẽ giúp bạn định nghĩa và chạy các ứng dụng đa container phức tạp một cách dễ dàng. Xa hơn nữa, các hệ thống điều phối container như Kubernetes là gì sẽ là bước tiếp theo để bạn quản lý các cụm máy chủ lớn với hàng trăm, hàng ngàn container một cách tự động và hiệu quả. Chúc bạn thành công trên con đường chinh phục công nghệ container

Đánh giá