CONTAINERS-TRANSPORTS(5) Man CONTAINERS-TRANSPORTS(5)
Valentin Rothberg April 2019

containers-transports - شرح روش‌های انتقال (transports) پشتیبانی‌شده برای رونوشت و ذخیره‌سازی تصاویر کانتینر

ابزارهایی که از کتابخانه containers/image استفاده می‌کنند، از جمله skopeo(1)، buildah(1) و podman(1)، همگی از یک نحو و ساختار مشترک برای ارجاع به تصاویر کانتینر در مکان‌های مختلف بهره می‌برند. قالب کلی این نحو به صورت transport:details است که در آن جزئیات (details) به روش انتقال مشخص‌شده وابسته بوده و در ادامه مستند شده‌اند.

معناشناسی نام تصاویر در نهایت به محیطی که در آن ارزیابی می‌شوند بستگی دارد. به عنوان مثال: اگر در یک سرور دوردست ارزیابی شوند، نام تصاویر ممکن است به مسیرهایی در همان سرور اشاره کند؛ مسیرهای نسبی نیز نسبت به دایرکتوری جاری مصرف‌کننده تصویر سنجیده می‌شوند.

تصویری که در یک فضای ذخیره‌سازی محلی کانتینرها قرار دارد. قالب docker-reference با جزئیات کامل در بخش روش انتقال docker شرح داده شده است.

پارامتر storage-specifier امکان ارجاع به مکان‌های ذخیره‌سازی روی سیستم‌فایل را فراهم می‌کند و قالبی به صورت [[driver@]root[+run-root][:options]] دارد که در آن driver اختیاری به درایور ذخیره‌سازی (مانند overlay یا btrfs) اشاره داشته و root یک مسیر مطلق به دایرکتوری ریشه ذخیره‌سازی است. مقدار اختیاری run-root می‌تواند برای مشخص کردن دایرکتوری اجرای فضای ذخیره‌سازی استفاده شود که در آن تمام محتویات موقت قابل نوشتن ذخیره می‌گردند. مقدار اختیاری options فهرستی از گزینه‌های مختص به درایور است که با کاما از یکدیگر جدا شده‌اند. لطفاً برای اطلاعات بیشتر درباره درایورها و گزینه‌های پشتیبانی‌شده به containers-storage.conf(5) مراجعه کنید.

یک دایرکتوری محلی موجود در مسیر path که مانیفست، فایل‌های فشرده لایه‌ها (tarballs) و امضاها را به عنوان فایل‌های جداگانه نگهداری می‌کند. این یک قالب غیراستاندارد است که در وهله اول برای اشکال‌زدایی یا بررسی غیرمخرب کانتینرها مفید است.

تصویری در یک رجیستری که استاندارد "Docker Registry HTTP API V2" را پیاده‌سازی کرده است. به صورت پیش‌فرض، از وضعیت احراز هویت در $XDG_RUNTIME_DIR/containers/auth.json استفاده می‌کند که با استفاده از podman-login(1) تنظیم می‌شود. اگر وضعیت احراز هویت در آنجا یافت نشود، مسیر $HOME/.docker/config.json بررسی می‌شود که با استفاده از docker-login(1) مقداردهی شده است. فایل containers-registries.conf(5) علاوه بر این امکان پیکربندی تنظیمات گوناگون رجیستری را فراهم می‌سازد.

توجه داشته باشید که docker-reference دارای ساختار زیر است: name[:tag | @digest]. در حالی که روش انتقال docker به طور همزمان از تگ و دایجست پشتیبانی نمی‌کند، برخی قالب‌ها مانند containers-storage این امکان را دارند. دایجست‌ها همچنین می‌توانند در مقصد تصویر مورد استفاده قرار گیرند، به شرطی که مانیفست با دایجست ارائه‌شده مطابقت داشته باشد.

روش انتقال docker از ارسال (push) تصاویر بدون تگ یا دایجست به یک رجیستری پشتیبانی می‌کند، به شرطی که نام تصویر با پسوند @@unknown-digest@@ مشخص شده باشد. قالب ارجاع name@@unknown-digest@@ نمی‌تواند همراه با ارجاعی که دارای تگ یا دایجست است استفاده شود. دایجست تصاویر را می‌توان با skopeo-inspect(1) بررسی کرد.

اگر name حاوی اسلش نباشد، به عنوان docker.io/library/name در نظر گرفته می‌شود. در غیر این صورت، جزءِ پیش از نخستین اسلش بررسی می‌شود تا مشخص گردد آیا به عنوان یک hostname شناخته می‌شود یا خیر ⟨یعنی حاوی یک `.` یا `:` باشد، یا آن جزء دقیقاً `localhost` باشد⟩. اگر نخستین جزءِ نام به عنوان یک hostname[:port] شناخته نشود، name به عنوان docker.io/name در نظر گرفته خواهد شد.

تصویری که در یک فایل با ساختار docker-save(1) ذخیره شده است.

مگر آن‌که یک ابزار صریحاً خلاف آن را مستند کرده باشد، نوشتن در یک مقصد docker-archive: مسیر path را کاملاً بازنویسی کرده و آن را با تصویر منفرد ارائه‌شده جایگزین می‌کند.

مقدار path می‌تواند به یک جریان (stream) اشاره داشته باشد، مانند docker-archive:/dev/stdin.

مقدار docker-reference نباید شامل دایجست باشد. همچنین برای خواندن آرشیوها، @source-index یک اندیس مبنای صفر در مانیفست آرشیو است (برای دسترسی به تصاویر بدون برچسب). اگر هنگام خواندن یک آرشیو هیچ‌یک از docker-reference یا @_source_index مشخص نشده باشد، آرشیو باید دقیقاً شامل یک تصویر باشد.

تصویری که در فضای ذخیره‌سازی داخلی دیمن داکر ذخیره شده است. تصویر هنگام استفاده به عنوان منبع، باید به صورت یک docker-reference یا در قالب جایگزین algo:digest مشخص شود. قالب algo:digest به شناسه تصویری که توسط docker-inspect(1) گزارش می‌شود اشاره دارد.

تصویری در ساختار دایرکتوری سازگار با "مشخصات چیدمان تصویر کانتینر باز (Open Container Image Layout Specification)" در مسیر path.

مقدار path در نخستین نویسه : خاتمه می‌یابد؛ هرگونه نویسه : بعدی جداکننده نبوده، بلکه بخشی از reference است. مقدار reference برای تنظیم یا تطبیق انوتیشن org.opencontainers.image.ref.name در شاخص (index) سطح بالا استفاده می‌شود. برای خواندن تصاویر، @source-index یک اندیس بر مبنای صفر در مانیفست است (برای دسترسی به تصاویر بدون برچسب). اگر هنگام خواندن یک تصویر نه مرجع و نه @_source_index مشخص شده باشد، مسیر باید دقیقاً شامل یک تصویر باشد.

تصویری در یک آرشیو tar(1) با محتوای سازگار با "مشخصات چیدمان تصویر کانتینر باز (Open Container Image Layout Specification)" در مسیر path.

مگر آن‌که یک ابزار صریحاً خلاف آن را مستند کرده باشد، نوشتن در یک مقصد oci-archive: مسیر path را کاملاً بازنویسی کرده و آن را با تک تصویر ارائه‌شده جایگزین می‌سازد.

مقدار path در نخستین نویسه : خاتمه می‌یابد؛ هرگونه نویسه : بعدی جداکننده نبوده، بلکه بخشی از reference به شمار می‌آید. مقدار reference برای تنظیم یا تطبیق انوتیشن org.opencontainers.image.ref.name در شاخص سطح بالا استفاده می‌شود. اگر هنگام خواندن یک آرشیو مقدار reference مشخص نشده باشد، آرشیو باید دقیقاً شامل یک تصویر باشد.

تصویری با استفاده از قالب تصویر Singularity در مسیر path.

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

مثال‌های زیر نحوه استفاده از برخی روش‌های انتقال کانتینر را نشان می‌دهند. در این مثال‌ها از skopeo-copy(1) برای رونوشت گرفتن از تصاویر کانتینر استفاده شده است.

رونوشت تصویر از یک رجیستری به رجیستری دیگر:

$ skopeo copy docker://docker.io/library/alpine:latest docker://localhost:5000/alpine:latest

رونوشت تصویر از دیمن در حال اجرای Docker به دایرکتوری با ساختار OCI:

$ mkdir alpine-oci
$ skopeo copy docker-daemon:alpine:latest oci:alpine-oci
$ tree alpine-oci
test-oci/
├── blobs
│   └── sha256
│       ├── 83ef92b73cf4595aa7fe214ec6747228283d585f373d8f6bc08d66bebab531b7
│       ├── 9a6259e911dcd0a53535a25a9760ad8f2eded3528e0ad5604c4488624795cecc
│       └── ff8df268d29ccbe81cdf0a173076dcfbbea4bb2b6df1dd26766a73cb7b4ae6f7
├── index.json
└── oci-layout
2 directories, 5 files

رونوشت تصویر از یک رجیستری به فضای ذخیره‌سازی محلی:

$ skopeo copy docker://docker.io/library/alpine:latest containers-storage:alpine:latest

docker-login(1), docker-save(1), podman-login(1), skopeo-copy(1), skopeo-inspect(1), tar(1), container-registries.conf(5), containers-storage.conf(5)

Miloslav Trmač mitr@redhat.com ⟨mailto:mitr@redhat.com⟩ Valentin Rothberg rothberg@redhat.com ⟨mailto:rothberg@redhat.com⟩

Containers Transports