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

podman-pod-create - ایجاد یک پاد جدید

podman pod create [گزینه‌ها] [نام]

دستور podman pod create یک پاد خالی جدید ایجاد می‌کند. پاد مجموعه‌ای از یک یا چند کانتینر است که منابع شبکه، حافظه و فضاهای نام لینوکس مشترکی دارند. شناسه (ID) پاد ایجادشده در صورت موفقیت چاپ خواهد شد.

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

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

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

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

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

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

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

برای تغییر نسبت از مقدار پیش‌فرض 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)

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

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

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

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

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

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

خط‌مشی خروج پاد هنگامی که آخرین کانتینر معمولی متوقف می‌شود (continue یا stop).

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

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

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

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

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

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

ایجاد یک کانتینر زیرساخت (infra container) و پیوند دادن فضاهای نام به آن (پیش‌فرض: true).

دستور جایگزین برای اجرای کانتینر زیرساخت در پاد.

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

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

نام سفارشی برای کانتینر زیرساخت پاد.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

فهرستی از فضاهای نام هسته لینوکس که بین کانتینرهای پاد به اشتراک گذاشته می‌شوند (مانند ipc، net، pid، user، uts).

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

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

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

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

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

گزینه‌های sysctl

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

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

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

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

ایجاد یک اتصال پیوندی (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 به کار ببرید.

نکته: اگر کاربر تنها از طریق یک گروه دارای مجوز دسترسی باشد، دسترسی به حجم از درون یک پاد بدون ریشه ناموفق خواهد بود.

اتصال‌های نگاشت شناسه (Idmapped mount)

در صورت تعیین idmap، یک اتصال با شناسه نگاشت‌شده به فضای‌نام کاربری مقصد در کانتینر ایجاد می‌شود. گزینه idmap از نگاشت سفارشی که می‌تواند با فضای‌نام کاربری کانتینر متفاوت باشد پشتیبانی می‌کند. این نگاشت را می‌توان بعد از گزینه idmap به این صورت تعیین کرد: idmap=uids=0-1-10#10-11-10;gids=0-100-10. برای هر سه‌گانه، مقدار اول آغاز شناسه‌های سیستم‌فایل پشتیبان است که به مقدار دوم روی میزبان نگاشت می‌شوند. طول این نگاشت در مقدار سوم مشخص می‌گردد. محدوده‌های چندگانه با نماد # از یکدیگر تفکیک می‌شوند.

سوار کردن حجم‌ها از کانتینر(های) مشخص‌شده. برای به اشتراک‌گذاری حجم‌ها میان کانتینرها و پادها استفاده می‌شود. options فهرستی جداشده با کاما از موارد زیر است:

  • rw|ro
  • z

حجم‌های از قبل سوارشده از یک کانتینر مبدأ را روی یک پاد دیگر سوار می‌کند. CONTAINER می‌تواند نام یا شناسه کانتینر باشد. برای اشتراک‌گذاری حجم، هنگام اجرای کانتینر مقصد از گزینه --volumes-from استفاده کنید. حتی اگر کانتینر مبدأ در حال اجرا نباشد، حجم‌ها می‌توانند به اشتراک گذاشته شوند.

به‌طور پیش‌فرض، Podman حجم‌ها را در همان حالت (خواندنی-نوشتنی یا فقط‌خواندنی) که در کانتینر مبدأ سوار شده‌اند، سوار می‌کند. این رفتار را می‌توان با افزودن گزینه ro یا rw تغییر داد.

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

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

اگر محل حجم ناشی از کانتینر مبدأ با داده‌های موجود در پاد مقصد همپوشانی داشته باشد، حجم مذکور داده‌های موجود در مقصد را پنهان می‌کند.

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

$ podman pod create --name test

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

$ podman pod create mypod

ایجاد یک پاد بدون کانتینر زیرساخت:

$ podman pod create --infra=false

ایجاد یک پاد با تعیین دستور برای اجرای کانتینر زیرساخت:

$ podman pod create --infra-command /top toppod

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

$ podman pod create --publish 8443:443

ایجاد یک پاد با شبکه مشخص:

$ podman pod create --network pasta

ایجاد یک پاد متصل به دو شبکه مختلف:

$ podman pod create --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10

ایجاد یک پاد با محدودیت مشترک پردازنده و حافظه برای تمام کانتینرها:

$ podman pod create --cpus=2 --memory=512m mypod

ایجاد یک پاد با اتصال حجم مشترک قابل دسترس برای تمام کانتینرها:

$ podman pod create --volume /host/path:/container/path:Z mypod

ایجاد یک پاد با محدودیت مشترک منابع و اتصال حجم برای تمام کانتینرها:

$ podman pod create --volume /data:/data:Z --volume /config:/etc/config:ro --cpus=1.5 --memory=1g --cpu-shares=512 mypod

ایجاد یک پاد با دسترسی مشترک به دستگاه و محدودیت منابع:

$ podman pod create --device /dev/sda:/dev/sda:rw --cpus=4 --memory=2g --blkio-weight=500 mypod

ایجاد یک پاد با محدودیت مشترک مجموعه‌های پردازنده و حجم‌های گرفته‌شده از یک کانتینر دیگر:

$ podman pod create --cpuset-cpus=0,2 --volumes-from=source-container --memory=1g mypod

ایجاد یک پاد با منابع مشترک و افزودن کانتینرها به آن:

$ podman pod create --cpus=2 --memory=1g --volume /data:/data:Z mypod
$ podman create --pod mypod nginx
$ podman create --pod mypod redis

podman(1), podman-pod(1), podman-kube-play(1), containers.conf(1), cgroups(7)

برای راه‌حل مشکلات رایج به podman-troubleshooting(7) مراجعه کنید.

ژوئیه ۲۰۱۸، در ابتدا توسط Peter Hunt <pehunt@redhat.com> گردآوری شد.

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