Khám phá Podman, giải pháp thay thế Docker được tăng cường bảo mật
(betterstack.com)- Podman cung cấp trải nghiệm chạy container tương tự Docker, nhưng khác biệt ở chỗ hoạt động không cần daemon, giúp tốt hơn về bảo mật và truy vết kiểm toán
- Docker dùng kiến trúc client-server xoay quanh Docker daemon, còn Podman tạo container trực tiếp trong phiên người dùng, nên việc truy vết người dùng thực thi rõ ràng hơn
- Vì tuân theo chuẩn OCI, Podman có thể chạy các image như
hello-world,caddy,wordpress,mysql:5.7trên Docker Hub; trong nhiều trường hợp có thể thay lệnhdockerbằngpodman - Tên image rút gọn không tự động mặc định là Docker Hub như Docker, nên cần một trong các cách: tên image đầy đủ, alias, hoặc cấu hình
unqualified-search-registries - Cấu hình nhiều container có thể được xử lý bằng Podman Compose, pods, hoặc Kubernetes manifest, nhưng Podman không có orchestration tích hợp cho production như Docker Swarm, nên cần dùng hệ thống bên ngoài như Kubernetes
Điểm khác biệt giữa Podman và Docker
- Podman là một container engine mã nguồn mở hướng tới mục tiêu trở thành lựa chọn thay thế an toàn và nhẹ hơn Docker
- Podman chạy container mà không cần daemon thường trực, với cấu trúc trong đó người dùng trực tiếp quản lý container
- Định hướng bảo mật mặc định tập trung vào rootless container, user namespace và việc sử dụng capability của kernel một cách thận trọng hơn
- Khả năng tương thích cao với Docker image và hệ lệnh của Docker khiến Podman trở thành lựa chọn thực tế cho nhà phát triển và quản trị viên hệ thống đang tìm giải pháp thay thế Docker
Kiến trúc và truy vết kiểm toán
- Docker sử dụng mô hình client-server, trong đó yêu cầu chạy container được chuyển từ Docker client đến Docker daemon
- Tiến trình container trở thành tiến trình con của Docker daemon, không phải của phiên người dùng
- Khi hệ thống Linux Audit là
auditdphát hiện sự kiện từ tiến trình container, audit user ID có thể hiển thị làunsetthay vì ID người dùng thực tế - Với cấu trúc này, rất khó liên kết hoạt động độc hại với một người dùng cụ thể
- Podman sử dụng kiến trúc không daemon
- Mỗi container được tạo trực tiếp thông qua phiên đăng nhập của người dùng
- Dữ liệu tiến trình container giữ lại thông tin người dùng
auditdcó thể phát hiện và ghi lại chính xác ID người dùng đã khởi chạy một tiến trình container cụ thể
- Tùy theo image, tốc độ khởi động container của Podman có thể nhanh hơn Docker tới 50%
Quản lý vòng đời container
- Vì Podman không có daemon, cách quản lý vòng đời container cũng khác Docker
- Trên Linux, Podman phụ thuộc nhiều vào Systemd
- Podman dùng một dịch vụ
systemdtên làpodman-restartđể áp dụng chính sách khởi động lại cho các container được chỉ định bằng cờ--restart always - Dịch vụ này tự động khởi động lại các container được chỉ định sau khi hệ thống reboot
- Podman dùng một dịch vụ
- Podman cũng cung cấp lệnh để tạo file dịch vụ Systemd từ container đang chạy
- Khi đặt container dưới sự quản lý của
systemd, việc khởi động, dừng và kiểm tra trở nên dễ dàng hơn
- Khi đặt container dưới sự quản lý của
- Docker xử lý các tác vụ này bên trong daemon
Các lựa chọn orchestration
- Trong phát triển cục bộ, người dùng Docker thường định nghĩa và quản lý ứng dụng nhiều container bằng Docker Compose
- Podman không hỗ trợ file Compose theo mặc định, nhưng cung cấp Podman Compose như một lựa chọn thay thế tương thích
- Nhìn chung, công cụ này hoạt động với các file
docker-compose.ymlhiện có - Người dùng đã quen Docker Compose có thể tiếp tục dùng các file Compose hiện tại
- Nhìn chung, công cụ này hoạt động với các file
- Theo cách native của Podman, có thể dùng pods
- Đây là khái niệm lấy từ Kubernetes
- Có thể quản lý nhiều container như một đơn vị duy nhất
- Trong triển khai production, Podman không có công cụ orchestration tích hợp như Docker Swarm
- Trong trường hợp này, hệ thống orchestration bên ngoài như Kubernetes là lựa chọn thay thế
- Kubernetes có thể tích hợp với Podman, nhưng có thể cần cấu hình và thiết lập bổ sung để hoạt động đúng
Giá trị bảo mật mặc định
- Một rủi ro lớn trong bảo mật container là tình huống container escape khiến hệ thống host bị xâm phạm
- Podman được thiết kế để cung cấp thiết lập bảo mật mặc định mạnh hơn Docker
- rootless container
- user namespace َ- seccomp profile
- Docker cũng có thể dùng rootless container, user namespace và seccomp profile, nhưng chúng không được bật mặc định và thường cần cấu hình bổ sung
- Cấu hình mặc định của Podman chạy rootless container trong user namespace được cô lập, giúp hạn chế tác động của các khả năng escape tiềm tàng
- Thiết lập mặc định của Docker chạy tiến trình container dưới quyền
root, dẫn tới rủi ro cao hơn nếu xảy ra escape - Giá trị mặc định về capability cũng khác nhau
- Podman mặc định khởi động container với 11 capability
- Docker dùng 14 capability với thiết lập mặc định thoáng hơn
- Cả hai công cụ đều có thể được cấu hình theo hướng bảo mật mạnh, nhưng Podman thường cần ít công sức hơn để đạt trạng thái đó
Những khác biệt nổi bật khi so sánh tính năng
- Podman hỗ trợ kiến trúc không daemon và tích hợp Systemd
- Có thể gom container thành pods và xử lý Kubernetes YAML
- Docker hỗ trợ Docker Swarm, còn Podman thì không
- Hầu hết các tính năng còn lại có thể xem là nhìn chung tương đương giữa hai bên
Cài đặt và môi trường chạy
- Podman có thể chạy trên các hệ điều hành chính giống Docker
- macOS
- Windows
- Các bản phân phối Linux phổ biến
- Khác biệt quan trọng là trên Linux, Podman chạy native, còn trên Windows và macOS thì cần máy ảo
- Ví dụ giả định dùng các bản phân phối Linux dựa trên Debian như Ubuntu, Mint, Debian
- Để cài Podman mới nhất, cần bản phân phối tương đối gần đây
- Tại thời điểm bài viết, phiên bản Podman chính mới nhất là
4.x - Ubuntu 22.04 LTS bị giới hạn ở Podman
3.x - Ví dụ dựa trên Ubuntu 23.10
- Tại thời điểm bài viết, phiên bản Podman chính mới nhất là
- Sau khi cài đặt, output ví dụ là
podman version 4.3.1, xác nhận có thể chạy lệnhpodmancục bộ
Chạy Docker image và khả năng tương thích OCI
- Podman có thể chạy image
hello-worldđược xây dựng bằng công cụ trong hệ sinh thái Docker - Khả năng tương thích này có được vì cả Docker và Podman đều tuân theo chuẩn OCI(Open Container Initiative)
- OCI định nghĩa đặc tả định dạng image và đặc tả runtime
- Cho phép các container runtime khác nhau tương tác với nhau
- Phần lớn Docker image và container trên Docker Hub có thể được dùng trong Podman
- Có thể chuyển workload hiện có sang Podman mà không cần chỉnh sửa, hoặc tận dụng thư viện image trên Docker Hub
- Ngay cả khi output của
hello-worldhiển thị “Hello from Docker!”, thực thể thực sự chạy vẫn là Podman- Docker client hay Docker daemon không tham gia vào quá trình chạy
Cách xử lý tên image rút gọn
- Nếu không chỉ định tên image đầy đủ, Docker dùng Docker Hub là
docker.iolàm registry mặc định - Podman không khuyến nghị dùng tên rút gọn và không tự động giả định registry mặc định
hello-worldcó alias trongshortnames.confnên được diễn giải thànhdocker.io/library/hello-world- Nếu chạy một image không có alias như
caddybằng tên rút gọn, lỗi sau sẽ xảy raError: short-name "caddy" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
- Có ba cách xử lý
- Dùng tên image đầy đủ, chỉ định rõ như
docker.io/library/caddy - Thêm section
[aliases]vàoregistries.confđể định nghĩa alias"caddy"="docker.io/caddy" - Thiết lập
unqualified-search-registries=["docker.io"]để tìm tên rút gọn trên Docker Hub
- Dùng tên image đầy đủ, chỉ định rõ như
- Cấu hình theo từng người dùng có thể đặt tại
$HOME/.config/containers/registries.conf- File này được ưu tiên hơn
/etc/containers/registries.conf - Có thể cấu hình mà không cần quyền root, phù hợp hơn với cách tiếp cận rootless
- File này được ưu tiên hơn
- Nếu dùng Podman như một giải pháp thay thế Docker, về lâu dài cấu hình
unqualified-search-registriessẽ tiện hơn alias
Sử dụng private registry
- Podman có thể dùng private registry giống Docker
- Ví dụ dùng tài khoản Docker Hub theo luồng sau
- Tạo access token trên Docker Hub
- Đặt mô tả là
Podman tutorial, quyền làRead & Write - Tạo private repository
- Đăng nhập bằng
podman login docker.io
- Nếu
docker.iolà mụcunqualified-search-registriesđầu tiên trongregistries.confthì có thể bỏ qua, nhưng việc chỉ định registry là thực hành tốt - Nếu không cung cấp registry,
podman loginsẽ thất bại với lỗi sauError: no registries found in registries.conf, a registry must be provided
- Sau khi đăng nhập, có thể push image
hello-worldlên private repository, xóa image public cục bộ, rồi chạy container từ image trong private repository - Nếu không có thông tin đăng nhập hợp lệ, khi pull private image sẽ xảy ra lỗi từ chối truy cập và yêu cầu xác thực
- Điểm khác biệt đáng chú ý khi dùng private registry là dùng tiền tố
podmanthay vìdocker; Podman có thể dùng cùng các private registry phổ biến
Chạy nhiều container bằng Podman Compose
- Khi cần chạy nhiều container như một đơn vị, Podman cung cấp nhiều lựa chọn
- Podman Compose
- pods
- Kubernetes manifests
- Ví dụ dùng Podman Compose để chạy WordPress và MySQL
- Podman Compose là công cụ do cộng đồng dẫn dắt, triển khai Compose specification và tích hợp với Podman
- Công cụ này phụ thuộc vào Python 3; trong ví dụ được cài bằng pipx
- Output cài đặt ví dụ là
podman-compose 1.0.6 - Phiên bản Podman được dùng là
4.3.1
- Output cài đặt ví dụ là
- Nếu
pipxđược cài vào$HOME/.local/bin, đường dẫn đó có thể chưa nằm trong$PATH- Có thể thêm đường dẫn bằng
pipx ensurepath - Cần mở terminal mới hoặc đọc lại file cấu hình shell
- Có thể thêm đường dẫn bằng
Ví dụ WordPress và MySQL
- Ví dụ định nghĩa người dùng, mật khẩu và tên database trong file
.env, rồi cấu hình các service WordPress và MySQL bằngdocker-compose.yml - Khi chạy
podman-compose up -d, Podman Compose phân tíchdocker-compose.yml - Quá trình xử lý service
wordpress- Tìm external volume cần thiết và tạo nếu chưa có
- Tìm network phù hợp và tạo nếu chưa có
- Chạy container
wordpress - Nếu không có image cục bộ, kéo
wordpress:latesttừ registrydocker.iođã cấu hình
- Quá trình xử lý service
db- Tạo volume
podman-tutorial_db - Kiểm tra network hiện có
- Chạy container
mysql:5.7 - Nếu không có image cục bộ, kéo từ Docker Hub
- Tạo volume
- Sau khi chạy, có thể thấy trang cài đặt WordPress tại
localhost:8080 - Output của
podman pshiển thị containerwordpressvàdbđang chạywordpressđược map cổng dưới dạng0.0.0.0:8080->80/tcpdbchạy bằng imagemysql:5.7
- Danh sách image hiển thị
docker.io/library/wordpress:latestvàdocker.io/library/mysql:5.7 - Danh sách network hiển thị network
podmanmặc định và networkpodman-tutorial_defaultdo Podman Compose tạopodman-tutorial_defaultđược tạo để tách các container được định nghĩa trongdocker-compose.ymlkhỏi những container khác trên cùng hệ thống
- Danh sách volume hiển thị
podman-tutorial_dbvàpodman-tutorial_wordpress podman-compose downdừng và xóa container nhưng giữ lại network và volume- Dùng
podman volume rmđể xóa volume - Dùng
podman network rmđể xóa network
- Dùng
- Các lệnh gần như giống Docker và Docker Compose; khác biệt là gõ
podmanvàpodman-composethay chodockervàdocker-compose
Tiêu chí lựa chọn
- Podman là một lựa chọn thay thế thực tế cho Docker để chạy container workload
- Podman có thể thực hiện hầu hết những việc Docker làm được, với lợi thế không cần daemon chạy nền
- Podman cũng cung cấp các tính năng mà Docker không có
- Làm việc với file Kubernetes manifest
- Tổ chức từng container thành pods
- Nếu cần giải pháp quản lý container nhẹ hơn và an toàn hơn, Podman có thể là lựa chọn tốt hơn
- Nếu ưu tiên hệ sinh thái mạnh và hỗ trợ cộng đồng rộng, Docker có thể phù hợp hơn
- Có thể tham khảo thêm trang web chính thức của Podman, tài liệu, cộng đồng
1 bình luận
Ý kiến trên Hacker News
Tôi từng thích thời Podman hỗ trợ tệp unit systemd. Vì không chỉ container mà cả toàn bộ pod cũng có thể tự khởi động và tự cập nhật bằng systemd
Nhưng rồi họ bỏ tính năng đó và bắt đầu đẩy Quadlet. Container đơn lẻ thì có thể làm bằng tệp unit, nhưng pod thì phải dùng định nghĩa cụm Kubernetes
Hơn nữa, khác với Docker, container tuân theo định nghĩa SELinux, nên tôi đã nhiều lần khổ sở vì không truy cập được các thư mục đã ánh xạ
Rốt cuộc tôi không hiểu Podman muốn mình làm gì. Dùng Kubernetes à? Đừng ánh xạ các đường dẫn logic mà tạo toàn bộ thư mục chuyên dụng riêng à?
Tính năng này không dùng tính năng Podman đã bị loại bỏ nữa mà tự viết trực tiếp tệp unit, và cá nhân tôi thấy mượt hơn nhiều so với cách Podman cũ
Bật tính năng bằng
$ podman-compose systemd -a create-unit, còn đăng ký unit systemd bằng$ podman-compose systemd -a register,$ systemctl --user enable --now "podman-compose@$PROJECT_NAME"Việc cập nhật được xử lý bằng
$ podman-compose pullrồi$ systemctl --user restart "podman-compose@$PROJECT_NAME".$PROJECT_NAMEthường là tên thư mụcNếu muốn kiểm tra, mã nguồn của tính năng ở đây: https://github.com/containers/podman-compose/blob/f6dbce3618...
Tôi vẫn đang dùng podman 4.3.1, nhưng không thấy có lý do gì để cách này ngừng hoạt động ở các phiên bản sau
Và các tệp systemd mà podman-generate-systemd từng tạo ra rốt cuộc cũng chỉ chạy kiểu
"podman start containername", nên tự viết cũng dễ. Chỉ có điều, khác với những thứ như docker-compose, container gần như là hộp đenƯu điểm của Quadlet là định nghĩa container được khai báo trong tệp
.container. Trước đây người ta phải tự ghi dòng lệnh podman run vào unit systemd, nên ở khía cạnh đó Quadlet là một cải tiến lớn và cũng có thể là lựa chọn thay thế cho docker-compose. Tất nhiên vẫn có ưu nhược điểmMỗi lần định chạy
podman generate systemd [...], tôi lại nhớ ra đã có sự chuyển đổi nàyLý do tôi không gặp thường xuyên là vì tôi đã tự tạo một role Ansible xử lý việc này theo cách khá ổn
Dù vậy, cảm giác Podman đã lạc hướng khá rõ. Họ đã chấp nhận hướng bảo trì tệp unit và thiết kế quan hệ rồi, nên cứ để tôi dùng trình sinh là được. Tôi không quan tâm Quadlet hay chuyện nó tốt hơn
containers.conf:[containers] label=falseNếu không thích mức bảo mật mặc định của Podman, thường sẽ có cách để tắt nó
Mô hình này rất trực quan, nhưng để áp dụng cho Docker Compose thì cần chuyển đổi thủ công khá nhiều
Vì vậy tôi đã tạo một công cụ chuyển tệp Compose thành cấu hình NixOS để có thể diễn giải và quản lý theo kiểu native: https://github.com/aksiksi/compose2nix
Có một ưu điểm gần như không được nhắc tới như lý do quyết định để chọn Podman thay vì Docker: Docker làm hỏng cấu hình mạng
Cố chạy đồng thời Docker và máy ảo KVM cùng với bridge là một cơn ác mộng, còn Podman thì hòa hợp hơn nhiều ngay cả với cấu hình mặc định
VPN cũng nhiều lần bị Docker làm hỏng, hoặc ngược lại làm hỏng Docker. Tôi không rõ networking của Podman bên trong hoạt động thế nào, nhưng ít nhất nó có vẻ được thiết kế tốt để không cản trở các công việc khác. Với Docker thì tôi tuyệt đối không thể nói như vậy
Tôi xem Dockerfile là rác rưởi thuần túy. Ngôn ngữ có sẵn đã đủ rồi, tôi thật sự ghét việc “lập trình viên rảnh rỗi” lại tạo thêm DSL hay ngôn ngữ lập trình mới. Đặc biệt nếu là YAML thì càng vậy, dù trường hợp này không phải YAML, nhưng Dockerfile là một ví dụ tuyệt vời cho thấy vì sao nên dừng làm những chuyện như thế
Nhìn Buildah không có
budlà thấy lý do. Chỉ cần use case hơi lệch khỏi đường chuẩn là bạn có thể dùng Bash, Fish hay bất cứ thứ gì mình muốn, thay vì một DSL vụng về gây khó chịuNhững quyết định tệ như vậy lan ra toàn bộ hệ sinh thái Docker. DCS và các lựa chọn thay thế luôn dang dở của nó cũng là ví dụ. Thay vì dùng một giao thức ký đã được xác lập như Cosign, họ lại muốn tạo ra một hệ thống phức tạp, khó tự động hóa và đặc biệt khó xoay vòng khóa
Việc Podman được dùng rộng rãi hơn là điều đáng mừng. Quá nhiều công cụ được tạo ra với giả định rằng người dùng sẽ thêm nhóm
sudo docker, nên chúng bị lỗi trong cấu hình Docker có ý thức bảo mật, kiểu không cấp bừa quyền rootLà một kỹ sư RHEL được chứng nhận, tôi đã dùng Podman được vài năm rồi
Nói thật là với nhu cầu dùng container cá nhân thì tôi khá thích nó. Nhưng ở nơi làm việc, chúng tôi vẫn cung cấp Docker cho các lập trình viên. Cho đến nay vẫn chưa có cách nào cung cấp cho lập trình viên thứ gì sánh được với sự đơn giản của docker compose
Khi tạo image container, trong pipeline CI chúng tôi cũng dùng buildah, nhưng xét từ góc độ người dùng cuối là lập trình viên thì docker compose vẫn đang thống trị
https://www.techrepublic.com/article/how-to-fix-the-docker-a...
Tôi suýt nữa đã dính vì vấn đề này
Tôi vẫn chưa rõ vì sao Red Hat lại đầu tư vào việc tạo ra một giải pháp thay thế Docker, nhưng tôi thật sự thích kết quả
Podman làm được gần như mọi thứ Docker làm, đồng thời còn có thêm các tính năng như pod, hoặc trong nhiều trường hợp cách làm của nó tốt hơn, chẳng hạn quy trình tạo container không cần daemon
Vấn đề lớn nhất với lập trình viên thông thường có lẽ là Docker compose, nhưng nếu dùng file compose đơn giản thì có script podman-compose cố gắng tương thích với đặc tả Docker compose
Cũng có cách dùng Podman làm backend cho docker-compose [1]. Nhìn chung, trong năm 2024 tôi không thấy lý do gì phải dùng Docker trên máy Linux. Tôi không rõ Podman trên macOS hay Windows thì thế nào
[1] https://www.redhat.com/sysadmin/podman-docker-compose
Kết hợp với việc Docker trước đây cũng như hiện nay có rất nhiều vấn đề bảo mật một cách bất thường, trong khi container và image kiểu Docker lại được giới lập trình viên dùng cực kỳ rộng rãi, Red Hat gần như buộc phải tạo một triển khai riêng phù hợp hơn với giá trị và cách tiếp cận của RHEL
Ví dụ Docker có thể chạy rootless nhưng đến nay vẫn không dùng làm mặc định. Trong môi trường được gia cố bảo mật, cả nhóm người dùng docker lẫn cách chạy không cần nhóm đều khó được chấp nhận về mặt bảo mật trong nhiều trường hợp sử dụng
Docker thời kỳ đầu quá thiếu tích cực trong việc bảo đảm container không đặc quyền có được ít nhất mức cô lập tối thiểu, và ngay cả sau khi vấn đề đã được biết đến, họ cũng mất rất lâu để sửa. Cách nó tương tác với firewall, quy tắc mạng và SELinux cũng có nhiều vấn đề. Đây là lý do không hiếm công ty có quản trị viên hệ thống Linux chuyên trách coi trọng bảo mật cấm Docker
Ngay từ đầu, mọi tài liệu đều hướng người dùng một cách khá gắt sang trình cài đặt GUI không thân thiện. Nó khởi chạy các tiến trình nặng khi boot, vì lý do nào đó lại yêu cầu đăng ký tài khoản đám mây, rồi còn liên tục nhắc rằng không được dùng cái gọi là sản phẩm mã nguồn mở này cho công việc
Phương án không được hỗ trợ để cài “chỉ Docker dòng lệnh” thì phức tạp một cách không cần thiết, và lần cuối tôi thử, hầu hết VM WSL ở trạng thái mặc định cũng không hỗ trợ
Ngược lại, Podman chỉ cần
winget install podmanlà xong và không làm phiền. Chỉ khi cần chạy container tôi mới khởi động Podman VM, còn khi không cần thì hệ thống hoạt động như trướcNếu cần chạy thứ gì đó bằng file compose thì có podman-compose. Có thể nó không xử lý được các cấu hình lạ, nhưng với nhu cầu của tôi thì chạy tốt
Thứ Podman chưa làm tốt chỉ khoảng tích hợp VS Code, nhưng công sức để bắt Docker trên Windows chạy ngoan ngoãn còn khó chịu hơn nhiều so với việc mất vài phím tắt VS Code, nên không thành vấn đề
Tôi khuyên dùng Podman làm giải pháp container mặc định trên Windows. Lý do để dùng Docker chỉ là công ty trả phí cho bạn, hoặc bạn có cấu hình compose phức tạp; nếu vậy thì cũng có thể đáng cân nhắc chuyển sang Kubernetes
Nó làm những việc phá hệ thống, chật vật với rootless suốt nhiều năm, và cũng không thể bỏ qua khóa chặt nhà cung cấp
Podman mở, tuân theo chuẩn và cũng khớp tốt với Kubernetes. Chỉ vì ra mắt sớm hơn trong thị trường container dễ dùng mà các lập trình viên đã đổ công sức vào Docker nhiều đến mức vô lý
Nếu Docker biến mất, RedHat sẽ có thêm sức mạnh để áp đặt nghị trình doanh nghiệp của mình
Podman có ưu điểm, nhưng trong quá trình RedHat cố thay thế mọi thứ của Docker, cũng có những phần được thực hiện không tốt
Nhìn vào lịch sử cách RedHat tiếp cận lĩnh vực container, có khía cạnh là họ đã lãng phí thời gian và công sức vào nhiều dự án mà lẽ ra họ có thể đóng góp và cải thiện
RedHat không phải công ty có nghị trình làm điều đúng đắn cho khách hàng, nên cần nghĩ xem trong bức tranh lớn hơn mình mong muốn điều gì
Nhược điểm lớn duy nhất của Podman cho macOS là không thể dùng mạng của host từ container. Nhưng cũng hiếm khi người ta muốn dùng mạng host từ container
Tuy vậy, nếu bạn đang thử nghiệm liên quan đến mạng bên trong container và muốn giữ cùng hostname và địa chỉ IP như host thì cần lưu ý. Dù vậy tôi vẫn đang dùng bằng cách обход qua giới hạn này
Tôi thích cách tiếp cận ưu tiên bảo mật và các quyết định của họ. Tôi thích việc cấu hình mặc định đã an toàn và vẫn hoạt động với docker compose
Tuy nhiên, tôi tự hỏi liệu nếu Podman đủ phổ biến thì một ngày nào đó họ có đi theo hướng riêng về lệnh và định dạng yml hay không. Hiện giờ nó trông giống một công cụ dựa vào Docker và định dạng file Docker compose
Tôi mong Podman có một giải pháp thay thế Swarm. Hiện tại, do thiếu orchestration nên Kubernetes có cảm giác như đang bị dùng làm cái nạng
Với một đội ngũ suy xét kỹ về bảo mật, có lẽ họ có thể tạo ra một cách chạy container hợp lý và đơn giản ở quy mô nhỏ mà không cần đào sâu Kubernetes như làm luận án tiến sĩ, trong khi Kubernetes vốn không an toàn ngay từ mặc định. Đồng thời vẫn có thể duy trì tương thích với định dạng Docker compose
Đồng ý rằng container rootless và namespace được cô lập là những tính năng bảo mật quan trọng. Nhưng Docker rootless cũng làm được và không phức tạp. Chỉ cần cấu hình như vậy là được
Tôi từng viết một bài về cách thiết lập Mastodon bằng docker rootless, áp dụng tất cả các best practice hiện có [1]
Lợi thế của việc tiếp tục dùng Docker là tính dễ tiếp cận cao hơn. Có nhiều cộng đồng và blog hơn, cấu hình docker compose phổ biến rộng rãi, và xung quanh cũng có nhiều người biết dùng hơn
Rốt cuộc thì cả Podman lẫn Docker đều chạy tiến trình trong namespace được cô lập của host
[1]: https://du.nkel.dev/blog/2023-12-12_mastodon-docker-rootless...
Mong là đừng có hiểu lầm. Podman rất tuyệt và dạo này tôi dùng nó thay cho Docker, nhưng ban đầu tôi bắt đầu dùng vì nghĩ nó chỉ là một bản thay thế Docker đơn giản, rồi đã bị “dính đòn” nặng với ánh xạ UID/GID, policy SELinux, cấu hình DNS bị thiếu, v.v.
Cũng đã vài lần tôi chạy
system migrateđể sửa lỗi rồi làm hỏng toàn bộ cấu hình. Nó có cả một hệ thống riêng liên quan đến ACL bảo mật, ánh xạ ID và labelNếu chạy
chmod -Rdưới thư mục home thì có lẽ tất cả container có thể chết hếtTôi hài lòng với kết quả, nhưng nó còn xa mới là giải pháp “cứ chạy là được” như Docker. Có lẽ từ khi tôi bắt đầu dùng đến nay nó đã được cải thiện nhiều
Theo tôi thì nó dễ dùng hơn Docker. Có vẻ hiện giờ đã cải thiện so với những tình huống bạn gặp ở trên
Nhìn ở bức tranh lớn, Podman tạo cảm giác như một thứ thiết yếu giống Linux ngày xưa
Dù chỉ có rất ít người dùng, chỉ riêng sự tồn tại của nó cũng ngăn những người anh em phần mềm sở hữu độc quyền lớn hơn rất nhiều làm những điều tồi tệ
Ở đây khi nói “Linux ngày xưa” không có nghĩa là Linux đã kém quan trọng hơn, mà là vì hiện nay nó thậm chí còn thiết yếu và trung tâm hơn