Cài đặt Docker Engine trên Fedora: Cách xử lý xung đột Podman và lỗi Network

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Mì ăn liền: Cài nhanh Docker Engine trong 5 phút

Nếu bạn chỉ cần Docker chạy ngay để làm việc, hãy copy-paste dãy lệnh dưới đây. Mình đã lược bỏ các bước rườm rà để bạn có ngay môi trường container chuẩn chỉ.

# 1. Dọn dẹp các bản cũ hoặc package xung đột
sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

# 2. Thiết lập repository chính thức
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

# 3. Cài đặt Docker Engine và các plugin bổ trợ
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 4. Kích hoạt dịch vụ
sudo systemctl enable --now docker

# 5. Chạy Docker không cần sudo (tiết kiệm thời gian gõ lệnh)
sudo usermod -aG docker $USER
newgrp docker

Kiểm tra thành quả bằng lệnh: docker run hello-world. Nếu thấy dòng chữ “Hello from Docker!” là bạn đã thành công.

Tại sao cài Docker trên Fedora thường hay gặp lỗi?

Mình dùng Fedora làm máy dev chính đã hơn 2 năm. Có một thực tế là Fedora (và hệ sinh thái Red Hat) cực kỳ ưu ái Podman. Đây là công cụ quản lý container không cần daemon, bảo mật hơn và được cài sẵn mặc định.

Nhiều bạn mới chuyển sang Fedora thường nhầm lẫn khi gõ docker và thấy hệ thống gợi ý cài podman-docker. Thực chất đây chỉ là một bản “giả lập” (alias). Dù Podman rất mạnh, nhưng nhiều script CI/CD hoặc các project phức tạp vẫn yêu cầu Docker Engine thực thụ để đảm bảo tính tương thích 100%.

Trở ngại lớn nhất khi cài Docker lên Fedora nằm ở cgroup v2Firewalld. Đây là hai “thủ phạm” chính khiến container của bạn không khởi động được hoặc mất kết nối mạng.

Xử lý các vấn đề kỹ thuật “nhức nhối”

1. Lỗi cgroup v2: Khi Docker đời cũ không hiểu Fedora

Fedora tiên phong dùng cgroup v2 từ bản 31. Trước đây, Docker đời cũ thường báo lỗi failed to create shim task vì không tương thích chuẩn này. Các bản Docker CE mới (20.10 trở đi) đã hỗ trợ tốt cgroup v2, nên bạn không cần phải hạ cấp xuống v1 như các tutorial cũ trên mạng hướng dẫn nữa.

2. Container không có mạng (Lỗi do Firewalld)

Đây là lỗi kinh điển: Container bật lên được nhưng không thể apt update hoặc ping ra ngoài. Nguyên nhân do firewalld chặn các kết nối từ bridge của Docker. Để xử lý, bạn hãy thêm Docker vào zone tin cậy:

# Cho phép Docker masquerade để ra internet
sudo firewall-cmd --permanent --zone=public --add-masquerade
sudo firewall-cmd --reload
sudo systemctl restart docker

Sau khi reload, hãy thử docker run --rm alpine ping google.com để xác nhận mạng đã thông.

Chạy song song Docker và Podman: Những lưu ý sống còn

Bạn hoàn toàn có thể cài cả hai, nhưng đừng để chúng “đánh nhau”. Dưới đây là 3 quy tắc mình rút ra:

  • Kho Image riêng biệt: Image của Docker nằm ở /var/lib/docker, còn Podman lưu ở chỗ khác. Bạn pull ở bên này thì bên kia sẽ không thấy.
  • Xung đột Port: Nếu Podman đã chiếm port 80 cho Nginx, Docker sẽ báo lỗi Bind for 0.0.0.0:80 failed. Hãy nhớ check podman ps trước khi chạy Docker.
  • Tránh dùng Alias: Tuyệt đối không cài podman-docker. Nó sẽ ghi đè lệnh docker và khiến bạn cực kỳ rối não khi debug lỗi hệ thống.

Mẹo check “hàng thật”:

which docker
# Kết quả chuẩn phải là /usr/bin/docker. Nếu trỏ về /usr/bin/podman là bạn đang dùng "hàng fake".

Tips tối ưu cho anh em Developer

Sử dụng Docker Compose V2 mới nhất

Bỏ qua bản docker-compose cũ kỹ viết bằng Python đi. Với docker-compose-plugin đã cài ở trên, bạn dùng cú pháp mới: docker compose up -d (không có dấu gạch ngang). Tốc độ build và quản lý tài nguyên của bản V2 này vượt trội hơn hẳn.

Cấu hình Log để cứu vãn ổ cứng

Laptop dev thường có SSD giới hạn. Docker mặc định lưu log vô hạn, dùng lâu ngày có thể chiếm hàng chục GB. Hãy giới hạn nó bằng cách sửa file /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Sau đó restart lại: sudo systemctl restart docker. Bây giờ mỗi container chỉ chiếm tối đa 30MB log, cực kỳ gọn nhẹ.

Lời kết

Cài Docker trên Fedora không khó, quan trọng là bạn hiểu cách nó “sống chung” với Firewalld và SELinux. Đừng bao giờ tắt SELinux (setenforce 0) chỉ để chạy Docker. Thay vào đó, hãy dùng flag :Z khi mount volume để đảm bảo bảo mật đúng chuẩn Fedora.

Share: