مقدمه
در محیطهایی که به اینترنت دسترسی ندارید (Airgap)، نیاز است Docker را طوری تنظیم کنید که بتوانید از یک رجیستری داخلی (Local Registry) برای pull و push image استفاده کنید. این راهنما شما را با روشهای مختلف پیکربندی Docker Client در حالت Airgap آشنا میکند. پیشنهاد میکنیم ابتدا پست مرتبط «راهاندازی Docker Registry» را مطالعه کنید.
تنظیم Docker daemon برای استفاده از Registry داخلی
برای اینکه Docker بتواند با رجیستری داخلی شما (بدون TLS) ارتباط برقرار کند، باید فایل /etc/docker/daemon.json را ویرایش کنید:
{
"insecure-registries": ["YOUR_REGISTRY_IP:5000"],
"registry-mirrors": ["https://YOUR_MIRROR_URL"]
}سپس Docker را ریاستارت کنید:
sudo systemctl restart dockerنکته: گزینه insecure-registries برای رجیستریهای HTTP یا دارای گواهی نامعتبر استفاده میشود. اگر رجیستری شما TLS دارد نیازی به این گزینه نیست.Pull و Push از Registry محلی
پس از تنظیم daemon، میتوانید مستقیماً از رجیستری محلی خود pull کنید:
docker pull YOUR_REGISTRY_IP:5000/myimage:latestبرای آپلود image به رجیستری داخلی، ابتدا tag کنید سپس push کنید:
docker tag myimage:latest YOUR_REGISTRY_IP:5000/myimage:latest
docker push YOUR_REGISTRY_IP:5000/myimage:latestتنظیم Docker Client با متغیرهای محیطی
اگر Docker daemon روی سرور دیگری اجرا میشود، میتوانید با متغیر DOCKER_HOST به آن متصل شوید:
export DOCKER_HOST=tcp://YOUR_SERVER_IP:2375همچنین میتوانید این متغیر را در ~/.bashrc یا ~/.zshrc اضافه کنید تا دائمی شود.
اخطار: استفاده از TCP بدون TLS ناامن است. در محیط production حتماً از TLS یا SSH tunnel استفاده کنید.
راهاندازی Docker Registry بهعنوان Mirror کش
اگر گاهی به اینترنت محدود دسترسی دارید، میتوانید Docker Registry را بهعنوان یک cache mirror راهاندازی کنید. بدین ترتیب imageهایی که یک بار pull شدهاند در کش باقی میمانند و در دفعات بعد از رجیستری محلی سرو میشوند. برای جزئیات بیشتر به پست «راهاندازی Docker Registry» مراجعه کنید.
بارگذاری تصاویر با Save و Load (راهحل جایگزین)
اگر رجیستری داخلی در دسترس نیست یا فقط نیاز به یک استقرار یکباره دارید، میتوانید image را در یک سیستم دارای اینترنت ذخیره کرده و به سیستم مقصد منتقل کنید:
docker save myimage:latest | gzip > myimage.tar.gzفایل myimage.tar.gz را به سیستم مقصد (مثلاً با USB یا SCP) منتقل کنید و در آنجا بارگذاری کنید:
docker load -i myimage.tar.gzنکته: این روش برای استقرارهای یکباره یا محیطهایی که رجیستری ندارند مناسب است. برای استفاده مداوم، راهاندازی Docker Registry داخلی توصیه میشود.