podman-create(1) General Commands Manual podman-create(1)

podman-create - ایجاد یک کانتینر جدید بدون شروع اجرای آن

podman create [گزینه‌ها] ایمیج [دستور [آرگومان‌ها...]]

یک لایه کانتینر قابل نوشتن روی ایمیج مشخص‌شده ایجاد کرده و آن را برای اجرای دستور آماده می‌سازد. شناسه (ID) کانتینر در خروجی استاندارد چاپ می‌شود. این کار مشابه podman run -d است به جز اینکه کانتینر هرگز شروع به کار نمی‌کند. برای اجرای کانتینر بعداً می‌توانید از دستور podman start استفاده کنید.

افزودن یک نگاشت سفارشی میزبان به IP (به صورت host=ip یا host:ip).

افزودن یک خط به /etc/hosts. قالب به صورت hostname=ip یا hostname:ip است. گزینه --add-host می‌تواند چندین بار مشخص شود.

افزودن یادداشت (annotation) به کانتینر (منتقل‌شده به زمان اجرای OCI)

-a, --attach= اتصال به STDIN، STDOUT یا STDERR

تنظیم ARCH تصویر مورد نظر برای واکشی روی مقدار ارائه‌شده به جای استفاده از معماری میزبان. (نمونه‌ها: arm، arm64، 386، amd64، ppc64le، s390x)

متصل کردن ورودی استاندارد (stdin)، خروجی استاندارد (stdout) یا خطای استاندارد (stderr).

مسیر فایل احراز هویت. پیش‌فرض ${XDG_RUNTIME_DIR}/containers/auth.json است. برای اطلاعات بیشتر به containers-auth.json(5) مراجعه کنید. این فایل با استفاده از podman login ایجاد می‌شود.

اگر وضعیت مجوزدهی در آنجا یافت نشود، $HOME/.podman/config.json بررسی می‌شود که با استفاده از podman login تنظیم شده است.

نکته: همچنین می‌توانید مسیر پیش‌فرض فایل احراز هویت را با تنظیم متغیر محیطی REGISTRY_AUTH_FILE بازنویسی کنید. export REGISTRY_AUTH_FILE=path

ورودی/خروجی بلوکی (وزن نسبی)، بین 10 تا 1000، یا 0 برای غیرفعال‌سازی (پیش‌فرض 0)

وزن ورودی/خروجی بلوکی (وزن نسبی دستگاه)

افزودن قابلیت‌های لینوکس (Linux capabilities)

حذف قابلیت‌های لینوکس (Linux capabilities)

استفاده از گواهی‌ها در path (*.crt، *.cert، *.key) برای اتصال به رجیستری. دایرکتوری پیش‌فرض گواهی‌ها /etc/containers/certs.d است.

پیکربندی منابع cgroup v2 برای کانتینر.

گروه کنترلی (cgroup) والد اختیاری برای کانتینر

فضای نام cgroup مورد استفاده (host|private) 'host': اجرای کانتینر در فضای نام cgroup میزبان داکر 'private': اجرای کانتینر در فضای نام cgroup خصوصی خودش '': استفاده از فضای نام cgroup پیکربندی‌شده توسط گزینه default-cgroupns-mode در دیمن (پیش‌فرض)

تعیین نحوه مدیریت گروه کنترلی (cgroup) کانتینر (مانند enabled یا disabled یا no-conmon).

مسیر دایرکتوری‌های chroot روی سیستم میزبان برای استفاده در کانتینر.

نوشتن شناسه کانتینر درون فایل

مسیر فایل برای ثبت شناسه فرآیند (PID) مانیتور conmon.

محدود کردن دوره CFS (زمان‌بند کاملاً منصفانه) پردازنده

محدود کردن سهمیه CFS (زمان‌بند کاملاً منصفانه) پردازنده

محدود کردن دوره بی‌درنگ (real-time) پردازنده بر حسب میکروثانیه

محدود کردن زمان اجرای بی‌درنگ (real-time) پردازنده بر حسب میکروثانیه

-c, --cpu-shares=0 سهم پردازنده (وزن نسبی)

سهم‌های پردازنده (وزن نسبی)

به‌طور پیش‌فرض، همه کانتینرها سهم یکسانی از چرخه‌های پردازنده دریافت می‌کنند. این نسبت می‌تواند با تغییر وزن سهم پردازنده کانتینر نسبت به وزن سایر کانتینرهای در حال اجرا اصلاح شود.

برای تغییر نسبت از مقدار پیش‌فرض 1024، از پرچم --cpu-shares برای تنظیم وزن به 2 یا بالاتر استفاده کنید.

این نسبت تنها زمانی اعمال خواهد شد که فرایندهای با بار پردازشی بالا در حال اجرا باشند. هنگامی که وظایف در یک کانتینر بیکار هستند، کانتینرهای دیگر می‌توانند از زمان پردازنده باقی‌مانده استفاده کنند. مقدار واقعی زمان پردازنده بسته به تعداد کانتینرهای در حال اجرا روی سیستم متغیر خواهد بود.

به عنوان مثال، سه کانتینر را در نظر بگیرید که یکی دارای cpu-share معادل 1024 و دو کانتینر دیگر دارای تنظیم cpu-share برابر با 512 هستند. هنگامی که فرایندها در هر سه کانتینر تلاش می‌کنند از %100 پردازنده استفاده کنند، کانتینر اول %50 از کل زمان پردازنده را دریافت خواهد کرد. اگر کانتینر چهارمی با cpu-share معادل 1024 اضافه کنید، کانتینر اول تنها %33 از پردازنده را دریافت می‌کند. کانتینرهای باقی‌مانده %16.5، %16.5 و %33 از پردازنده را دریافت خواهند کرد.

روی یک سیستم چند‌هسته‌ای، سهم‌های زمان پردازنده میان تمام هسته‌های پردازنده توزیع می‌شود. حتی اگر یک کانتینر به کمتر از %100 زمان پردازنده محدود شده باشد، می‌تواند از %100 هر هسته پردازنده به صورت جداگانه استفاده کند.

به عنوان مثال، سیستمی با بیش از سه هسته را در نظر بگیرید. اگر یک کانتینر {C0} را با -c=512 در حال اجرای یک فرایند، و کانتینر دیگری {C1} را با -c=1024 در حال اجرای دو فرایند راه‌اندازی کنید، این کار می‌تواند منجر به تقسیم سهم‌های پردازنده به شکل زیر شود:

PID    container	CPU	CPU share
100    {C0}		0	100% of CPU0
101    {C1}		1	100% of CPU1
102    {C1}		2	100% of CPU2

تعداد پردازنده‌ها

پردازنده‌های مجاز برای اجرا (0-3, 0,1)

گره‌های حافظه مجاز برای اجرا (0-3, 0,1)

مقدار [username[:password]] برای استفاده در احراز هویت با رجیستری در صورت نیاز. اگر یک یا هر دو مقدار ارائه نشوند، یک اعلان در خط فرمان ظاهر می‌شود و مقدار می‌تواند وارد شود. گذرواژه بدون بازتاب وارد می‌شود.

مقدار [key[:passphrase]] برای استفاده در رمزگشایی تصاویر. کلید می‌تواند به کلیدها و/یا گواهی‌ها اشاره کند. رمزگشایی با تمام کلیدها امتحان خواهد شد. اگر کلید با یک عبارت عبور (passphrase) محافظت شده باشد، ارسال آن در آرگومان الزامی است و در غیر این صورت حذف می‌شود.

افزودن دستگاه میزبان به کانتینر

افزودن یک قانون به فهرست دستگاه‌های مجاز cgroup

محدود کردن نرخ خواندن (بایت در ثانیه) از یک دستگاه

محدود کردن نرخ خواندن (ورودی/خروجی در ثانیه) از یک دستگاه

محدود کردن نرخ نوشتن (بایت در ثانیه) روی یک دستگاه

محدود کردن نرخ نوشتن (ورودی/خروجی در ثانیه) روی یک دستگاه

این یک گزینه مخصوص داکر برای غیرفعال کردن اعتبارسنجی تصویر در یک رجیستری کانتینر است و توسط Podman پشتیبانی نمی‌شود. این فلگ یک دستور بی‌اثر (NOOP) است و صرفاً برای سازگاری اسکریپت‌ها ارائه شده است.

تنظیم کارسازهای DNS سفارشی

تنظیم گزینه‌های DNS

تنظیم دامنه‌های جستجوی DNS سفارشی

بازنویسی ENTRYPOINT پیش‌فرض ایمیج

-e, --env= تنظیم متغیرهای محیطی

افزودن یک مقدار (برای نمونه env=value) به تصویر ساخته‌شده. این گزینه می‌تواند چندین بار استفاده شود. اگر نه = و نه یک *value* تعیین نشده باشد، اما env در محیط فعلی تنظیم شده باشد، مقدار از محیط فعلی به تصویر اضافه خواهد شد. مقدار env می‌تواند توسط دستورالعمل‌های ENV در Containerfile بازنویسی شود. برای حذف یک متغیر محیطی از تصویر ساخته‌شده، از گزینه --unsetenv استفاده کنید.

خواندن فایلی از متغیرهای محیطی

استفاده از تمام متغیرهای محیطی سیستم میزبان درون کانتینر.

ادغام متغیرهای محیطی مشخص‌شده با متغیرهای محیطی موجود در تصویر کانتینر.

در دسترس قرار دادن (expose) یک درگاه یا محدوده‌ای از درگاه‌ها

نگاشت شناسه‌های گروه کاربری (GID) میزبان به کانتینر در حالت بدون ریشه (rootless).

دستگاه‌های پردازنده گرافیکی (GPU) جهت افزودن به کانتینر ('all' برای ارسال همه GPUها)

افزودن گروه‌های اضافی جهت عضویت

ورودی سفارشی برای فایل /etc/group درون کانتینر.

دستور جهت اجرا برای بررسی وضعیت سلامت

فاصله زمانی بین اجرای بررسی (ms|s|m|h) (پیش‌فرض 0s)

مقصد لاگ‌های بررسی سلامت کانتینر (مانند directory، local، none).

حداکثر تعداد رکوردهای لاگ بررسی سلامت که در حافظه ذخیره می‌شوند.

حداکثر اندازه فایل لاگ بررسی سلامت بر حسب بایت.

عملیاتی که در صورت ناموفق بودن بررسی سلامت انجام می‌شود (مانند none، kill، restart، stop).

تعداد شکست‌های پیاپی لازم برای گزارش ناسالم بودن

دوره راه‌اندازی کانتینر برای مقداردهی اولیه قبل از آغاز شمارش معکوس health-retries بر حسب (ms|s|m|h) (پیش‌فرض 0s)

دستور بررسی سلامت در زمان راه‌اندازی کانتینر.

فاصله زمانی بین بررسی‌های سلامت هنگام راه‌اندازی کانتینر.

تعداد تلاش‌های مجدد بررسی سلامت هنگام راه‌اندازی پیش از اعلام شکست.

تعداد دفعات موفقیت متوالی لازم برای گذر از فاز راه‌اندازی سلامت.

حداکثر زمان انتظار برای تکمیل دستور بررسی سلامت در فاز راه‌اندازی.

حداکثر زمان مجاز برای اجرای یک بررسی (ms|s|m|h) (پیش‌فرض 0s)

چاپ نحوه استفاده

-h, --hostname="" نام میزبان کانتینر

تنظیم نام میزبان (hostname) سفارشی برای کانتینر.

مسیر فایل سفارشی /etc/hosts برای سوار کردن درون کانتینر.

نام کاربری روی میزبان که کانتینر به نمایندگی از آن اجرا می‌شود.

به‌طور پیش‌فرض، در صورتی که متغیرهای محیطی پیشکار (proxy) برای فرایند Podman تنظیم شده باشند، به درون کانتینر منتقل می‌شوند. این رفتار را می‌توان با تنظیم گزینه --http-proxy روی false غیرفعال کرد. متغیرهای محیطی منتقل‌شده شامل http_proxy، https_proxy، ftp_proxy، no_proxy و همچنین نگارش‌های با حروف بزرگ آن‌ها هستند.

پیش‌فرض true است.

نحوه مدیریت حجم‌های تعریف‌شده در ایمیج (bind، tmpfs یا ignore).

اجرای یک فرایند init درون کانتینر جهت هدایت سیگنال‌ها و جمع‌آوری فرایندهای زامبی

-i, --interactive[=false] باز نگه داشتن STDIN حتی اگر متصل نباشد

تعیین نوع کانتینر به عنوان یک کانتینر اولیه (init container) برای یک پاد.

مسیر باینری اجرایی پردازش init کانتینر.

باز نگه داشتن ورودی استاندارد (stdin) حتی اگر کانتینر به ترمینال متصل نباشد.

آدرس IPv4 (مانند 172.30.100.104)

آدرس IPv6 (مانند 2001:db8::33)

حالت IPC مورد استفاده

افزودن یک برچسب تصویر label (برای نمونه label=value) به متاداده تصویر. این گزینه می‌تواند چندین بار استفاده شود. اگر نام label ذکر شود، اما نه = و نه یک value ارائه نشود، آنگاه label روی یک مقدار خالی تنظیم می‌شود.

کاربران می‌توانند یک LABEL ویژه به صورت io.containers.capabilities=CAP1,CAP2,CAP3 در یک Containerfile تنظیم کنند که فهرست قابلیت‌های (capabilities) لینوکس مورد نیاز برای اجرای درست کانتینر را مشخص می‌کند. این برچسب تعیین‌شده در تصویر کانتینر به موتورهای کانتینر، مانند Podman، که این برچسب را می‌شناسند می‌گوید تا کانتینر را فقط با همین قابلیت‌ها اجرا کنند. موتور کانتینر کانتینر را فقط با قابلیت‌های مشخص‌شده راه‌اندازی می‌کند، تا زمانی که این فهرست از قابلیت‌ها زیرمجموعه‌ای از فهرست پیش‌فرض باشد.

اگر قابلیت‌های مشخص‌شده در مجموعه پیش‌فرض نباشند، موتورهای کانتینر باید یک پیام خطا چاپ کنند و کانتینر را با قابلیت‌های پیش‌فرض اجرا خواهند کرد.

خواندن فایلی از برچسب‌ها که با خط جدا شده‌اند

آدرس‌های پیوند-محلی (link-local) مربوط به IPv4/IPv6 کانتینر

راه‌انداز ثبت وقایع (log driver) برای کانتینر

گزینه‌های راه‌انداز ثبت وقایع

آدرس MAC کانتینر (مانند 92:d0:c6:0a:29:33)

-m, --memory=0 محدودیت حافظه

محدودیت حافظه (قالب: []، که در آن واحد می‌تواند b، k، m یا g باشد)

به شما امکان می‌دهد حافظه در دسترس کانتینر را محدود کنید. اگر میزبان از حافظه swap پشتیبانی کند، تنظیم حافظه -m می‌تواند بزرگ‌تر از رم (RAM) فیزیکی باشد. اگر محدودیت 0 مشخص شود (عدم استفاده از -m)، حافظه کانتینر محدود نمی‌شود. محدودیت واقعی ممکن است به ضریبی از اندازه صفحه سیستم‌عامل گرد شود (این مقدار بسیار بزرگ خواهد بود، یعنی میلیون‌ها تریلیون).

محدودیت نرم حافظه

حد حافظه مبادله‌ای (swap) برابر با مجموع حافظه به‌علاوه swap؛ مقدار '-1' برای فعال کردن swap نامحدود

تنظیم میزان مبادله حافظه کانتینر (swappiness) از 0 تا 100

اتصال یک فایل‌سیستم به کانتینر

اختصاص یک نام به کانتینر

اتصال یک کانتینر به یک شبکه

افزودن نام مستعار در سطح شبکه برای کانتینر

غیرفعال کردن هرگونه HEALTHCHECK تعیین‌شده توسط کانتینر

فایل /etc/hostname را در کانتینر برای دستورالعمل‌های RUN ایجاد نمی‌کند.

به طور پیش‌فرض، Podman فایل /etc/hostname را مدیریت کرده و نام میزبان کانتینر را اضافه می‌کند. هنگامی که گزینه --no-hostname تنظیم شود، فایل /etc/hostname ایمیج (در صورت وجود) بدون تغییر حفظ خواهد شد.

فایل /etc/hosts را در کانتینر برای دستورالعمل‌های RUN ایجاد نمی‌کند.

به طور پیش‌فرض، Podman فایل /etc/hosts را مدیریت کرده و آدرس IP خود کانتینر را اضافه می‌کند. گزینه --no-hosts این مورد را غیرفعال می‌کند و فایل /etc/hosts ایمیج بدون تغییر حفظ خواهد شد. با گزینه --add-host تداخل دارد.

غیرفعال کردن کشنده کمبود حافظه (OOM Killer)

تنظیم اولویت‌های OOM میزبان (از -1000 تا 1000)

تنظیم سیستم‌عامل تصویری که باید واکشی شود روی مقدار ارائه‌شده، به جای استفاده از سیستم‌عامل کنونی میزبان.

ورودی سفارشی برای فایل /etc/passwd درون کانتینر.

تنظیم دامنه اجرای فراخوانی‌های سیستمی لینوکس (Linux Personality).

فضای نام PID مورد استفاده

نوشتن شناسه فرآیند (PID) کانتینر درون فایل مشخص‌شده.

تنظیم محدودیت تعداد شناسه‌های فرایند (pids) کانتینر (مقدار -1 برای نامحدود)

تنظیم پلتفرم در صورتی که کارساز قابلیت چندپلتفرمی داشته باشد

اجرای کانتینر درون یک پاد موجود یا ایجاد پاد جدید با پیشوند new:.

خواندن یا نوشتن شناسه پاد از یا به یک فایل.

اعطای دسترسی‌های گسترده به این کانتینر

-p, --publish= انتشار درگاه(های) کانتینر روی میزبان

-P, --publish-all[=false] انتشار تمامی درگاه‌های در دسترس به درگاه‌های تصادفی

انتشار یک پورت کانتینر یا دامنه‌ای از پورت‌ها به پورت‌های میزبان.

انتشار خودکار تمامی پورت‌های تعریف‌شده در ایمیج به پورت‌های تصادفی میزبان.

دریافت ایمیج پیش از ایجاد ("always"، "missing"، "never")

-q, --quiet[=false] بی‌صدا کردن خروجی دریافت ایمیج

در صورتی که نیاز به دریافت تصویر از مخزن باشد، از نمایش روند پیشرفت جلوگیری می‌کند.

کلاس فناوری توزیع منابع اینتل (Intel RDT) برای اختصاص پهنای باند و حافظه کش.

سوار کردن فایل‌سیستم ریشه کانتینر به‌صورت فقط‌خواندنی

سوار کردن سیستم‌فایل موقت tmpfs روی /tmp و /var/tmp در حالت فقط‌خواندنی.

در صورت وجود کانتینری با همین نام، به صورت خودکار آن را متوقف و جایگزین کند.

تعیین کانتینرهای پیش‌نیاز که پیش از این کانتینر باید ایجاد و اجرا شوند.

سیاست راه‌اندازی مجدد هنگام خروج کانتینر

تعداد دفعات تلاش مجدد در صورت بروز خطا هنگام دریافت تصاویر از مخزن.

مقدار پیش‌فرض 3 است.

مدت‌زمان تاخیر بین تلاش‌های مجدد در صورت بروز خطا هنگام دریافت تصاویر از مخزن.

مقدار پیش‌فرض 2s است.

حذف خودکار کانتینر و حجم‌های ناشناس وابسته به آن پس از خروج

استفاده از یک دایرکتوری سیستم‌فایل ریشه به جای ایمیج کانتینر.

تعیین حالت ارسال اعلان‌های systemd sd_notify (مانند container، conmon یا ignore).

خط‌مشی بارگذاری پروفایل seccomp (مانند default یا image).

ارسال اطلاعات محرمانه (سکرت / secret) برای استفاده در Containerfile جهت ساخت ایمیج‌ها به روشی امن که در نهایت در ایمیج نهایی ذخیره نشود یا در مراحل دیگر دیده نشود. مقدار سکرت از یک متغیر محیطی یا پرونده با نام ارائه‌شده توسط گزینه "id"، یا با نام تعیین‌شده توسط گزینه "src" (در صورت مشخص شدن)، یا از یک متغیر محیطی مشخص‌شده با گزینه "env" خوانده می‌شود. اطلاعات محرمانه (سکرت) به‌طور پیش‌فرض در مسیر /run/secrets/<id> در کانتینر متصل (mount) خواهد شد.

برای استفاده از سکرت در ادامه، از فلگ --mount در دستورالعمل RUN در داخل یک Containerfile استفاده کنید:

RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

محل قرارگیری سکرت در کانتینر را می‌توان با استفاده از گزینه‌های "target"، "dst" یا "destination" از فلگ RUN --mount بازنویسی کرد.

RUN --mount=type=secret,id=mysecret,target=/run/secrets/myothersecret cat /run/secrets/myothersecret

همچنین سکرت را می‌توان به‌صورت متغیر محیطی در اختیار فرایند قرار داد:

RUN --mount=type=secret,id=mysecret,env=FOO sh -c 'echo "Hello $FOO"'

نکته: تغییر محتوای پرونده‌های سکرت، موجب بازسازی مجدد لایه‌هایی که از سکرت‌های مذکور استفاده می‌کنند نخواهد شد.

گزینه‌های امنیتی

اندازه مسیر /dev/shm

اندازه سیستم‌فایل موقت /dev/shm در زمان فعال بودن حالت systemd.

سیگنال متوقف کردن کانتینر

مهلت زمانی (بر حسب ثانیه) برای متوقف کردن کانتینر

نام کاربری در /etc/subgid برای تخصیص شناسه‌های گروه کاربری در حالت بدون ریشه.

نام کاربری در /etc/subuid برای تخصیص شناسه‌های کاربری در حالت بدون ریشه.

گزینه‌های sysctl

اجرای کانتینر در حالت سازگار با systemd (مانند true، false یا always).

حداکثر زمان مجاز اجرای کانتینر پیش از ارسال سیگنال خاتمه به ثانیه.

الزام استفاده از HTTPS و اعتبارسنجی گواهی‌ها هنگام برقراری ارتباط با مخازن کانتینر (پیش‌فرض true است). هنگام برقراری ارتباط با یک مخزن ناامن نمی‌توان از اعتبارسنجی TLS استفاده کرد.

سوار کردن یک دایرکتوری tmpfs

-t, --tty[=false] تخصیص یک شبه-TTY

تخصیص یک شبه‌ترمینال (pseudo-TTY) به کانتینر.

تنظیم منطقه زمانی (Timezone) محلی درون کانتینر.

نگاشت شناسه‌های کاربری (UID) سیستم میزبان به کانتینر در حالت بدون ریشه.

گزینه‌های ulimit

تنظیم ماسک دسترسی ایجاد فایل (umask) درون کانتینر.

حذف متغیرهای محیطی از تصویر نهایی.

پاکسازی تمامی متغیرهای محیطی به ارث رسیده از ایمیج پایه.

تعیین نام کاربری یا شناسه کاربری (UID/GID) برای اجرای فرآیند کانتینر.

فضای نام کاربر مورد استفاده

فضای نام UTS مورد استفاده

-v, --volume= سوار کردن یک حجم به‌صورت bind mount

گونه (variant) معماری تصویری که باید دریافت شود را تنظیم می‌کند.

ایجاد یک اتصال پیوندی (bind mount). اگر مشخص کنید -v /HOST-DIR:/CONTAINER-DIR، ابزار Podman مسیر /HOST-DIR در میزبان را به /CONTAINER-DIR درون کانتینر Podman پیوند می‌زند. مقادیر OPTIONS فهرستی جداشده با کاما هستند و می‌توانند شامل موارد زیر باشند:

  • [rw|ro]
  • [U]
  • [z|Z|O]
  • [[r]shared|[r]slave|[r]private|[r]unbindable] [1] ⟨#Footnote1⟩

مسیر CONTAINER-DIR باید یک مسیر مطلق مانند /src/docs باشد. مسیر HOST-DIR نیز باید یک مسیر مطلق باشد. Podman مسیر HOST-DIR را به مسیری که مشخص می‌کنید bind-mount می‌کند. برای نمونه، اگر /foo را به‌عنوان مسیر میزبان بدهید، Podman محتویات /foo را در سیستم‌فایل کانتینر روی میزبان کپی کرده و آن را به درون کانتینر bind-mount می‌کند.

می‌توانید چندین گزینه -v را برای سوار کردن یک یا چند اتصال به یک کانتینر مشخص کنید.

اتصال‌های جلد حفاظت‌شده در برابر نوشتن (Write Protected Volume Mounts)

می‌توانید پسوند :ro یا :rw را به یک جلد اضافه کنید تا به ترتیب در حالت فقط‌خواندنی یا خواندنی-نوشتنی متصل شود. به‌طور پیش‌فرض، جلدها به‌صورت خواندنی-نوشتنی سوار می‌شوند. مثال‌ها را ببینید.

تغییر مالکیت اتصال‌های جلد (Chowning Volume Mounts)

به‌طور پیش‌فرض، Podman مالک و گروه دایرکتوری‌های جلد منبع متصل‌شده به کانتینرها را تغییر نمی‌دهد. اگر کانتینری در یک فضای‌نام کاربری (user namespace) جدید ایجاد شود، UID و GID درون کانتینر ممکن است با UID و GID متفاوتی روی میزبان متناظر باشند.

پسوند :U به Podman اعلام می‌کند تا بر پایه UID و GID درون کانتینر، از UID و GID درست میزبان استفاده کرده و مالک و گروه جلد منبع را تغییر دهد.

برچسب‌گذاری اتصال‌های جلد (Labeling Volume Mounts)

سامانه‌های برچسب‌گذاری مانند SELinux نیازمند قرارگیری برچسب‌های مناسب روی محتوای جلد متصل‌شده به کانتینر هستند. بدون برچسب، سامانه امنیتی ممکن است از استفاده فرایندهای در حال اجرا درون کانتینر از محتوا جلوگیری کند. به‌طور پیش‌فرض، Podman برچسب‌های تنظیم‌شده توسط سیستم‌عامل را تغییر نمی‌دهد.

برای تغییر یک برچسب در بستر کانتینر، می‌توانید یکی از دو پسوند :z یا :Z را به اتصال جلد اضافه کنید. این پسوندها به Podman می‌گویند که اشیای فایل روی جلدهای اشتراکی را دوباره برچسب‌گذاری کند. گزینه z به Podman می‌گوید که دو کانتینر محتوای جلد را به اشتراک می‌گذارند. در نتیجه، Podman محتوا را با یک برچسب محتوای مشترک برچسب‌گذاری می‌کند. برچسب‌های جلد مشترک به همه کانتینرها اجازه خواندن/نوشتن محتوا را می‌دهند. گزینه Z به Podman می‌گوید که محتوا را با یک برچسب خصوصی غیرمشترک برچسب‌گذاری کند. تنها کانتینر فعلی می‌تواند از یک جلد خصوصی استفاده کند.

اتصال‌های جلد اورلی (Overlay Volume Mounts)

پرچم :O به Podman اعلام می‌کند دایرکتوری را از میزبان با استفاده از سیستم‌فایل Overlay به‌عنوان یک فضای ذخیره‌سازی موقت سوار کند. کانتینرهای دستور RUN مجاز هستند محتویات درون نقطه اتصال را تغییر دهند و این تغییرات در فضای ذخیره‌سازی کانتینر در یک دایرکتوری جداگانه ذخیره می‌شوند. در اصطلاحات سامانه فایل Overlay، دایرکتوری منبع lower و دایرکتوری ذخیره‌سازی کانتینر upper خواهد بود. اصلاحات انجام‌شده در نقطه اتصال هنگام پایان اجرای دستور RUN از بین می‌روند، شبیه به یک نقطه اتصال tmpfs.

هر اجرای بعدی دستورهای RUN محتوای دایرکتوری منبع اصلی را می‌بیند؛ و هر تغییری از دستورات RUN قبلی دیگر وجود نخواهد داشت.

یک مورد استفاده از اتصال overlay، به اشتراک گذاشتن حافظه نهان بسته‌ها (package cache) از میزبان به درون کانتینر برای افزایش سرعت ساخت است.

نکته:

  • پرچم O مجاز نیست همراه با پرچم‌های Z یا z مشخص شود. محتوای متصل‌شده به درون کانتینر با برچسب خصوصی برچسب‌گذاری می‌شود. در سامانه‌های SELinux، برچسب‌های موجود در دایرکتوری منبع باید برای برچسب کانتینر قابل‌خواندن باشند. در غیر این صورت، تفکیک کانتینر SELinux باید غیرفعال شود تا کانتینر کار کند.
  • تغییر دایرکتوری جلدی که با یک اتصال overlay به درون کانتینر متصل شده است می‌تواند خطاهای غیرمنتظره به وجود آورد. توصیه می‌شود تا پایان اجرای کانتینر این دایرکتوری را تغییر ندهید.

به‌طور پیش‌فرض جلدهای bind-mount شده private هستند. بدین معنا که هرگونه اتصالی که درون کانتینر انجام شود روی میزبان قابل مشاهده نخواهد بود و برعکس. این رفتار را می‌توان با مشخص کردن ویژگی انتشار اتصال جلد تغییر داد.

هنگامی که خط‌مشی انتشار اتصال روی shared تنظیم شود، هرگونه اتصال انجام‌شده درون کانتینر روی آن جلد هم برای میزبان و هم کانتینر قابل مشاهده خواهد بود. هنگامی که خط‌مشی انتشار اتصال روی slave تنظیم شود، انتشار یک‌طرفه اتصال فعال شده و هرگونه اتصال انجام‌شده روی میزبان برای آن جلد تنها در داخل کانتینر قابل مشاهده خواهد بود. برای کنترل ویژگی انتشار اتصال جلد، از پرچم‌های انتشار :[r]shared، :[r]slave، [r]private یا [r]unbindable استفاده کنید. ویژگی انتشار را فقط می‌توان برای جلدهای bind-mount شده تعیین کرد و نه جلدهای داخلی یا جلدهای نام‌گذاری‌شده. برای کارکرد انتشار اتصال روی نقطه اتصال منبع (نقطه اتصالی که دایرکتوری منبع روی آن سوار شده است)، باید ویژگی‌های انتشار مناسب را داشته باشد. برای جلدهای shared، نقطه اتصال منبع باید shared باشد. و برای جلدهای slave، اتصال منبع باید shared یا slave باشد. [1] ⟨#Footnote1⟩

از دستور df <source-dir> برای تعیین اتصال منبع و سپس از دستور findmnt -o TARGET,PROPAGATION <source-mount-dir> برای تعیین ویژگی‌های انتشار اتصال منبع استفاده کنید؛ اگر ابزار findmnt در دسترس نیست، نقطه اتصال منبع را می‌توان با بررسی مدخل mount در فایل /proc/self/mountinfo مشخص کرد. optional fields را بررسی کنید و ببینید آیا ویژگی انتشاری مشخص شده است یا خیر. shared:X به معنای shared بودن اتصال است، master:X به معنای slave بودن اتصال است و اگر چیزی وجود نداشته باشد به این معناست که اتصال private است. [1] ⟨#Footnote1⟩

برای تغییر ویژگی‌های انتشار یک نقطه اتصال از دستور mount استفاده کنید. برای نمونه، برای bind-mount کردن دایرکتوری منبع /foo دستورهای mount --bind /foo /foo و mount --make-private --make-shared /foo را اجرا کنید. این کار /foo را به یک نقطه اتصال shared تبدیل می‌کند. ویژگی‌های انتشار نقطه اتصال منبع را می‌توان مستقیماً تغییر داد. برای نمونه اگر / نقطه اتصال منبع برای /foo باشد، دستور mount --make-shared / را برای تبدیل / به یک اتصال shared به کار ببرید.

podman from --pull imagename

podman from --pull podman://myregistry.example.com/imagename

podman from podman-daemon:imagename:imagetag

podman from --name mycontainer podman-archive:filename

podman from oci-archive:filename

podman from --name mycontainer dir:directoryname

podman from --pull-always --name "mycontainer" myregistry.example.com/imagename

podman from --tls-verify=false myregistry/myrepository/imagename:imagetag

podman from --creds=myusername:mypassword --cert-dir ~/auth myregistry/myrepository/imagename:imagetag

podman from --authfile=/tmp/auths/myauths.json myregistry/myrepository/imagename:imagetag

podman from --memory 40m --cpu-shares 2 --cpuset-cpus 0,2 --security-opt label=level:s0:c100,c200 myregistry/myrepository/imagename:imagetag

podman from --ulimit nofile=1024:1028 --cgroup-parent /path/to/cgroup/parent myregistry/myrepository/imagename:imagetag

podman from --volume /home/test:/myvol:ro,Z myregistry/myrepository/imagename:imagetag

podman from -v /home/test:/myvol:z,U myregistry/myrepository/imagename:imagetag

podman from -v /var/lib/yum:/var/lib/yum:O myregistry/myrepository/imagename:imagetag

podman from --arch=arm --variant v7 myregistry/myrepository/imagename:imagetag

BUILD_REGISTRY_SOURCES

متغیر BUILD_REGISTRY_SOURCES در صورت مقداردهی، به عنوان یک شیء JSON در نظر گرفته می‌شود که شامل فهرست‌هایی از نام‌های رجیستری ذیل کلیدهای insecureRegistries، blockedRegistries و allowedRegistries است.

هنگام دریافت (pull) تصویر از یک رجیستری، اگر نام رجیستری با هر یک از موارد موجود در فهرست blockedRegistries مطابقت داشته باشد، تلاش برای دریافت تصویر رد می‌شود. اگر در فهرست allowedRegistries رجیستری‌هایی وجود داشته باشند و نام رجیستری در فهرست نباشد، تلاش برای دریافت رد می‌شود.

TMPDIR متغیر محیطی TMPDIR به کاربر امکان می‌دهد محل ذخیره پرونده‌های موقت را هنگام دریافت و ارسال (pull و push) تصاویر مشخص کند. مقدار پیش‌فرض '/var/tmp' است.

registries.conf (/etc/containers/registries.conf)

پرونده registries.conf پرونده پیکربندی است که مشخص می‌کند هنگام تکمیل نام‌های تصاویری که فاقد بخش رجیستری یا دامنه هستند، باید به کدام رجیستری‌های کانتینر مراجعه شود.

policy.json (/etc/containers/policy.json)

پرونده سیاست امضا. این پرونده سیاست اعتماد را برای تصاویر کانتینر تعریف می‌کند. تعیین می‌کند کدام رجیستری‌های کانتینر می‌توانند برای تصاویر استفاده شوند و این‌که آیا ابزار باید به تصاویر اعتماد کند یا خیر.

podman(1), podman-pull(1), podman-login(1), podman-login(1), namespaces(7), pid_namespaces(7), containers-policy.json(5), containers-registries.conf(5), user_namespaces(7), containers.conf(5), containers-auth.json(5)

۱: پروژه Podman به فراگیری، از ارزش‌های بنیادین متن‌باز، متعهد است. اصطلاحات انتشار سوارکردن (mount propagation) شامل master و slave که در این‌جا استفاده شده، مشکل‌ساز و تفرقه‌افکن است و باید دگرگون شود. با این حال، این اصطلاحات هم‌اکنون درون هسته لینوکس استفاده می‌شوند و در این مقطع زمانی باید به همان صورت به کار روند. هنگامی که نگه‌دارندگان هسته این کاربرد را اصلاح کنند، Podman بی‌درنگ از آن پیروی خواهد کرد.

سوار کردن حجم‌ها از کانتینر(های) مشخص‌شده

-w, --workdir="" دایرکتوری کاری درون کانتینر

podman(1)

تعیین دایرکتوری کاری درون کانتینر هنگام اجرا.

ایجاد یک کانتینر جدید با استفاده از ایمیج fedora:

$ podman create -it fedora bash
6d353a48c72447cc7d0799e8334460598a3c8e9b81561726ca21c385b0d0e653

ایجاد یک کانتینر با نام مشخص:

$ podman create --name my-container fedora

کد خروج صفر نشان‌دهنده موفقیت کامل عملیات ایجاد کانتینر است. کدهای غیرصفر نشان‌دهنده خطای پیکربندی، عدم دسترسی یا عدم وجود ایمیج مشخص‌شده هستند.

podman(1), podman-run(1), podman-start(1)

پاییز ۲۰۱۷، در ابتدا توسط Urvashi Mohnani کامپایل شد.