skopeo-copy(1)() skopeo-copy(1)()

skopeo-copy - کپی کردن یک تصویر (مانیفست، لایه‌های فایل‌سیستم، امضاها) از یک مکان به مکانی دیگر

skopeo copy [گزینه‌ها] source-image destination-image

یک تصویر (مانیفست، لایه‌های فایل‌سیستم، امضاها) را از یک مکان به مکانی دیگر کپی می‌کند.

از سیاست اعتماد (trust policy) سیستم برای اعتبارسنجی تصاویر استفاده می‌کند؛ تصاویری که توسط این سیاست مورد اعتماد نباشند رد می‌شوند.

برای source-image از قالب «نام تصویر» شرح داده شده در بالا استفاده کنید.

برای destination-image از قالب «نام تصویر» شرح داده شده در بالا استفاده کنید.

source-image و destination-image کاملاً مستقل از یکدیگر تفسیر می‌شوند؛ برای مثال، نام مقصد به طور خودکار هیچ بخشی از نام مبدأ را به ارث نمی‌برد.

همچنین برای گزینه‌هایی که قبل از نام زیرفرمان قرار می‌گیرند، skopeo(1) را ببینید.

--additional-tag=strings

تگ‌های اضافی (از docker-archive پشتیبانی می‌کند).

--all, -a

اگر source-image به فهرستی از تصاویر اشاره کند، به جای کپی کردن تنها تصویری که با سیستم‌عامل و معماری فعلی مطابقت دارد (با در نظر گرفتن گزینه‌های سراسری --override-os، --override-arch و --override-variant)، تلاش می‌کند تمام تصاویر موجود در فهرست و خود فهرست را کپی کند.

--authfile path

مسیر فایل گواهی‌های اصلی رجیستری. در لینوکس، پیش‌فرض ${XDG_RUNTIME_DIR}/containers/auth.json است. برای جزئیات بیشتر دربارهٔ سازوکار جستجوی گواهی‌ها و پیش‌فرض‌ها در سایر پلتفرم‌ها، containers-auth.json(5) را ببینید.

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

مقدار پیش‌فرض این گزینه از متغیر محیطی REGISTRY\_AUTH\_FILE خوانده می‌شود.

--src-authfile path

مسیر فایل گواهی‌های رجیستری اصلی برای رجیستری مبدأ. در صورت مشخص نشدن، از مسیر داده‌شده توسط --authfile استفاده می‌کند.

--dest-authfile path

مسیر فایل گواهی‌های رجیستری اصلی برای رجیستری مقصد. در صورت مشخص نشدن، از مسیر داده‌شده توسط --authfile استفاده می‌کند.

--dest-shared-blob-dir directory

دایرکتوری مورد استفاده برای به اشتراک‌گذاری blobها در میان مخازن OCI.

--digestfile path

پس از کپی کردن تصویر، دایجست تصویر حاصل را در فایل می‌نویسد.

--preserve-digests

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

این گزینه مواردی را که کپی خواهند شد تغییر نمی‌دهد؛ استفادهٔ هم‌زمان از --all را مد نظر قرار دهید.

--encrypt-layer ints

آزمایشی (Experimental) اندیس لایه‌ها بر پایهٔ صفر، همراه با پشتیبانی از اندیس‌گذاری منفی (برای مثال 0 لایهٔ اول است و -1 آخرین لایه است).

--format, -f manifest-type

نوع مانیفست (oci، v2s1 یا v2s2) برای استفاده در مقصد (پیش‌فرض همان نوع مانیفست مبدأ با امکان fallback است).

--help, -h

نمایش راهنمای استفاده

--multi-arch option

کنترل آنچه کپی می‌شود در صورتی که source-image به یک تصویر چندمعماری اشاره کند. پیش‌فرض system است.

گزینه‌ها:
- system: تنها تصویری را کپی می‌کند که با معماری سیستم مطابقت دارد
- all: تمام تصویر چندمعماری را کپی می‌کند
- index-only: تنها نمایه (index) را کپی می‌کند
- platform-list: تنها پلتفرم‌های خاص را کپی می‌کند (فهرستی از جفت‌های سیستم‌عامل/معماری جداشده با ویرگول، مانند linux/amd64,linux/arm64)

گزینهٔ index-only و platform-list هر دو فهرست‌های مانیفست تنک (sparse) ایجاد می‌کنند که معمولاً با خطا مواجه می‌شوند، مگر اینکه تصاویر به ازای هر معماریِ ارجاع‌شده از قبل در مقصد موجود باشند، یا رجیستری هدف از نمایه‌های تنک پشتیبانی کند.

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

--quiet, -q

عدم نمایش اطلاعات خروجی هنگام کپی تصاویر.

--remove-signatures

امضاها را (در صورت وجود) از source-image کپی نمی‌کند. این گزینه هنگام کپی یک تصویر امضاشده به مقصدی که از امضا پشتیبانی نمی‌کند، ضروری است.

--remove-list-signatures

امضای فهرست مانیفست را کپی نمی‌کند در حالی که امضاهای هر نمونه (instance) را حفظ می‌نماید. این گزینه کنترل دقیق‌تری نسبت به --remove-signatures که تمام امضاها را حذف می‌کند فراهم می‌سازد.

--strip-removed-platforms

هنگام کپی تنها زیرمجموعه‌ای از پلتفرم‌ها از یک تصویر چندمعماری (با استفاده از --multi-arch به همراه فهرست پلتفرم‌ها)، فهرست مانیفستی را می‌نویسد که تنها شامل پلتفرم‌های کپی‌شده است، به جای اینکه ورودی‌هایی را باقی بگذارد که به تصاویر پلتفرم‌های ناموجود در مقصد اشاره دارند. این گزینه برای رجیستری‌هایی مفید است که فهرست‌های مانیفست حاوی ارجاع به تصاویر ناموجود را رد می‌کنند.

نکته: این گزینه نیازمند آن است که امضاها با استفاده از --remove-signatures یا --remove-list-signatures حذف شوند، زیرا حذف نمونه‌ها امضای فهرست مانیفست را باطل کرده و دایجست فهرست مانیفست را تغییر می‌دهد. در صورت وجود امضاها و حذف نشدن صریح آن‌ها، عملیات با شکست مواجه خواهد شد.

--sign-by key-id

افزودن یک امضای «simple signing» با استفاده از آن شناسهٔ کلید برای نام تصویری که منطبق بر destination-image است.

--sign-by-sigstore param-file

افزودن یک امضای sigstore بر اساس گزینه‌های موجود در فایل پارامتر امضای sigstore کانتینرها، یعنی param-file. برای جزئیات مربوط به قالب فایل، containers-sigstore-signing-params.yaml(5) را ببینید.

--sign-by-sigstore-private-key path

افزودن یک امضای sigstore با استفاده از یک کلید خصوصی در path برای نام تصویری که منطبق بر destination-image است.

--sign-by-sq-fingerprint fingerprint

افزودن یک امضای «simple signing» با استفاده از کلید Sequoia-PGP با اثرانگشت (fingerprint) مشخص‌شده.

--sign-passphrase-file path

عبارت عبور مورد استفاده هنگام امضا با --sign-by، --sign-by-sigstore-private-key یا --sign-by-sq-fingerprint. تنها سطر اول خوانده خواهد شد. عبارت عبوری که در یک فایل ذخیره شده باشد، در صورتی که سایر کاربران بتوانند آن فایل را بخوانند، از نظر امنیتی جای تردید دارد. در صورت امکان، به هیچ وجه از این گزینه استفاده نکنید..PP --sign-identity reference

هویت مورد استفاده هنگام امضای تصویر. این هویت باید یک docker reference کاملاً مشخص باشد. اگر هویت مشخص نشود، از docker reference مقصد استفاده خواهد شد.

--src-shared-blob-dir directory

دایرکتوری مورد استفاده برای به اشتراک‌گذاری blobها میان مخازن OCI.

--encryption-key protocol:keyfile

پروتکل رمزنگاری را مشخص می‌کند که می‌تواند JWE (RFC7516)، PGP (RFC4880) و PKCS7 (RFC2315) باشد و همچنین داده‌های کلید مورد نیاز برای رمزنگاری تصویر را تعیین می‌کند. برای نمونه، jwe:/path/to/key.pem یا pgp:admin@example.com یا pkcs7:/path/to/x509-file.

--decryption-key key[:passphrase]

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

--src-creds username[:password]

اطلاعات احراز هویت برای دسترسی به رجیستری مبدأ.

--dest-compress

فشرده‌سازی لایه‌های تصویر tarball هنگام ذخیره در دایرکتوری با استفاده از انتقال‌دهنده 'dir'. (پیش‌فرض همان نوع فشرده‌سازی مبدأ است).

--dest-decompress

از حالت فشرده خارج کردن لایه‌های تصویر tarball هنگام ذخیره در دایرکتوری با استفاده از انتقال‌دهنده 'dir'. (پیش‌فرض همان نوع فشرده‌سازی مبدأ است).

--dest-oci-accept-uncompressed-layers

مجاز دانستن لایه‌های تصویر فشرده‌نشده هنگام ذخیره در یک تصویر OCI با استفاده از انتقال‌دهنده 'oci'. (پیش‌فرض فشرده‌سازی مواردی است که فشرده نیستند).

--dest-creds username[:password]

اطلاعات احراز هویت برای دسترسی به رجیستری مقصد.

--src-cert-dir path

استفاده از گواهی‌های موجود در path (*.crt, *.cert, *.key) برای اتصال به رجیستری یا دیمن مبدأ.

--src-no-creds

دسترسی به رجیستری به‌صورت ناشناس.

--src-tls-verify=bool

الزام به HTTPS و اعتبارسنجی گواهی‌ها هنگام ارتباط با رجیستری کانتینر مبدأ یا دیمن. پیش‌فرض، تنظیمات رجیستری مبدأ است.

--dest-cert-dir path

استفاده از گواهی‌های موجود در path (*.crt, *.cert, *.key) برای اتصال به رجیستری یا دیمن مقصد.

--dest-no-creds

دسترسی به رجیستری به‌صورت ناشناس.

--dest-tls-verify=bool

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

--src-daemon-host host

کپی از دیمن docker در host. اگر host با tcp:// آغاز شود، HTTPS به‌طور پیش‌فرض فعال است. برای استفاده از HTTP معمولی، از ساختار http:// استفاده کنید (پیش‌فرض unix:///var/run/docker.sock است).

--dest-daemon-host host

کپی به دیمن docker در host. اگر host با tcp:// آغاز شود، HTTPS به‌طور پیش‌فرض فعال است. برای استفاده از HTTP معمولی، از ساختار http:// استفاده کنید (پیش‌فرض unix:///var/run/docker.sock است).

--dest-compress-format format

قالب فشرده‌سازی مورد استفاده را مشخص می‌کند. مقادیر پشتیبانی‌شده عبارتند از: gzip، zstd و zstd:chunked. zstd:chunked با رمزنگاری تصاویر ناسازگار است و در این حالت، همراه با یک هشدار با آن همانند zstd رفتار خواهد شد.

--dest-compress-level format

سطح فشرده‌سازی مورد استفاده را مشخص می‌کند. این مقدار وابسته به الگوریتم فشرده‌سازی به‌کاررفته است؛ برای مثال برای zstd مقادیر پذیرفته‌شده در محدودهٔ 1-20 (شامل طرفین) است، در حالی که برای gzip این محدوده 1-9 (شامل طرفین) می‌باشد.

--dest-force-compress-format

تضمین می‌کند که الگوریتم فشرده‌سازی تعیین‌شده در --dest-compress-format به‌طور انحصاری استفاده شود.

--src-registry-token token

توکن Bearer برای دسترسی به رجیستری مبدأ.

--dest-registry-token token

توکن Bearer برای دسترسی به رجیستری مقصد.

--dest-precompute-digests

محاسبهٔ پیشاپیش چکیده‌ها (digests) برای اطمینان از عدم بارگذاری لایه‌هایی که در حال حاضر در رجیستری مقصد وجود دارند. لایه‌هایی با چکیده‌های اولیه نامشخص (مانند فشرده‌سازی «on the fly») به‌طور موقت روی دیسک جریان‌دهی (stream) خواهند شد.

--retry-times

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

--retry-delay

تأخیر ثابت بین دفعات تلاش مجدد. اگر تنظیم نشود (یا برابر 0s باشد)، زمان انتظار بر اساس تعداد تلاش‌های ناموفق به‌صورت نمایی افزایش خواهد یافت.

--src-username

نام کاربری برای دسترسی به رجیستری مبدأ.

--src-password

گذرواژه برای دسترسی به رجیستری مبدأ.

--dest-username

نام کاربری برای دسترسی به رجیستری مقصد.

--dest-password

گذرواژه برای دسترسی به رجیستری مقصد.

--image-parallel-copies n

حداکثر تعداد لایه‌های تصویری که می‌توانند به‌طور هم‌زمان کپی (pull/push) شوند. در صورت تنظیم نکردن این فیلد، مقادیر پیش‌فرض containers/image اعمال خواهند شد..SH "مثال‌ها (EXAMPLES)" برای کپی کردن سادهٔ یک ایمیج از یک رجیستری به رجیستری دیگر:

$ skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest

برای کپی کردن لایه‌های ایمیج busybox از docker.io به یک دایرکتوری محلی:

$ mkdir -p /var/lib/images/busybox
$ skopeo copy docker://busybox:latest dir:/var/lib/images/busybox
$ ls /var/lib/images/busybox/*
  /tmp/busybox/2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749.tar
  /tmp/busybox/manifest.json
  /tmp/busybox/8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f.tar

برای ایجاد یک بایگانی قابل استفاده توسط docker load (البته توجه داشته باشید که استفاده از یک رجیستری تقریباً همیشه کارآمدتر است):

$ skopeo copy docker://busybox:latest docker-archive:archive-file.tar:busybox:latest

برای کپی و امضا کردن یک ایمیج:

$ skopeo copy --sign-by dev@example.com containers-storage:example/busybox:streaming docker://example/busybox:gold

برای کپی کردن تنها پلتفرم‌های مشخصی از یک ایمیج چندمعماری (یک فهرست مانیفست تنک/پراکنده ایجاد می‌کند):

$ skopeo copy --multi-arch=linux/amd64,linux/arm64 docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest

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

$ skopeo copy --multi-arch=linux/amd64,linux/arm64 --strip-removed-platforms --remove-list-signatures docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest

برای رمزنگاری یک ایمیج:

$ skopeo copy docker://docker.io/library/nginx:1.17.8 oci:local_nginx:1.17.8
$ openssl genrsa -out private.key 1024
$ openssl rsa -in private.key -pubout > public.key
$ skopeo copy --encryption-key jwe:./public.key oci:local_nginx:1.17.8 oci:try-encrypt:encrypted

برای رمزگشایی یک ایمیج:

$ skopeo copy --decryption-key ./private.key oci:try-encrypt:encrypted oci:try-decrypt:decrypted

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

$ skopeo copy oci:try-encrypt:encrypted oci:try-encrypt-copy:encrypted

برای رمزگشایی ایمیجی که به بیش از یک کلید نیاز دارد:

$ skopeo copy --decryption-key ./private1.key --decryption-key ./private2.key --decryption-key ./private3.key oci:try-encrypt:encrypted oci:try-decrypt:decrypted

ایمیج‌های کانتینر همچنین می‌توانند با مشخص کردن اندیس لایه، به‌صورت جزئی رمزنگاری شوند. نمایه‌گذاری لایه‌ها بر پایهٔ ۰ است (0-indexed) و از نمایه‌گذاری منفی نیز پشتیبانی می‌شود؛ یعنی ۰ لایهٔ نخست و -1 لایهٔ پایانی است.

فرض کنید از ۳ لایه‌ای که ایمیج docker.io/library/nginx:1.17.8 از آن‌ها تشکیل شده است، تنها می‌خواهیم لایهٔ دوم را رمزنگاری کنیم:

$ skopeo copy --encryption-key jwe:./public.key --encrypt-layer 1 oci:local_nginx:1.17.8 oci:try-encrypt:encrypted
skopeo(1), skopeo-login(1), docker-login(1), containers-auth.json(5), containers-policy.json(5), containers-transports(5), containers-signature(5)

Antonio Murdaca runcom@redhat.com ⟨mailto:runcom@redhat.com⟩, Miloslav Trmac mitr@redhat.com ⟨mailto:mitr@redhat.com⟩, Jhon Honce jhonce@redhat.com ⟨mailto:jhonce@redhat.com⟩