در بخش دوم packageهای سیستمعامل را بدون اینترنت در دسترس کردیم. حالا سراغ کانتینرها میرویم: یک رجیستری محلی میسازیم تا ایمیجهای کانتینر هم هنگام قطعی اینترنت روی کلاینتها در دسترس باشند.
یک رجیستری سبک محلی
برای رجیستری از ایمیج رسمی و سبک registry:2 استفاده میکنیم؛ یک سرویس تککانتینری که سازگار با پروتکل استاندارد رجیستری است. آن را با یک مسیر دادهی پایدار اجرا میکنیم:
sudo docker run -d --restart=always --name registry \
-p 5000:5000 -v /srv/registry:/var/lib/registry registry:2
اگر رابط کاربری و کنترل دسترسی میخواهید
Harbor یک گزینهی کاملتر است که رابط وب، کنترل دسترسی (RBAC)، اسکن آسیبپذیری و replication دارد؛ اما سنگینتر است و به منابع بیشتری نیاز دارد. مفهوم پرکردن و استفادهی آفلاین دقیقاً همین است که اینجا میبینید.
پرکردن رجیستری با skopeo
حالا که رجیستری بالا است، ایمیجهای موردنیاز را در حالت آنلاین از بالادست به رجیستری محلی کپی میکنیم. ابزار skopeo این کار را بدون نیاز به pull و push دستی و حتی بدون daemon انجام میدهد:
skopeo copy --dest-tls-verify=false \
docker://docker.io/library/alpine:3.20 \
docker://10.10.0.1:5000/library/alpine:3.20
curl -s http://10.10.0.1:5000/v2/_catalog
registry:2 و کپی ایمیجها با skopeo به رجیستری محلی. پرسوجوی _catalog نشان میدهد ایمیجها روی رجیستری موجودند.pull ایمیج روی کلاینت بدون اینترنت
حالا سراغ همان کلاینت ایزوله میرویم. ابتدا ابزار skopeo را از همان Mirror اپت (بخش دوم) نصب میکنیم؛ یعنی حتی ابزارها هم بدون اینترنت از Mirror محلی میآیند. سپس ایمیج را از رجیستری محلی میگیریم:
sudo apt-get install -y skopeo # از Mirror محلی، بدون اینترنت
skopeo copy --src-tls-verify=false \
docker://10.10.0.1:5000/library/alpine:3.20 \
oci:/tmp/alpine:3.20
alpine از رجیستری محلی 10.10.0.1:5000 گرفته میشود. خروجی، یک ایمیج آماده در قالب OCI است.برای کلاینتهایی که با Docker یا containerd کار میکنند، کافی است رجیستری محلی را بهعنوان یک registry ناامن (insecure) در پیکربندی معرفی کنید یا آن را بهعنوان mirror ثبت کنید تا docker pull و kubelet مستقیماً از رجیستری محلی ایمیج بگیرند؛ باز هم بدون نیاز به اینترنت.
جمعبندی و بخش بعد
در این بخش یک رجیستری کانتینر محلی ساختیم، آن را با skopeo پر کردیم و نشان دادیم یک کلاینت کاملاً بدون اینترنت میتواند ابزارش را از Mirror اپت بگیرد و ایمیج را از رجیستری محلی pull کند. حالا هم packageها و هم ایمیجهای کانتینر آفلاین در دسترساند.
در بخش بعد سراغ وابستگیهای زبانهای برنامهنویسی میرویم: یک Mirror محلی برای PyPI و npm میسازیم تا نصب کتابخانهها هم آفلاین کار کند.
بخشهای این مجموعه
- بخش ۱: مفاهیم، معماری و راهاندازی میزبان Mirror
- بخش ۲: Mirror packageهای سیستمعامل (apt و dnf)
- بخش ۳: رجیستری کانتینر محلی (همین بخش)
- بخش ۴: packageهای زبانها؛ PyPI و npm
- بخش ۵: چارتهای Helm و ایمیجهای سیستم
- بخش ۶: اتوماسیون همگامسازی و بهروزرسانی خودکار