.## 1. Giới thiệu
- 1 2. Podman là gì?
- 2 3. Cài đặt Podman trên Ubuntu
- 3 4. Cơ bản về Dockerfile và Sử dụng với Podman
- 4 5. Ví dụ Thực tế: Tạo Container Dựa trên Ubuntu
- 5 6. Các Tính năng và Mẹo Hữu ích của Podman
- 6 7. Hướng Dẫn Di Chuyển: Từ Docker Sang Podman
- 7 8. Câu Hỏi Thường Gặp (FAQ)
- 7.1 Q1. Sự khác biệt chính giữa Podman và Docker là gì?
- 7.2 Q2. Sự khác biệt giữa Dockerfile và Containerfile là gì?
- 7.3 Q3. Docker Compose có thể được sử dụng với Podman không?
- 7.4 Q4. Podman có chạy ổn định trên Ubuntu không?
- 7.5 Q5. Có hạn chế nào khi sử dụng rootless mode không?
- 7.6 Q6. Podman có thể kéo các hình ảnh giống như từ Docker Hub không?
- 7.7 Q7. Podman có phù hợp cho môi trường sản xuất không?
Sự tiến hóa của công nghệ container và Tại sao nó quan trọng
Trong những năm gần đây, tầm quan trọng của công nghệ container đã tăng nhanh trong việc phát triển và vận hành ứng dụng. Đặc biệt, khả năng đảm bảo tính tái tạo bằng cách đồng bộ môi trường phát triển và sản xuất đã nhận được sự ủng hộ mạnh mẽ từ các kỹ sư.
Docker đã lâu là giải pháp chi phối trong lĩnh vực này, nhưng trong thời gian gần đây, Podman đã nổi lên như một lựa chọn mạnh mẽ. Podman cung cấp một CLI (Giao diện Dòng lệnh) gần như giống Docker đồng thời mang lại những lợi thế then chốt như kiến trúc không daemon, hoạt động nhẹ, và chạy không cần quyền root mà không yêu cầu đặc quyền quản trị.
Tại sao “Podman + Dockerfile + Ubuntu”?
Bài viết này giải thích cách vận hành container hiện đại trên Linux bằng cách kết hợp ba yếu tố thiết yếu: Podman, Dockerfile, và Ubuntu.
- Ubuntu là một bản phân phối Linux được sử dụng rộng rãi, phù hợp cho cả người mới bắt đầu và người dùng nâng cao,
- Dockerfile đóng vai trò như bản thiết kế để xây dựng các image container,
- Và Podman là công cụ thế hệ mới cho phép quản lý container linh hoạt và an toàn hơn.
Với nhận thức về bảo mật ngày càng tăng, việc sử dụng Podman với Dockerfile trên Ubuntu đã trở thành lựa chọn phổ biến cho cả các nhà phát triển cá nhân và môi trường doanh nghiệp.
Mục đích và Đối tượng Độc giả
Mục tiêu của bài viết là giải thích cẩn thận cách tạo Dockerfile và xây dựng các container thực tế bằng Podman trên Ubuntu.
Bài viết này hướng tới các độc giả như:
- Những người có kinh nghiệm với Docker và quan tâm đến Podman
- Người dùng Ubuntu muốn quản lý container một cách an toàn
- Các kỹ sư đang lên kế hoạch áp dụng công nghệ container trong công việc
- Người mới bắt đầu muốn thử viết Dockerfile và xây dựng image bằng Podman
Ngoài việc sử dụng cơ bản, bài viết còn đề cập đến các mẹo khắc phục sự cố, những khác biệt chính so với Docker, và các chiến lược di chuyển.
2. Podman là gì?
Tổng quan cơ bản về Podman
Podman (Pod Manager) là công cụ quản lý container thế hệ mới được phát triển bởi cộng đồng do Red Hat dẫn đầu. Giống như Docker, nó có thể xây dựng, chạy và quản lý các container tuân thủ OCI (Open Container Initiative), nhưng triết lý thiết kế và kiến trúc của nó khác biệt đáng kể.
Tính năng đáng chú ý nhất là Podman không cần daemon. Điều này cho phép hoạt động nhẹ và an toàn. Podman cũng hỗ trợ chế độ không root, cho phép người dùng thường xuyên quản lý container mà không cần nâng quyền. Tính tương thích CLI với Docker rất cao, giúp quá trình di chuyển trở nên đơn giản.
Các tính năng chính của Podman
Dưới đây là một số tính năng chính của Podman:
Kiến trúc không daemon
Podman không phụ thuộc vào một tiến trình daemon nền để quản lý container. Điều này cho phép sử dụng tài nguyên hiệu quả hơn mà không có các dịch vụ nền không cần thiết.
Hỗ trợ không root (người dùng không có đặc quyền)
Podman cho phép người dùng không phải quản trị viên khởi chạy và quản lý container. Điều này cải thiện đáng kể bảo mật trong môi trường đa người dùng hoặc máy chủ và giảm rủi ro bảo mật một cách đáng kể.
CLI tương thích Docker
Podman sử dụng cấu trúc lệnh gần như giống Docker. Ví dụ, các lệnh Docker sau hoạt động hầu như tương tự trong Podman:
podman build -t myimage .
podman run -it myimage bash
Do đó, người dùng Docker có thể di chuyển với ít khó khăn.
Chức năng Pod
Podman tích hợp khái niệm “Pod” của Kubernetes, cho phép nhiều container được quản lý như một đơn vị logic duy nhất. Điều này làm cho Podman tương thích cao với Kubernetes và cho phép chuyển đổi mượt mà từ phát triển cục bộ sang môi trường đám mây.
Tương thích với Ubuntu
Mặc dù Podman được áp dụng rộng rãi trong Fedora và các bản phân phối dựa trên RHEL, nó cũng chạy ổn định trên Ubuntu. Nó có thể được cài đặt từ các kho lưu trữ chính thức với cấu hình tương đối đơn giản. Kể từ Ubuntu 20.04 LTS, hỗ trợ gói đã được cải thiện đáng kể, giảm rào cản tham gia.
3. Cài đặt Podman trên Ubuntu
Trước khi bắt đầu: Điều kiện tiên quyết
Trước khi cài đặt Podman trên Ubuntu, hãy kiểm tra phiên bản Ubuntu của bạn trước. Podman được khuyến nghị chính thức cho Ubuntu 20.04 LTS trở lên. Trên các phiên bản cũ hơn, các gói cần thiết có thể không có sẵn trong các kho lưu trữ chính thức.
Bạn có thể kiểm tra phiên bản Ubuntu của mình bằng lệnh sau:
lsb_release -a
Việc cài đặt Podman yêu cầu quyền sudo. Ngay cả nếu bạn dự định sử dụng Podman ở chế độ rootless, quyền quản trị vẫn cần thiết trong quá trình cài đặt.
Cài đặt Podman từ Kho lưu trữ Chính thức của Ubuntu
Trên các phiên bản Ubuntu gần đây như 20.04 hoặc 22.04, Podman có thể được cài đặt dễ dàng bằng APT.
sudo apt update
sudo apt install -y podman
Sau khi cài đặt, xác minh rằng Podman đã được cài đặt đúng bằng cách kiểm tra phiên bản:
podman --version
Cài đặt Phiên bản Mới nhất Sử dụng PPA Chính thức
Phiên bản Podman được bao gồm trong kho lưu trữ mặc định của Ubuntu thường hơi lỗi thời. Nếu bạn muốn sử dụng các tính năng mới nhất, bạn có thể cài đặt Podman từ PPA chính thức.
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman
Phương pháp này cho phép bạn sử dụng các phiên bản Podman mới nhất tương đương với những phiên bản trên hệ thống Red Hat và Fedora.
Kiểm tra Chức năng Cơ bản của Podman
Sau khi cài đặt, thực hiện một bài kiểm tra đơn giản để xác nhận rằng Podman hoạt động đúng:
podman info
Lệnh này hiển thị cấu hình của Podman, phiên bản và các tính năng được hỗ trợ như chế độ rootless.
Bạn cũng có thể kiểm tra thực thi container bằng cách chạy một hình ảnh Alpine Linux chính thức:
podman run --rm -it alpine sh
Nếu shell khởi động thành công, Podman đang hoạt động đúng.
4. Cơ bản về Dockerfile và Sử dụng với Podman
Dockerfile là gì?
Một Dockerfile là một bản thiết kế được sử dụng để xây dựng hình ảnh container. Đó là một tệp văn bản định nghĩa các hướng dẫn như hình ảnh cơ sở để sử dụng, các gói nào để cài đặt và các tệp nào để sao chép.
Dựa trên tệp này, các công cụ container như Podman và Docker có thể tự động xây dựng một môi trường nhất quán.
Các hướng dẫn Dockerfile phổ biến bao gồm:
FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]
Ví dụ này cài đặt các gói trên hình ảnh cơ sở Ubuntu, sao chép một script và định nghĩa lệnh thực thi mặc định.
Sử dụng Dockerfile với Podman
Podman có thể xây dựng hình ảnh container từ Dockerfile theo cách tương tự như Docker.
1. Chuẩn bị Thư mục Dự án
Tạo cấu trúc thư mục sau:
project/
├── Dockerfile
└── app.sh
Tệp app.sh có thể chứa một script đơn giản:
#!/bin/bash
echo "Hello from Podman container!"
Làm cho script có thể thực thi:
chmod +x app.sh
2. Xây dựng Hình ảnh với Podman
Chạy lệnh sau trong thư mục chứa Dockerfile:
podman build -t mypodmanapp .
Điều này tạo ra một hình ảnh container có tên mypodmanapp.
3. Xác minh Hình ảnh Đã Xây dựng
Bạn có thể liệt kê các hình ảnh có sẵn với:
podman images
4. Chạy Container
Khởi động một container sử dụng hình ảnh đã xây dựng:
podman run --rm mypodmanapp
Nếu được cấu hình đúng, đầu ra Hello from Podman container! sẽ được hiển thị.
Dockerfile so với Containerfile
Trong Podman, các tệp sử dụng cú pháp Dockerfile cũng có thể được gọi là Containerfile. Tên gọi này phản ánh mong muốn sử dụng thuật ngữ độc lập với Docker.
Không có sự khác biệt chức năng giữa Dockerfile và Containerfile. Cả hai đều được Podman hỗ trợ đầy đủ.
podman build -f Containerfile -t myimage .
Bạn có thể chỉ định tên tệp một cách rõ ràng bằng tùy chọn -f.
5. Ví dụ Thực tế: Tạo Container Dựa trên Ubuntu
Tạo Dockerfile Dựa trên Ubuntu
Từ đây, chúng ta sẽ đi qua một ví dụ thực tế, từng bước về tạo Dockerfile dựa trên Ubuntu và xây dựng và chạy hình ảnh container bằng Podman.
Đầu tiên, tạo tệp Dockerfile đơn giản sau:
FROM ubuntu:22.04
RUN apt update && \
apt install -y curl && \
apt clean
COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh
CMD ["/usr/local/bin/hello.sh"]
Tệp Dockerfile này thực hiện các hành động sau:
- Sử dụng hình ảnh Ubuntu 22.04 chính thức làm cơ sở
- Cài đặt gói
curl - Sao chép
hello.shtừ máy chủ vào container - Đặt
hello.shlàm script thực thi mặc định
Tiếp theo, tạo một script shell đơn giản có tên hello.sh:
#!/bin/bash
echo "Hello, this output is from a Podman container!"
Cấp quyền thực thi cho script:
chmod +x hello.sh
Xây dựng Hình ảnh với Podman
Khi các tệp đã sẵn sàng, xây dựng hình ảnh bằng lệnh sau:
podman build -t ubuntu-hello .
Tùy chọn -t ubuntu-hello gán tên thẻ cho hình ảnh, và dấu chấm . ở cuối chỉ định thư mục chứa Dockerfile.
Nếu quá trình xây dựng hoàn tất thành công, hình ảnh sẽ được lưu trữ cục bộ.
podman images
Bạn có thể sử dụng lệnh này để xác minh rằng hình ảnh đã được tạo.
Chạy và Xác minh Hình ảnh Đã Xây dựng
Chạy một container từ hình ảnh mới xây dựng bằng lệnh sau:
podman run --rm ubuntu-hello
Đầu ra ví dụ:
Hello, this output is from a Podman container!
Tùy chọn --rm tự động xóa container sau khi thực thi, làm cho nó lý tưởng cho mục đích kiểm tra.
Tùy chọn: Chạy Container Tương tác
Nếu bạn muốn tương tác trực tiếp với container, bạn có thể khởi động nó với tùy chọn -it và khởi chạy Bash:
podman run -it ubuntu-hello bash
Điều này cho phép bạn sử dụng container như một môi trường phát triển dựa trên Ubuntu nhẹ.
6. Các Tính năng và Mẹo Hữu ích của Podman
Điểm mạnh của Podman: Linh hoạt và Bảo mật
Trong khi duy trì tính tương thích với Docker, Podman cung cấp các tính năng cho phép hoạt động container linh hoạt và bảo mật hơn. Phần này giới thiệu các tính năng và mẹo thực tế đặc biệt hữu ích trong quy trình làm việc hàng ngày.
Hoạt động Bảo mật với Chế độ Rootless
Một trong những tính năng mạnh mẽ nhất của Podman là chế độ rootless, cho phép người dùng thông thường khởi động, dừng và quản lý container mà không cần quyền quản trị.
Bạn có thể chạy container mà không cần sudo như được hiển thị dưới đây:
podman run -it ubuntu bash
Vì hoạt động này bị giới hạn trong thư mục home của người dùng, tác động toàn hệ thống được giảm thiểu. Chế độ rootless đặc biệt hữu ích trong các máy chủ chia sẻ và môi trường phát triển.
Khởi động Tự động với Tích hợp systemd
Podman hỗ trợ tích hợp gốc với systemd, cho phép container chạy tự động như các dịch vụ Linux.
Bạn có thể tạo đơn vị dịch vụ systemd cho một container bằng lệnh sau:
podman generate systemd --name mycontainer --files --restart-policy=always
Lệnh này tạo các tệp đơn vị dưới ~/.config/systemd/user/. Sau khi tạo, kích hoạt và khởi động dịch vụ như sau:
systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service
Cấu hình này đảm bảo rằng các container tự động khởi động khi hệ thống khởi động.
Quản lý Nhiều Container với podman-compose
Ngoài việc quản lý các container đơn lẻ, Podman hỗ trợ sắp xếp đa container. Bằng cách sử dụng podman-compose, bạn có thể đạt được chức năng tương tự như Docker Compose.
Cài đặt podman-compose bằng pip:
pip install podman-compose
Vì nó tương thích lớn với các tệp docker-compose.yml, bạn thường có thể tái sử dụng các cấu hình hiện có.
Việc khởi động dịch vụ đơn giản như chạy:
podman-compose up -d
Điều này cho phép bạn tái tạo môi trường phát triển hoàn chỉnh ngay lập tức ngay cả khi sử dụng Podman.
Các Lệnh và Mẹo Hữu Ích Thêm
Dọn Dẹp Các Hình Ảnh và Container Không Sử Dụng
podman system prune -a
Lệnh này loại bỏ các container không sử dụng, hình ảnh và tệp tạm thời, giúp giữ cho bộ lưu trữ của bạn sạch sẽ.
Kích Hoạt Hoàn Thành Lệnh (bash/zsh)
Bạn có thể cài đặt hỗ trợ hoàn thành lệnh với gói sau:
sudo apt install podman-docker
Điều này kích hoạt hoàn thành lệnh giống như Docker cho Podman, cải thiện năng suất.
7. Hướng Dẫn Di Chuyển: Từ Docker Sang Podman
Tại Sao Việc Di Chuyển Sang Podman Đang Thu Hút Chú Ý
Docker từ lâu đã đồng nghĩa với công nghệ container, nhưng trong những năm gần đây, sự chuyển dịch sang Podman như một lựa chọn thay thế nhẹ hơn và an toàn hơn đã tăng tốc. Đặc biệt, Red Hat Enterprise Linux (RHEL) và Fedora đã giảm hỗ trợ Docker và áp dụng Podman làm công cụ container mặc định, thúc đẩy nhiều tổ chức xem xét di chuyển.
Phần này giải thích các bước thực tế và các cân nhắc quan trọng để di chuyển mượt mà từ Docker sang Podman.
Tương Thích Lệnh Giữa Docker và Podman
Podman duy trì mức độ tương thích CLI cao với Docker, cho phép hầu hết các lệnh được thay thế trực tiếp mà không cần sửa đổi.
| Docker | Podman |
|---|---|
docker build -t myapp . | podman build -t myapp . |
docker run -it myapp | podman run -it myapp |
docker images | podman images |
docker ps | podman ps |
Điều này làm cho việc chuyển sang Podman mà không thay đổi quy trình làm việc của bạn trở nên khả thi, đây là một trong những lợi thế lớn nhất của nó.
Đạt Được Tương Thích Đầy Đủ Với podman-docker
Nếu các script hiện có, đường ống CI/CD hoặc công cụ giả định sự hiện diện của lệnh docker, bạn có thể cài đặt gói podman-docker để làm cho Podman hoạt động như một thay thế drop-in.
sudo apt install podman-docker
Sau khi cài đặt, lệnh docker trở thành một liên kết tượng trưng đến Podman:
which docker
# → /usr/bin/docker → symbolic link to podman
Điều này cho phép các script dựa trên Docker hiện có chạy trên Podman mà không cần sửa đổi.
Thay Thế docker-compose Bằng podman-compose
Đối với các dự án sử dụng Docker Compose để định nghĩa môi trường đa container, podman-compose cung cấp một lựa chọn thay thế tương thích.
Mặc dù tính tương thích nói chung cao, hãy lưu ý các hạn chế sau:
- Một số tùy chọn Compose (như
depends_on) có thể không được hỗ trợ hoặc hoạt động khác nhau - Có thể có sự khác biệt trong ghi nhật ký sự kiện và hành vi kiểm tra sức khỏe
Đối với các cấu hình điển hình như kết hợp máy chủ web và cơ sở dữ liệu, việc di chuyển thường đơn giản.
Di Chuyển Hình Ảnh và Khối Lượng
Các hình ảnh Docker lưu trữ cục bộ không thể được truy cập trực tiếp bởi Podman. Bạn phải kéo lại chúng hoặc xuất và nhập chúng.
Tùy Chọn 1: Kéo Lại Hình Ảnh Với Podman
podman pull ubuntu:22.04
Tùy Chọn 2: Xuất Từ Docker Và Nhập Vào Podman
# Export from Docker
docker save myimage > myimage.tar
# Import into Podman
podman load < myimage.tar
Điều này cho phép các hình ảnh được xây dựng bởi Docker được tái sử dụng trong Podman.
Các Cân Nhắc Di Chuyển Thêm
- Sự khác biệt hoạt động không root : Docker thường giả định sử dụng root, trong khi Podman được thiết kế cho hoạt động không root
- Kiến trúc daemon : Podman không có daemon, thay đổi cách quản lý các quy trình nền
- Vị trí lưu trữ nhật ký và dữ liệu khác nhau và nên được xem xét trong quá trình di chuyển
8. Câu Hỏi Thường Gặp (FAQ)
Q1. Sự khác biệt chính giữa Podman và Docker là gì?
A1. Sự khác biệt đáng kể nhất là Podman hoạt động mà không cần daemon. Điều này cho phép hoạt động nhẹ hơn và an toàn hơn. Podman cũng hỗ trợ rootless mode, cho phép quản lý container mà không cần nâng cao quyền. Tương thích CLI với Docker rất cao.
Q2. Sự khác biệt giữa Dockerfile và Containerfile là gì?
A2. Không có sự khác biệt chức năng nào cả. Cả hai file đều mô tả hướng dẫn xây dựng container sử dụng cú pháp giống hệt nhau.
Tên Containerfile được ưu tiên trong các dự án tuân thủ OCI để tránh thuật ngữ cụ thể của Docker. Trong thực tế, Dockerfile hoạt động hoàn hảo với Podman.
Q3. Docker Compose có thể được sử dụng với Podman không?
A3. Docker Compose không được hỗ trợ trực tiếp, nhưng bạn có thể sử dụng podman-compose như một lựa chọn thay thế. Nó diễn giải các file docker-compose.yml trong môi trường Podman.
Một số tùy chọn như depends_on bị hạn chế, vì vậy khuyến nghị kiểm tra cho các thiết lập phức tạp.
Q4. Podman có chạy ổn định trên Ubuntu không?
A4. Có. Podman chạy ổn định trên Ubuntu 20.04 LTS và các phiên bản sau. Nó có sẵn trong kho lưu trữ chính thức của Ubuntu và có thể được cài đặt dễ dàng bằng apt. Đối với các phiên bản mới hơn, sử dụng PPA cũng là một lựa chọn.
Q5. Có hạn chế nào khi sử dụng rootless mode không?
A5. Chế độ rootless hạn chế một số hoạt động đặc quyền và liên kết với các cổng dưới 1024. Tuy nhiên, những hạn chế này thường có thể được vượt qua bằng cách chuyển tiếp cổng. Đối với hầu hết các trường hợp sử dụng, chế độ rootless hoàn toàn thực tế.
Q6. Podman có thể kéo các hình ảnh giống như từ Docker Hub không?
A6. Có. Podman có thể kéo hình ảnh từ Docker Hub theo mặc định. Trong một số môi trường, bạn có thể cần chỉ định rõ ràng registry và namespace:
podman pull docker.io/library/ubuntu
Podman cũng hỗ trợ các registry khác như Quay.io và GitHub Container Registry.
Q7. Podman có phù hợp cho môi trường sản xuất không?
A7. Có. Podman bao gồm các tính năng cần thiết cho sử dụng sản xuất, chẳng hạn như khái niệm pod tương thích với Kubernetes và tích hợp systemd. Trong các môi trường nhạy cảm về bảo mật, Podman có thể là lựa chọn tốt hơn Docker.
Podman đã là công cụ container mặc định trong RHEL và Fedora và có sự áp dụng rộng rãi trong sản xuất.



