skopeo-sync(1)() skopeo-sync(1)()

skopeo-sync - همگام‌سازی ایمیج‌ها بین مخازن رجیستری و دایرکتوری‌های محلی.

skopeo sync [options] --src transport --dest transport source destination

همگام‌سازی ایمیج‌ها میان مخازن رجیستری و دایرکتوری‌های محلی. این همگام‌سازی با رونوشت گرفتن از تمامی ایمیج‌های موجود در source به destination انجام می‌شود - امری که هنگام همگام‌سازی آینه (mirror) محلی رجیستری کانتینر یا پر کردن رجیستری‌های در حال اجرا در محیط‌های ایزوله (air-gapped) بسیار کاربردی است.

برخلاف سایر دستورهای skopeo، دستور skopeo sync نیازمند آن است که پروتکل‌های انتقال (transports) مبدأ و مقصد به‌طور جداگانه از source و destination مشخص شوند. یکی از مشکلات افزودن پیشوند روش انتقال به مقصد این است که رجیستری docker://hostname:port ممکن است به‌اشتباه به‌عنوان یک ارجاع ایمیج در یک رجیستری غیراستاندارد (non-fully qualified) تفسیر شود که در آن hostname نام ایمیج و port برچسب (tag) آن تلقی گردد.

روش‌های انتقال (transports) دردسترس برای source:
- docker (برای مثال --src docker): مقدار source یک مخزن میزبانی‌شده روی یک رجیستری کانتینر است (مانند: registry.example.com/busybox).
اگر هیچ تگی برای ایمیج مشخص نشود، skopeo sync تمامی برچسب‌های یافت‌شده در آن مخزن را رونوشت می‌کند.
- dir (برای مثال --src dir): مقدار source مسیر یک دایرکتوری محلی است (مانند: /media/usb/). برای قالب ایمیج محلی به skopeo(1) بخش dir:path مراجعه کنید.
- yaml (برای مثال --src yaml): مقدار source مسیر یک فایل YAML محلی است.
فایل YAML باید فهرستی از ایمیج‌هایی را که باید از رجیستری‌های کانتینر مختلف کپی شوند مشخص کند (دایرکتوری‌های محلی پشتیبانی نمی‌شوند). برای اطلاع از ساختار این فایل به بخش «مثال‌ها (EXAMPLES)» مراجعه نمایید.

روش‌های انتقال (transports) دردسترس برای destination:
- docker (برای مثال --dest docker): مقدار destination یک رجیستری کانتینر است (مانند: my-registry.local.lan).
- dir (برای مثال --dest dir): مقدار destination مسیر یک دایرکتوری محلی است (مانند: /media/usb/).
به‌ازای هر ایمیج کپی‌شده، یک دایرکتوری برای هر 'image:tag' مبدأ ایجاد می‌شود.

هنگامی که گزینهٔ --scoped مشخص شود، مسیر ایمیج مبدأ به‌عنوان پیشوند ایمیج‌ها اضافه می‌شود تا بتوان چندین ایمیج با نام یکسان را در destination ذخیره کرد.

همچنین برای گزینه‌هایی که پیش از نام زیردستور قرار می‌گیرند، به skopeo(1) مراجعه کنید.

--all, -a اگر یکی از ایمیج‌ها در src به فهرستی از ایمیج‌ها اشاره کند، به‌جای رونوشت صرفاً ایمیجی که با سیستم‌عامل و معماری فعلی مطابقت دارد (بسته به استفاده از گزینه‌های سراسری --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 استفاده می‌کند.

--dry-run

اجرای همگام‌سازی بدون رونوشت واقعی داده‌ها به مقصد (اجرای آزمایشی).

--src, -s transport پروتکل انتقال (transport) برای مخزن مبدأ.

--dest, -d transport پروتکل انتقال مقصد.

--format, -f manifest-type نوع مانیفست (oci، v2s1 یا v2s2) برای استفاده در هنگام همگام‌سازی ایمیج(ها) به یک مقصد (پیش‌فرض، نوع مانیفست مبدأ به‌همراه حالت‌های بازگشتی یا fallback است).

--help, -h

چاپ راهنمای استفاده از دستور

--scoped افزودن مسیر ایمیج مبدأ به‌عنوان پیشوند ایمیج‌ها، به‌طوری که بتوان چند ایمیج با نام یکسان را در destination ذخیره نمود.

--append-suffix tag-suffix رشته‌ای که به انتهای برچسب‌های مقصد افزوده می‌شود.

--digestfile path

پس از رونوشت ایمیج‌ها از مبدأ، دایجست (خلاصه کد هش) ایمیج‌های حاصل را همراه با مرجع ایمیج (Image Reference) می‌نویسد.

sha256:bf91f90823248017a4f920fb541727fa8368dc6cf377a7debbd271cf6a31c8a7 docker://myhost.com/alpine:edge
sha256:31603596830fc7e56753139f9c2c6bd3759e48a850659506ebfb885d1cf3aef5 docker://myhost.com/postgres:14.3

--preserve-digests

حفظ دایجست‌ها (digests) در طول فرایند کپی. در صورت عدم امکان حفظ دایجست، با خطا مواجه می‌شود.

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

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

--remove-list-signatures

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

--sign-by key-id

افزودن یک امضای «simple signing» با استفاده از آن شناسه کلید (key ID) برای نام ایمیج متناظر با 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

عبارت عبور (passphrase) مورد استفاده هنگام امضا کردن با --sign-by، --sign-by-sigstore-private-key یا --sign-by-sq-fingerprint. تنها سطر اول خوانده خواهد شد. عبارت عبوری که در یک فایل ذخیره شده باشد، در صورتی که سایر کاربران بتوانند این فایل را بخوانند از نظر امنیتی قابل اتکا نیست. تا حد امکان از این گزینه استفاده نکنید.

--src-creds username[:password] جهت دسترسی به رجیستری مبدأ.

--dest-creds username[:password] جهت دسترسی به رجیستری مقصد.

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

--src-no-creds دسترسی به رجیستری به‌صورت ناشناس.

--src-tls-verify=bool الزام به HTTPS و تأیید گواهی‌ها هنگام ارتباط با رجیستری کانتینر یا دیمن مبدأ. پیش‌فرض، تنظیمات مدخل رجیستری مبدأ در registry.conf است.

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

--dest-no-creds دسترسی به رجیستری به‌صورت ناشناس.

--dest-tls-verify=bool الزام به HTTPS و تأیید گواهی‌ها هنگام ارتباط با رجیستری کانتینر یا دیمن مقصد. پیش‌فرض، تنظیمات مدخل رجیستری مقصد در registry.conf است..PP --src-registry-token Bearer token برای دسترسی به رجیستری مبدأ.

--dest-registry-token Bearer token برای دسترسی به رجیستری مقصد.

--retry-times

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

--retry-delay

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

--keep-going در صورت بروز هرگونه خطا هنگام کپی کردن ایمیج‌ها، آن خطاها ثبت شده و فرایند همگام‌سازی سایر ایمیج‌ها ادامه می‌یابد و در پایان با وضعیت شکست خاتمه می‌یابد.

--src-username

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

--src-password

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

--dest-username

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

--dest-password

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

$ skopeo sync --src docker --dest dir registry.example.com/busybox /media/usb

ایمیج‌ها در این مسیر قرار می‌گیرند:

/media/usb/busybox:1-glibc
/media/usb/busybox:1-musl
/media/usb/busybox:1-ubuntu
...
/media/usb/busybox:latest

ایمیج‌ها در این مسیر قرار دارند:

/media/usb/busybox:1-glibc

اجرای همگام‌سازی:

$ skopeo sync --src dir --dest docker /media/usb/busybox:1-glibc my-registry.local.lan/test/

محتوای رجیستری مقصد:

REPO                                 TAGS
my-registry.local.lan/test/busybox   1-glibc
$ skopeo sync --src docker --dest dir --scoped registry.example.com/busybox /media/usb

تصاویر در این مسیر قرار می‌گیرند:

/media/usb/registry.example.com/busybox:1-glibc
/media/usb/registry.example.com/busybox:1-musl
/media/usb/registry.example.com/busybox:1-ubuntu
...
/media/usb/registry.example.com/busybox:latest

$ skopeo sync --src docker --dest docker registry.example.com/busybox my-registry.local.lan

محتوای رجیستری مقصد:

REPO                         TAGS
registry.local.lan/busybox   1-glibc, 1-musl, 1-ubuntu, ..., latest

$ skopeo sync --src docker --dest docker registry.example.com/repo/busybox my-registry.local.lan/repo

محتوای رجیستری مقصد:

REPO                              TAGS
registry.local.lan/repo/busybox   1-glibc, 1-musl, 1-ubuntu, ..., latest

$ skopeo sync --src docker --dest docker --append-suffix '-mirror' registry.example.com/busybox my-registry.local.lan

محتوای رجیستری مقصد:

REPO                         TAGS
registry.local.lan/busybox   1-glibc-mirror, 1-musl-mirror, 1-ubuntu-mirror, ..., latest-mirror

registry.example.com:
    images:
        busybox: []
        redis:
            - "1.0"
            - "2.0"
            - "sha256:0000000000000000000000000000000011111111111111111111111111111111"
    images-by-tag-regex:
        nginx: ^1\.13\.[12]-alpine-perl$
    images-by-semver:
        alpine: ">= 3.12.0"
    credentials:
        username: john
        password: this is a secret
    tls-verify: true
    cert-dir: /home/john/certs
quay.io:
    tls-verify: false
    images:
        coreos/etcd:
            - latest

اگر نام فایل yaml برابر با sync.yml باشد، اجرای همگام‌سازی بدین صورت است:

$ skopeo sync --src yaml --dest docker sync.yml my-registry.local.lan/repo/

این دستور تصاویر زیر را کپی خواهد کرد: - مخزن registry.example.com/busybox: تمام تصاویر، زیرا برچسبی مشخص نشده است. - مخزن registry.example.com/redis: تصاویر دارای برچسب‌های "1.0" و "2.0" به همراه تصویری با دایجست "sha256:0000000000000000000000000000000011111111111111111111111111111111". - مخزن registry.example.com/nginx: تصاویر دارای برچسب‌های "1.13.1-alpine-perl" و "1.13.2-alpine-perl". - مخزن quay.io/coreos/etcd: تصاویر دارای برچسب "latest". - مخزن registry.example.com/alpine: تمام تصاویر با برچسب‌هایی که با شرط نگارش معنایی (semantic version) ">= 3.12.0" مطابقت دارند ("3.12.0"، "3.12.1"، ...، "4.0.0"، ...).

فهرست کامل مقایسه‌های ممکن برای نگارش معنایی را می‌توان در مستندات کتابخانه بالادستی یافت: https://github.com/Masterminds/semver/tree/v3.2.0#basic-comparisons

ترتیب‌بندی و اولویت نگارش‌ها همان‌گونه که در اینجا تعریف شده، در نظر گرفته می‌شود: https://semver.org/#spec-item-11

برای رجیستری registry.example.com، از اعتبارنامه‌های "john"/"this is a secret" استفاده می‌شود و گواهی‌های TLS سرور در /home/john/certs قرار دارند.

اعتبارسنجی TLS به طور معمول فعال است و می‌توان با تنظیم tls-verify روی false آن را غیرفعال کرد. در مثال بالا، اعتبارسنجی TLS برای registry.example.com فعال بوده، در حالی که برای quay.io غیرفعال شده است..SH "همچنین ببینید (SEE ALSO)" skopeo(1), skopeo-login(1), docker-login(1), containers-auth.json(5), containers-policy.json(5), containers-transports(5)

Flavio Castelli fcastelli@suse.com ⟨mailto:fcastelli@suse.com⟩, Marco Vedovati mvedovati@suse.com ⟨mailto:mvedovati@suse.com⟩