ज़्यादा सुरक्षित Docker विकल्प ‘Podman’ की पड़ताल
(betterstack.com)- Podman Docker जैसा कंटेनर चलाने का अनुभव देता है, लेकिन daemon के बिना काम करता है, इसलिए security और audit trail के लिहाज़ से अलग पहचान रखता है
- Docker, Docker daemon-केंद्रित client-server आर्किटेक्चर का उपयोग करता है, जबकि Podman user session में सीधे कंटेनर बनाता है, इसलिए किस user ने चलाया इसकी ट्रैकिंग ज़्यादा स्पष्ट होती है
- OCI standard का पालन करने के कारण यह Docker Hub की
hello-world,caddy,wordpress,mysql:5.7जैसी images चला सकता है, और कई मामलों मेंdockerकमांड कोpodmanसे बदलकर इस्तेमाल किया जा सकता है - short image names में Docker की तरह Docker Hub को अपने-आप default नहीं माना जाता, इसलिए पूरा image name, alias, या
unqualified-search-registriesसेटिंग में से एक चाहिए - multi-container configuration को Podman Compose, pods, और Kubernetes manifest से संभाला जा सकता है, लेकिन Docker Swarm जैसी built-in production orchestration इसमें नहीं है, इसलिए Kubernetes जैसे external system का उपयोग करना पड़ता है
Podman और Docker जहाँ अलग होते हैं
- Podman एक open source container engine है, जिसका लक्ष्य Docker के मुकाबले ज़्यादा सुरक्षित और हल्का विकल्प देना है
- यह लगातार background में चलने वाले daemon के बिना containers चलाता है, और इसकी संरचना ऐसी है कि user खुद containers को सीधे manage करता है
- इसकी default security दिशा rootless containers, user namespaces, और kernel capabilities के अधिक सावधानीपूर्ण उपयोग पर केंद्रित है
- Docker images और command structure के साथ इसकी compatibility काफ़ी अच्छी है, इसलिए Docker का विकल्प खोज रहे developers और system administrators के लिए यह एक व्यावहारिक विकल्प बनता है
आर्किटेक्चर और audit trail
- Docker client-server model का उपयोग करता है, और container run request Docker client से Docker daemon तक भेजी जाती है
- container process, user session के child process नहीं बल्कि Docker daemon के child process बनते हैं
- जब Linux Audit system
auditdcontainer process events को detect करता है, तो audit user ID असली user ID की जगहunsetके रूप में दिख सकती है - इस संरचना में किसी malicious activity को किसी खास user से जोड़ना मुश्किल हो जाता है
- Podman daemonless architecture का उपयोग करता है
- हर container सीधे user login session के माध्यम से बनाया जाता है
- container process data, user information को बनाए रखता है
auditdयह सटीक रूप से detect और record कर सकता है कि किस user ID ने किसी खास container process को शुरू किया
- image के अनुसार Podman का container startup time, Docker से अधिकतम 50% तक तेज़ हो सकता है
container lifecycle management
- Podman में daemon नहीं होता, इसलिए container lifecycle management का तरीका Docker से अलग है
- Linux पर यह काफ़ी हद तक Systemd पर निर्भर करता है
--restart alwaysflag से तय किए गए containers की restart policy लागू करने के लिए यहpodman-restartनाम कीsystemdservice का उपयोग करता है- यह service system reboot के बाद तय containers को अपने-आप फिर से शुरू कर देती है
- यह running container से Systemd service files बनाने का command भी देता है
- container को
systemdmanagement के तहत रखने से start, stop, और monitoring आसान हो जाती है
- container को
- Docker ऐसे काम daemon के भीतर संभालता है
orchestration के विकल्प
- local development में Docker users आमतौर पर Docker Compose से multi-container applications को define और manage करते हैं
- Podman, Compose files को default रूप से support नहीं करता, लेकिन Podman Compose को compatible विकल्प के रूप में देता है
- यह आम तौर पर मौजूदा
docker-compose.ymlfiles के साथ काम करता है - Docker Compose से परिचित users अपनी existing Compose files का उपयोग जारी रख सकते हैं
- यह आम तौर पर मौजूदा
- Podman के native तरीके में pods का उपयोग किया जा सकता है
- यह Kubernetes से लिया गया concept है
- इससे कई containers को एक unit की तरह manage किया जा सकता है
- production deployment में Podman के पास Docker Swarm जैसा built-in orchestration tool नहीं है
- ऐसे में Kubernetes जैसे external orchestration systems विकल्प बनते हैं
- Kubernetes, Podman के साथ integrate हो सकता है, लेकिन सही तरह से काम कराने के लिए अतिरिक्त configuration और setup की ज़रूरत पड़ सकती है
default security
- container security में बड़ा जोखिम तब होता है जब container escape की वजह से host system compromise हो जाए
- Podman को Docker की तुलना में ज़्यादा मजबूत default security settings देने के लिए डिज़ाइन किया गया है
- rootless containers
- user namespaces
- seccomp profiles
- Docker में भी rootless containers, user namespaces, और seccomp profiles का उपयोग किया जा सकता है, लेकिन वे default रूप से enabled नहीं होते और अक्सर अतिरिक्त setup की ज़रूरत होती है
- Podman की default configuration, isolated user namespace के अंदर rootless containers चलाती है, जिससे संभावित escape का असर सीमित होता है
- Docker की default configuration container processes को
rootके रूप में चलाती है, इसलिए escape होने पर जोखिम ज़्यादा होता है - capability defaults भी अलग हैं
- Podman default रूप से 11 capabilities के साथ container शुरू करता है
- Docker ज़्यादा permissive default के साथ 14 capabilities का उपयोग करता है
- दोनों tools को मजबूत security configuration के साथ सेट किया जा सकता है, लेकिन Podman में उस स्तर तक पहुँचना आम तौर पर कम मेहनत मांगता है
feature comparison में दिखने वाले मुख्य अंतर
- Podman daemonless architecture और Systemd integration को support करता है
- यह containers को pods में group कर सकता है और Kubernetes YAML भी संभाल सकता है
- Docker, Docker Swarm को support करता है, जबकि Podman नहीं करता
- इसके अलावा अधिकतर features में दोनों को मोटे तौर पर बराबर माना जा सकता है
installation और runtime environment
- Podman, Docker की तरह प्रमुख operating systems पर चल सकता है
- macOS
- Windows
- प्रमुख Linux distributions
- महत्वपूर्ण अंतर यह है कि Linux पर यह native रूप से चलता है, लेकिन Windows और macOS पर virtual machine की ज़रूरत होती है
- उदाहरण Debian-आधारित Linux distributions जैसे Ubuntu, Mint, और Debian को मानकर दिए गए हैं
- latest Podman install करने के लिए अपेक्षाकृत नया distribution चाहिए
- लेख लिखे जाने के समय latest major Podman version
4.xथा - Ubuntu 22.04 LTS, Podman
3.xपर अटका हुआ है - उदाहरण Ubuntu 23.10 के आधार पर हैं
- लेख लिखे जाने के समय latest major Podman version
- installation के बाद example output
podman version 4.3.1दिखाता है, और यह पुष्टि करता है कि local machine परpodmancommand चलाई जा सकती है
Docker images चलाना और OCI compatibility
- Podman, Docker ecosystem tools से बनी
hello-worldimage चला सकता है - यह compatibility इसलिए संभव है क्योंकि Docker और Podman दोनों OCI(Open Container Initiative) standards का पालन करते हैं
- OCI image format specification और runtime specification को define करता है
- इससे अलग-अलग container runtimes के बीच interoperability संभव होती है
- Docker Hub की ज़्यादातर Docker images और containers, Podman में इस्तेमाल किए जा सकते हैं
- आप मौजूदा workloads को बिना बदलाव Podman पर ले जा सकते हैं या Docker Hub की image library का उपयोग कर सकते हैं
hello-worldoutput में “Hello from Docker!” दिखे, तब भी असल में execution Podman ही कर रहा होता है- Docker client या Docker daemon execution process में शामिल नहीं होते
short image names को संभालने का तरीका
- Docker में अगर पूरा image name न दिया जाए तो
docker.ioयानी Docker Hub को default registry माना जाता है - Podman short names के उपयोग को प्रोत्साहित नहीं करता और default registry अपने-आप नहीं मानता
hello-worldके लिएshortnames.confमें alias मौजूद है, इसलिए यहdocker.io/library/hello-worldके रूप में resolve हो जाता हैcaddyजैसी ऐसी image को short name से चलाने पर, जिसका alias नहीं है, यह error आती हैError: short-name "caddy" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
- इसे ठीक करने के तीन तरीके हैं
- पूरा image name इस्तेमाल करें, जैसे
docker.io/library/caddy registries.confमें[aliases]section जोड़कर"caddy"="docker.io/caddy"जैसा alias define करेंunqualified-search-registries=["docker.io"]सेट करें ताकि short names को Docker Hub में खोजा जा सके
- पूरा image name इस्तेमाल करें, जैसे
- user-specific settings को
$HOME/.config/containers/registries.confमें रखा जा सकता है- यह file
/etc/containers/registries.confसे higher priority रखती है - इसे root permission के बिना configure किया जा सकता है, इसलिए यह rootless approach के साथ बेहतर मेल खाती है
- यह file
- अगर Podman को Docker replacement की तरह इस्तेमाल करना है, तो लंबे समय में alias की तुलना में
unqualified-search-registriessetting ज़्यादा सुविधाजनक होती है
private registries का उपयोग
- Podman, Docker की तरह private registries का उपयोग कर सकता है
- Docker Hub account का उपयोग करने वाला example इस flow का पालन करता है
- Docker Hub में access token बनाना
- description को
Podman tutorialऔर permissions कोRead & Writeपर सेट करना - private repository बनाना
podman login docker.ioसे login करना
- अगर
docker.io,registries.confमें पहलाunqualified-search-registriesentry है तो इसे छोड़ा जा सकता है, लेकिन registry को explicitly बताना बेहतर practice है - अगर registry न दी जाए, तो
podman loginयह error देकर fail हो जाता हैError: no registries found in registries.conf, a registry must be provided
- login के बाद
hello-worldimage को private repository में push किया जा सकता है, फिर local public image हटाकर private repository image से container चलाया जा सकता है - valid login credentials न होने पर private image pull करते समय access denied और authentication required errors मिलती हैं
- private registry उपयोग में मुख्य दृश्य अंतर बस इतना है कि
dockerकी जगहpodmanलिखा जाता है, और Podman व्यापक रूप से उपयोग होने वाली private registries के साथ काम कर सकता है
Podman Compose से multi-container चलाना
- जब कई containers को एक unit की तरह चलाना हो, Podman कई विकल्प देता है
- Podman Compose
- pods
- Kubernetes manifests
- उदाहरण Podman Compose का उपयोग करके WordPress और MySQL चलाता है
- Podman Compose एक community-driven tool है, जो Compose specification को implement करता है और Podman के साथ integrate होता है
- यह Python 3 पर निर्भर करता है, और उदाहरण में इसे pipx से install किया गया है
- example installation output
podman-compose 1.0.6दिखाता है - उपयोग किया गया Podman version
4.3.1है
- example installation output
- अगर
pipx,$HOME/.local/binमें install होता है, तो संभव है कि वह path$PATHमें न होpipx ensurepathसे path जोड़ा जा सकता है- उसके बाद नया terminal खोलना या shell config file को फिर से load करना होगा
WordPress और MySQL example
- example में
.envfile में database user, password, और name define किए जाते हैं, औरdocker-compose.ymlसे WordPress और MySQL services configure की जाती हैं podman-compose up -dचलाने पर Podman Compose,docker-compose.ymlको parse करता हैwordpressservice को process करते समय- ज़रूरी external volume खोजा जाता है और न मिलने पर बनाया जाता है
- उपयुक्त network खोजा जाता है और न मिलने पर बनाया जाता है
wordpresscontainer चलाया जाता है- अगर local image मौजूद न हो, तो configured
docker.ioregistry सेwordpress:latestpull किया जाता है
dbservice को process करते समयpodman-tutorial_dbvolume बनाया जाता है- मौजूदा network की पुष्टि की जाती है
mysql:5.7container चलाया जाता है- अगर local image मौजूद न हो, तो Docker Hub से pull किया जाता है
- run होने के बाद
localhost:8080पर WordPress installation page देखा जा सकता है podman psoutput मेंwordpressऔरdbcontainers running दिखते हैंwordpressके लिए port mapping0.0.0.0:8080->80/tcpहोती हैdb,mysql:5.7image से चल रहा होता है
- image list में
docker.io/library/wordpress:latestऔरdocker.io/library/mysql:5.7दिखते हैं - network list में default
podmannetwork और Podman Compose द्वारा बनाया गयाpodman-tutorial_defaultnetwork दिखता हैpodman-tutorial_default,docker-compose.ymlमें define containers को उसी system के दूसरे containers से अलग रखने के लिए बनाया जाता है
- volume list में
podman-tutorial_dbऔरpodman-tutorial_wordpressदिखते हैं podman-compose downcontainers को stop और remove करता है, लेकिन network और volumes बने रहते हैं- volume हटाने के लिए
podman volume rmका उपयोग करें - network हटाने के लिए
podman network rmका उपयोग करें
- volume हटाने के लिए
- commands लगभग Docker और Docker Compose जैसी ही हैं, बस
dockerऔरdocker-composeकी जगहpodmanऔरpodman-composeलिखना होता है
किसे चुनें
- Podman, container workloads चलाने के लिए Docker का एक व्यावहारिक विकल्प है
- यह Docker के अधिकतर काम कर सकता है, और इसका फ़ायदा है कि इसे background daemon की ज़रूरत नहीं होती
- यह कुछ ऐसे features भी देता है जो Docker में नहीं हैं
- Kubernetes manifest files के साथ काम करना
- individual containers को pods में organize करना
- अगर आपको ज़्यादा हल्का और सुरक्षित container management solution चाहिए, तो Podman बेहतर विकल्प हो सकता है
- अगर आपकी प्राथमिकता मजबूत ecosystem और व्यापक community support है, तो Docker ज़्यादा उपयुक्त हो सकता है
- आगे और जानने के लिए Podman आधिकारिक वेबसाइट, documentation, और community देखी जा सकती है
1 टिप्पणियां
Hacker News की राय
मुझे वह समय अच्छा लगता था जब Podman systemd unit files को support करता था। क्योंकि सिर्फ containers ही नहीं, पूरे pod को भी systemd से auto-start और auto-update किया जा सकता था
लेकिन उन्होंने वह feature हटा दिया और Quadlet को push करना शुरू कर दिया। single container को unit file से किया जा सकता है, लेकिन pod के लिए Kubernetes cluster definition इस्तेमाल करनी पड़ती है
ऊपर से Docker के उलट, containers SELinux definitions का पालन करते हैं, इसलिए mapped directories तक access न हो पाने की वजह से कई बार परेशान हुआ
आखिर Podman चाहता क्या है, समझ नहीं आता। Kubernetes इस्तेमाल करें? logical paths map न करें और सब कुछ dedicated directories में बनाएं?
यह feature अब deprecated Podman feature इस्तेमाल नहीं करता, बल्कि unit files सीधे लिखता है, और व्यक्तिगत रूप से मुझे यह पुराने Podman तरीके से कहीं ज्यादा smooth लगा
feature enable करने के लिए
$ podman-compose systemd -a create-unitहै, और systemd unit register करने के लिए$ podman-compose systemd -a register,$ systemctl --user enable --now "podman-compose@$PROJECT_NAME"इस्तेमाल करते हैंupdates
$ podman-compose pullके बाद$ systemctl --user restart "podman-compose@$PROJECT_NAME"से handle होते हैं।$PROJECT_NAMEआम तौर पर directory का नाम होता हैअगर देखना चाहें, तो feature का source code यहां है: https://github.com/containers/podman-compose/blob/f6dbce3618...
मैं अभी भी podman 4.3.1 इस्तेमाल कर रहा हूं, लेकिन बाद के versions में इस तरीके के बंद होने की कोई वजह नहीं दिखती
और podman-generate-systemd जो systemd files बनाता था, वे आखिरकार
"podman start containername"चलाने जितनी ही चीज थीं, इसलिए उन्हें खुद लिखना भी आसान है। हालांकि docker-compose जैसी चीजों के उलट, container लगभग black box जैसा होता हैQuadlet का फायदा यह है कि container definition
.containerfile में declared होती है। पहले podman run command line को हाथ से systemd unit में लिखना पड़ता था; उस लिहाज से Quadlet बड़ा improvement है और docker-compose का विकल्प भी बन सकता है। बेशक इसके अपने pros और cons हैंहर बार जब
podman generate systemd [...]चलाने की कोशिश करता हूं, तो याद आ जाता है कि यह transition हुआ थायह अक्सर नहीं झेलना पड़ता, क्योंकि मैंने इसे ठीक-ठाक तरीके से handle करने वाला अपना Ansible role बना रखा है
फिर भी Podman के direction खो देने जैसा strong feeling आता है। जब unit file maintenance और relationship design वाली दिशा पहले ही अपना ली है, तो generator इस्तेमाल करने दें। Quadlet हो या यह कि वह बेहतर है—मुझे फर्क नहीं पड़ता
containers.confमें यह जोड़ दें:[containers] label=falseअगर Podman का default security level पसंद नहीं है, तो आम तौर पर उसे बंद करने का तरीका होता है
यह model बहुत intuitive था, लेकिन Docker Compose पर लागू करने के लिए काफी manual migration चाहिए था
इसलिए मैंने एक tool बनाया, जो Compose file को NixOS configuration में convert करके उसे native तरीके से interpret और manage करने देता है: https://github.com/aksiksi/compose2nix
Podman को Docker से ज्यादा prefer करने की निर्णायक वजह के तौर पर एक फायदा शायद ही कभी बताया जाता है: Docker network settings बिगाड़ देता है
Docker और KVM virtual machines को bridge के साथ साथ-साथ चलाने की कोशिश करना nightmare है, जबकि Podman default settings के साथ भी कहीं बेहतर fit बैठता है
VPN भी Docker की वजह से टूटे हैं या Docker को तोड़ चुके हैं। Podman की networking internally कैसे काम करती है, यह मुझे ठीक से नहीं पता, लेकिन कम से कम यह ऐसा design लगता है जो दूसरे कामों में बाधा न डाले। Docker के बारे में मैं यह बिल्कुल नहीं कह सकता
Dockerfile मुझे पूरा कचरा लगता है। existing languages काफी हैं; मुझे “बोर developer” द्वारा DSL या programming language फिर से बनाने से सच में चिढ़ है। खासकर YAML हो तो और भी, हालांकि इस case में ऐसा नहीं है, लेकिन Dockerfile एक बढ़िया example है कि ऐसी चीजें बंद क्यों होनी चाहिए
budके बिना Buildah देखें तो वजह साफ दिखती है। use case थोड़ा भी standard path से हटे, तो किसी irritating, अधकच्चे DSL के बजाय Bash, Fish या जो चाहें, इस्तेमाल कर सकते हैंऐसे खराब फैसले पूरे Docker ecosystem में फैले हैं। DCS और उसका हमेशा अधूरा alternative भी उदाहरण हैं। Cosign जैसे established signing protocol इस्तेमाल करने के बजाय, वे एक complex system बनाना चाहते थे जिसे automate करना मुश्किल है और खासकर key rotation मुश्किल है
अच्छा है कि Podman ज्यादा widely used हो रहा है। बहुत सारे tools यह मानकर बनाए गए हैं कि user
sudo dockergroup add करेगा, इसलिए वे ऐसे security-conscious Docker setup में टूट जाते हैं जहां root access यूं ही नहीं दी जातीप्रमाणित RHEL इंजीनियर के तौर पर Podman को मैं कई सालों से इस्तेमाल कर रहा हूँ
सच कहूँ तो निजी container उपयोग के लिए यह मुझे काफी पसंद है। लेकिन काम पर हम developers को अभी भी Docker ही देते हैं। अब तक developers को docker compose जैसी सरलता वाला कुछ देने का तरीका नहीं था
container images बनाते समय CI pipelines में buildah भी इस्तेमाल करते हैं, लेकिन developer end-user के नजरिए से docker compose अभी भी हावी है
https://www.techrepublic.com/article/how-to-fix-the-docker-a...
इस समस्या की वजह से मैं लगभग फँस ही गया था
Red Hat Docker का विकल्प बनाने में निवेश क्यों कर रहा है, यह अभी पूरी तरह समझ नहीं आता, लेकिन नतीजा मुझे सचमुच पसंद है
Podman Docker के लगभग सारे काम करता है, साथ ही इसमें pod जैसी अतिरिक्त सुविधाएँ हैं, या कई मामलों में तरीका ही बेहतर है, जैसे daemon-less कंटेनर बनाने की प्रक्रिया
आम डेवलपर के लिए सबसे बड़ी समस्या शायद Docker compose होगी, लेकिन अगर आप सरल compose file इस्तेमाल करते हैं, तो Docker compose spec के साथ compatible रहने की कोशिश करने वाली podman-compose script मौजूद है
docker-compose के backend के रूप में Podman इस्तेमाल करने का तरीका भी है [1]. कुल मिलाकर 2024 में Linux machine पर Docker इस्तेमाल करने की कोई वजह नहीं दिखती। macOS या Windows पर Podman कैसा है, यह ठीक से नहीं जानता
[1] https://www.redhat.com/sysadmin/podman-docker-compose
इसमें यह भी जोड़ दें कि Docker में पहले भी और अब भी security issues असामान्य रूप से ज्यादा हैं, और Docker-style containers और images डेवलपर्स के बीच बेहद व्यापक रूप से इस्तेमाल होते हैं, तो RHEL की value और approach से ज्यादा मेल खाने वाला अपना implementation बनाना लगभग मजबूरी था
उदाहरण के लिए Docker rootless चल सकता है, फिर भी अभी तक इसे default के रूप में इस्तेमाल नहीं करता। hardened environments में docker user group भी, और बिना group के चलाने का तरीका भी, सुरक्षा के लिहाज से कई use cases में स्वीकार करना मुश्किल है
शुरुआती Docker unprivileged containers को कम-से-कम isolation देने में भी बहुत सुस्त था, और समस्या पता चलने के बाद भी उसे ठीक करने में काफी समय लगा। firewall और network rules, तथा SELinux के साथ interaction का तरीका भी काफी problematic है। security को गंभीरता से लेने वाले dedicated Linux system admins वाली कंपनियों में Docker ban असामान्य नहीं है, इसकी यही वजह है
शुरुआत से ही सभी docs आक्रामक रूप से user-friendly न लगने वाले GUI install की ओर धकेलते हैं। boot पर भारी processes चलाता है, किसी वजह से cloud account signup मांगता है, और फिर यह भी टोकता है कि कथित open-source product को काम में इस्तेमाल नहीं करना चाहिए
“सिर्फ command-line Docker” install करने वाला unsupported विकल्प बेवजह complex था, और आखिरी बार जब कोशिश की थी तो अधिकांश WSL VMs default state में उसे support भी नहीं करती थीं
इसके उलट Podman में
winget install podmanही काफी है और वह परेशान नहीं करता। container चलाना हो तभी Podman VM start करता हूँ, और जरूरत न होने पर system पहले जैसा चलता रहता हैcompose file से कुछ चलाना हो तो podman-compose है। अजीब configurations शायद न संभाल पाए, लेकिन मेरे use case में यह अच्छा चला
Podman जो ठीक से नहीं कर पाता, वह बस VS Code integration जैसा है, लेकिन Windows पर Docker को चुपचाप सही चलाने की मेहनत VS Code के कुछ shortcuts खोने से कहीं ज्यादा परेशान करती है, इसलिए यह समस्या नहीं है
Windows पर containers के default solution के रूप में Podman की सलाह दूँगा। Docker इस्तेमाल करने की वजह बस यह हो सकती है कि कंपनी उसका खर्च दे रही हो, या complex compose setup हो; और ऐसे मामले में शायद Kubernetes पर जाने लायक हो
यह system को तोड़ने वाले काम करता है, rootless के साथ सालों तक जूझता रहा, और vendor lock-in को भी नज़रअंदाज़ नहीं किया जा सकता
Podman open है, standards का पालन करता है, और Kubernetes के साथ भी अच्छी तरह fit बैठता है। आसान container market में पहले आ जाने की वजह से ही डेवलपर्स ने Docker पर बेहिसाब मेहनत लगा दी
अगर Docker गायब हो जाता है, तो RedHat अपने enterprise agenda को और मजबूत हाथ से आगे बढ़ा सकेगा
Podman के फायदे भी हैं, लेकिन RedHat द्वारा Docker की हर चीज को replace करने की कोशिश में कुछ हिस्से अच्छे से execute नहीं हुए
container space में RedHat के approach का इतिहास देखें तो ऐसे कई projects पर समय और मेहनत बर्बाद हुई जिनमें वह contribute करके सुधार कर सकता था
RedHat ऐसी कंपनी नहीं है जिसका agenda customers के लिए सही काम करना हो, इसलिए बड़े picture में आप क्या चाहते हैं, इस पर सोचना चाहिए
macOS के लिए Podman की एकमात्र बड़ी कमी यह है कि containers से host network इस्तेमाल नहीं कर सकते। लेकिन containers से host network इस्तेमाल करना चाहने के मामले दुर्लभ हैं
हालांकि अगर आप container के अंदर network-related experiments करते हुए host जैसा ही hostname और IP address बनाए रखना चाहते हैं, तो इसे ध्यान में रखना चाहिए। फिर भी मैं इस limitation को workaround करके इस्तेमाल कर रहा हूँ
security-first approach और decisions अच्छे लगते हैं। default configuration से ही सुरक्षित होना, और docker compose के साथ भी काम करना, मुझे पसंद है
हालांकि अगर Podman काफी popular हो गया, तो सोचता हूँ कि क्या कभी commands और yml format में अपनी अलग राह पकड़ेगा। अभी यह Docker और Docker compose file format पर निर्भर tool जैसा दिखता है
काश Podman में Swarm का कोई विकल्प होता। अभी orchestration की कमी के कारण Kubernetes को crutch की तरह इस्तेमाल किया जा रहा है, ऐसा लगता है
security पर अच्छी तरह सोचने वाली team शायद छोटे scale पर containers को reasonable और simple तरीके से चलाने का तरीका बना सकती है, बिना default से ही unsafe Kubernetes को PhD की तरह गहराई से खंगाले। साथ ही Docker compose format के साथ compatibility भी बनाए रखी जा सकती है
मैं मानता/मानती हूँ कि rootless containers और अलग-थलग namespaces अहम security features हैं। लेकिन यह Docker rootless से भी संभव है और जटिल नहीं है। बस वैसे configure करना होता है
उपलब्ध सभी current best practices लागू करके Mastodon को docker rootless के साथ set up करने पर मैंने एक लेख लिखा था [1]
Docker इस्तेमाल करते रहने का फायदा यह है कि उसकी accessibility बेहतर है। community और blogs ज्यादा हैं, docker compose configurations व्यापक रूप से मिलते हैं, और आसपास इसे इस्तेमाल करना जानने वाले लोग भी ज्यादा हैं
अंत में Podman और Docker दोनों host के isolated namespace में processes चलाते हैं
[1]: https://du.nkel.dev/blog/2023-12-12_mastodon-docker-rootless...
कोई गलतफहमी न हो। Podman शानदार है और आजकल मैं Docker की जगह वही इस्तेमाल करता/करती हूँ, लेकिन शुरुआत में इसे Docker का सरल replacement समझकर इस्तेमाल करना शुरू किया और UID/GID mapping, SELinux policies, missing DNS settings वगैरह से काफी झटका लगा
समस्याएं ठीक करने के लिए
system migrateचलाया तो कई बार पूरी configuration बिगड़ गई। security ACLs, ID mapping और labels से जुड़ा इसका अपना अलग तंत्र हैhome folder के अंदर
chmod -Rचलाएं तो शायद सभी containers बंद हो सकते हैंनतीजे से संतुष्ट हूँ, लेकिन यह Docker जैसी “बस चल पड़ने वाली” solution से काफी दूर था। जब से मैंने इस्तेमाल शुरू किया है, तब से शायद यह काफी बेहतर हुआ होगा
मेरे हिसाब से यह Docker से आसान था। ऊपर बताई गई स्थिति की तुलना में लगता है अब सुधार हुआ है
बड़े परिप्रेक्ष्य में देखें तो Podman पुराने Linux जैसा जरूरी लगता है
भले ही इसे बहुत कम लोग इस्तेमाल करें, इसकी मौजूदगी ही उससे कहीं बड़े proprietary software भाई-बंधुओं को भयानक चीजें करने से रोकती है
यहां “पुराने Linux” कहने का मतलब यह नहीं कि Linux कम महत्वपूर्ण हो गया है, बल्कि इसलिए कि अब यह और भी ज्यादा जरूरी और central हो गया है