نظرًا لأن حاويات Docker عبارة عن صناديق صغيرة من البرامج، فيمكنك بسهولة نسخها ونقلها من كمبيوتر إلى آخر. قد تكون قد عملت على نسخة Docker على الكمبيوتر المحلي الخاص بك وقررت نقلها إلى خادم أكثر قوة. أو ربما تريد فقط نشر الحاوية المخصصة الخاصة بك على أجهزة كمبيوتر متعددة، “نسخها ولصقها”. في أوقات أخرى، قد تكون غير راضٍ عن مزود الحوسبة السحابية وترغب في التبديل إلى مزود آخر. هنا، نعرض لك كيفية نقل صورة حاوية Docker الحالية ومجلدات البيانات من مضيف Linux إلى آخر.
جيد ان تعلم: ابدأ باستخدام الحاويات عن طريق تثبيت Docker على توزيعة Linux الخاصة بك.
حفظ صورة الحاوية من المضيف المصدر
ابدأ بإدراج حاويات Docker المتاحة التي تعمل على نظامك. في حالتي، أريد تصدير حاوية Nginx Docker الخاصة بي إلى جهاز جديد:
ابحث عن الحاوية التي تريد نسخها ثم أوقف المثيل:
docker stop NAME_OF_INSTANCE
يتم إنشاء حاوية Docker من صورة أولية عامة. بمرور الوقت، يمكنك إضافة تغييراتك الخاصة إلى هذه الصورة الأساسية. قد تقوم العمليات الجارية داخل الحاوية أيضًا بحفظ بياناتها الخاصة أو إجراء تغييرات أخرى. للحفاظ على كل هذا، قم بإيداع الحالة الحالية للحاوية في صورة جديدة:
docker commit NAME_OF_INSTANCE mycontainerimage
لاحظ أنه إذا كانت المثيل قيد التشغيل حاليًا، فسيؤدي هذا الإجراء إلى إيقافه مؤقتًا أثناء حفظ محتوياته. إذا كانت هذه مشكلة، فيمكنك تجنب هذا الإيقاف المؤقت عن طريق إدخال docker commit -p=false NAME_OF_INSTANCE mycontainerimage
بدلاً من ذلك. ومع ذلك، لا تفعل هذا إلا إذا كان ذلك ضروريًا للغاية. تزداد احتمالات إنشاء صورة ببيانات غير متسقة/غير كاملة في هذه الحالة.
الآن، احفظ صورة حاوية Docker التي قمت بتثبيتها حديثًا في ملف أرشيف:
docker save -o mycontainerimage.tar mycontainerimage
استخدم طريقة نقل الملفات المفضلة لديك وانسخ ملف .tar إلى المضيف الذي تريد نقل حاوية Docker إليه. على سبيل المثال، ينقل الأمر التالي صورة Docker الخاصة بي في Nginx باستخدام scp:
scp ./mycontainerimage.tar ramces@my.ip.address.here:/home/ramces/
تصدير مجلد Docker من الحاوية الخاصة بك
أحد الجوانب السلبية لحفظ صورة Docker هو أنها لا تأتي مع ملحقات Docker التي قمت بإعدادها إلى جانب الحاوية الخاصة بك. وهذا يشمل أي عمليات ربط شبكية ومجلدات قمت بإنشائها لتخزين بياناتك الدائمة.
لتصدير حجم البيانات الخاص بك بشكل صحيح، قم أولاً بتثبيت Git على جهازك المحلي:
قم بتشغيل الأمر التالي لتنزيل البرنامج النصي لتصدير الحجم لـ Docker:
git clone https://github.com/ricardobranco777/docker-volumes.sh.git
تأكد من أن البرنامج النصي للتصدير يحتوي على بتات الأذونات الصحيحة، ثم انسخه إلى “/usr/local/bin:” على جهازك
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/
اختبر ما إذا كان البرنامج النصي الخاص بك يعمل بشكل صحيح، ثم استخرج جميع المجلدات المرتبطة بالحاوية الخاصة بك:
docker-volumes.sh -h
docker-volumes.sh NAME_OF_INSTANCE save mycontainerimage-volume.tar
أرسل ملفات مجلد Docker المؤرشفة حديثًا إلى جهازك البعيد:
scp ./mycontainerimage-volume.tar ramces@my.ip.address.here:/home/ramces/
تحميل صورة الحاوية على المضيف الوجهة
قم بتسجيل الدخول إلى المضيف البعيد، ثم قم بتشغيل الأمر التالي لتحميله إلى برنامج Docker الخاص بالجهاز البعيد:
docker load -i ./mycontainerimage.tar
يستخدم docker create
لإعادة تهيئة صورة حاوية Docker الخاصة بك باستخدام علامات التشغيل الأصلية من جهاز المصدر الخاص بك. على سبيل المثال، كانت حاوية Nginx Docker الخاصة بي في الأصل تحتوي على المنفذ 80 المطابق لمنفذ جهاز المضيف 8080:
docker create --name my-nginx-container -p 8080:80 mycontainerimage
قم بتشغيل حاوية Docker المستوردة حديثًا:
docker start my-nginx-container
تأكد من أن الصورة المستوردة تعمل بشكل صحيح عن طريق إدراج جميع الحاويات النشطة في النظام:
لعِلمِكَ: قم بتحويل Raspberry Pi الخاص بك إلى معرض صور محمول قادر عن طريق تثبيت Photoprism مع Docker.
استيراد مجلد Docker إلى الحاوية الخاصة بك
لاستيراد ملف وحدة تخزين Docker .tar، قم أولاً بتنزيل Git على المضيف الجديد الخاص بك:
تمامًا كما هو الحال مع نظامك الأصلي، قم بتنزيل البرنامج النصي المساعد docker-volume.sh، واضبط بتات الأذونات الخاصة به على “تنفيذ”، ثم انسخه إلى دليل “/usr/local/bin” على جهازك الجديد.
قم بإنشاء حاوية Docker جديدة باستخدام ملف الصورة المُصدر:
docker create --name my-nginx-container -v myvol:/usr/share/nginx/html -p 8080:80 mycontainerimage
قم بتشغيل البرنامج النصي docker-volume.sh باستخدام ملف .tar الأصلي لتحميله إلى برنامج Docker daemon الخاص بنظامك الجديد:
docker-volumes.sh my-nginx-container load mycontainerimage-volume.tar
ابدأ تشغيل حاوية Docker الجديدة الخاصة بك عن طريق تشغيل الأمر التالي:
docker start my-nginx-container
اختبر ما إذا كانت الحاوية الخاصة بك تقوم بتحميل وحدة التخزين الخاصة بك بشكل صحيح من خلال النظر إلى بيانات التكوين الداخلية الخاصة بها:
docker inspect -f '{{ .Mounts }}' my-nginx-container
نقل الصورة دون إنشاء ملف
في بعض الأحيان قد ترغب في تخطي إنشاء mycontainerimage.tar.gz
الملف. ربما لا تتوفر لديك مساحة قرص كافية نظرًا لأن الحاوية تحتوي على الكثير من البيانات. يمكنك حفظ الصورة ونقلها وتحميلها على المضيف الوجهة بأمر واحد. بعد تشغيل الأمر docker commit
يمكنك استخدام الأمر الذي تمت مناقشته أعلاه، وهو:
docker save mycontainerimage | ssh ramces@my.ip.address docker load
يجب أن يعمل أيضًا من نظام Windows، لأنه يحتوي الآن على عميل SSH مدمج (لم يعد PuTTY ضروريًا).
استمر مع docker create
الأمر الذي ينطبق على حالتك.
ملحوظة: تأكد من أنك قمت بتثبيت أي وحدة تخزين Docker تم إرفاقها مسبقًا بالحاوية الخاصة بك بشكل صحيح قبل بدء الصورة المستوردة.
أخيرًا، ابدأ تشغيل حاوية Docker المستوردة حديثًا عن طريق تشغيل docker start
متبوعة باسم الحاوية الخاصة بك.
استخدام Docker Compose لنقل نشر Docker بأكمله
بفضل مكون Compose الإضافي، يتيح لك Docker إنشاء برامج معقدة وتكوينها وتشغيلها دون القلق بشأن مجموعة البرامج الأساسية للخادم. وهذا بدوره يسمح لك بإنشاء عمليات نشر تطبيقات قابلة للتكرار عبر أنظمة Linux المختلفة.
لبدء نقل إعداد Docker الحالي إلى Docker Compose، تأكد أولاً من أن البرنامج الإضافي الخاص به موجود حاليًا في نظامك:
sudo apt install docker-compose-plugin docker-buildx-plugin
قم بإنشاء مجلد جديد في الدليل الرئيسي الخاص بك لتثبيت Docker Compose:
mkdir ~/my-docker-compose && cd ~/my-docker-compose
استخدم محرر النصوص المفضل لديك لإنشاء ملف “docker-compose.yml” لتطبيقك:
nano ./docker-compose.yml
قم بلصق كتلة التعليمات البرمجية التالية داخل ملف Compose الخاص بك، ثم قم بتعديلها وفقًا لاحتياجاتك المحددة:
version: '3' volumes: myvol: # Replace with the name of your imported volume. services: nginx: image: mycontainerimage # Replace with the name of your imported Docker image. ports: - "8080:80" volumes: - myvol:/usr/share/nginx/html # Replace "myvol" with the name of your mounted image.
احفظ ملف Compose الجديد، ثم قم بتشغيل الأمر التالي لبدء تشغيله:
أخيرًا، اختبر ما إذا كان نشر Compose يعمل بشكل صحيح. في حالتي، سأختبر حاوية Nginx Docker الخاصة بي من خلال فتح متصفح الويب والانتقال إلى “localhost:8080”.
إن تعلم كيفية نسخ حاوية Docker ونقلها إلى مضيفين آخرين لنظام Linux هو مجرد إحدى المهام القليلة التي يمكنك القيام بها باستخدام جهازك. استكشف هذا العالم الرائع للاستضافة الذاتية من خلال تثبيت خادم Minecraft على Linux باستخدام Docker.