كيفية نسخ الملفات باستخدام أمر Docker cp إلى حاوية Docker الخاصة بك

إذا كنت بحاجة إلى نسخ الملفات من مضيف Docker إلى حاوي Docker الخاص بك، فإن هذا البرنامج التعليمي مناسب لك.

في هذا البرنامج التعليمي، ستتعلم كيفية نسخ الملفات من مضيف Docker إلى حاوية Docker باستخدام طرق متنوعة.

لنبدأ!

المتطلبات

إذا كنت ترغب في متابعة الخطوات بدقة، تأكد من وجود ما يلي:

  • تثبيت Docker على مضيف Linux. يستخدم هذا البرنامج التعليمي إصدار Docker v19.03.11. يمكنك تأكيد إصدار Docker الخاص بك عن طريق تشغيل docker version.
  • تنزيل أي صورة Docker وتوفرها. يستخدم هذا البرنامج التعليمي أحدث صورة NGINX Docker المتاحة على Docker Hub.

نسخ الملفات باستخدام أمر docker cp

لبدء هذا البرنامج التعليمي، ستتعلم كيفية نسخ الملفات من مضيف Docker إلى الحاويات باستخدام docker cp الأمر. يقوم أمر docker cp بنسخ الملفات أو المجلدات بين الحاوية ونظام الملفات المحلي لمضيف Docker الخاص بك والعكس.

دعونا نتعلم كيفية استخدام أمر Docker cp مع مثال.

1. افتح الطرفية على جهازك المحلي.
myfile.txt باستخدام أمر touch. سيتم نسخ myfile.txt من مضيف Docker إلى الحاوية.

touch myfile.txt

docker run سيقوم بإنشاء حاوية جديدة في الخلفية. يحتوي الأمر أدناه على ثلاثة معلمات موضحة أدناه:

  • d flag that runs the container in the background and keeps it alive until deleted.
  • p flag publishes a container’s port 80 to the host on port 80.
  • nginx سيكون الصورة التي سيتم استخدامها لتشغيل الحاوية.
sudo docker run -d -p 80:80 nginx
Executing the Docker run command

4. تحقق مما إذا كانت حاوية Docker قد تم إنشاؤها بنجاح باستخدام أمر docker ps. بعد تنفيذ أمر docker ps, يجب أن ترى قيمة جديدة تم إنشاؤها تحت السمة CONTAINER ID (في الحالة أدناه ccae4670f030) باستخدام صورة NGINX التي تؤكد أن الحاوية تم إنشاؤها بنجاح.

sudo docker ps
Verifying the docker container by running the docker ps command

قبل تنفيذ أمر Docker cp، يكون بناء جملة أمر Docker cp على النحو التالي:

  • CONTAINER: SRC_PATH يحدد المسار المصدري للحاوية.
  • DEST_PATH هو المسار الوجهة على المضيف.
  • CONTAINER: DEST_PATH هو المسار الوجهة على الحاوية.

بالإضافة إلى ذلك، يمكنك أيضًا إضافة options مع المعلمات أدناه في الأمر كما يلي:

  • استخدام الأرشيف أو أ – ينسخ جميع أذونات المستخدم والمجموعة الأساسية للملفات والمجلدات.
  • استخدام إل – تحديد الخيار إل سيسمح بنسخ أي رابط رمزي في مسار المصدر إلى مسار الوجهة.
# بنية الأوامر للنسخ من الحاوية إلى مضيف Docker
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# بنية الأوامر للنسخ من مضيف Docker إلى الحاوية
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5. بعد ذلك، قم بتنفيذ الأمر docker cp. سيقوم الأمر docker cp بنسخ myfile.txt الذي قمت بإنشائه سابقًا إلى دليل /usr/share في الحاويات. ccae4670f030 هو معرف الحاوية التي سيتم نسخ myfile.txt إليها.

sudo docker cp myfile.txt ccae4670f030:/usr/share

6. في النهاية، ادخل إلى الحاوية التي تعمل عبر تشغيل الأمر docker exec مع /bin/bash، والذي يُستخدم كالقشرة الافتراضية لتسجيل الدخول لمستخدم النظام Linux.

  • العلامة i تشير إلى أنك ترغب في فتح جلسة SSH تفاعلية إلى الحاوية. العلامة i لا تغلق جلسة SSH حتى لو لم تكن الحاوية متصلة.
  • العلامة t تخصص نموذجًا افتراضيًا لل-TTY الذي يجب استخدامه لتشغيل الأوامر بشكل تفاعلي.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

ستلاحظ أدناه أنك الآن متصل بقشرة الحاوية عند تشغيل docker exec.

SSH into the running container using docker exec command

7. بعد تسجيل الدخول إلى الحاوية، تحقق مما إذا كان قد تم نسخ myfile.txt إلى الحاوية باستخدام أمر ls.

  • ls هو أمر لعرض ملفات الكمبيوتر في نظام التشغيل Unix ومشابه له.
  • grep سيبحث عن جميع الملفات أو المجلدات التي تبدأ بالسلسلة my داخل دليل usr/share.
Verifying the files in the container

نسخ الملفات باستخدام ملف DockerFile

في القسم السابق، تعلمت كيفية نسخ الملفات إلى الحاوية باستخدام أمر Docker cp. ماذا لو كنت بحاجة إلى نسخ عدة ملفات في مرة واحدة؟ بالتأكيد، يصبح تشغيل أوامر متعددة أمرًا مرهقًا! لحل مشكلة تشغيل العديد من أوامر cp، لماذا لا تجرب نسخ الملفات أو المجلدات إلى الحاويات باستخدام Dockerfile مع أوامر COPY؟

نشر حاوية ونسخ الملفات/المجلدات باستخدام Dockerfile يسمح لك بإزالة خطوات النسخ اليدوية التي قمت بها في القسم السابق. Dockerfile هو وثيقة نصية تحتوي على جميع الأوامر التي يمكن للمستخدم استدعاؤها على سطر الأوامر لتجميع صورة.

لنقم بإنشاء Dockerfile، تشغيل حاوية منه، وأخيرًا نسخ الملفات.

1. قم بإنشاء مجلد باسم ~/host-to-container-copy-demo، ثم قم بتغيير (cd) دليل العمل إلى ذلك المجلد. سيحتوي هذا المجلد على جميع الملفات التي ستقوم بإنشائها في هذا العرض التوضيحي.

mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo

2. الآن، قم بإنشاء ملفي نص بأسماء myfile1.txt و myfile2.txt، قم بنسخهما ولصقهما في الملفات، واحفظهما في دليل ~/host-to-container-copy-demo.

# myfile1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# myfile2.txt
Hello This is my second file !
This is file will be copied in /tmp directory from Docker host to Docker Container.

3. قم بإنشاء ملف آخر، وانسخ/الصق التكوين أدناه، واحفظ الملف بأسم Dockerfile داخل الدليل ~/host-to-container-copy-demo. عند الانتهاء، سيقوم Docker باستخدام هذا DockerFile لتشغيل جميع الأوامر اللازمة لبناء صورة Docker جديدة فوق أي صورة أساسية.

الـ DockerFile أدناه يحتوي على خطوات/تعليمات مختلفة ستقوم ببناء الحاوية الجديدة:

  • FROM تعليمة FROM تهيئ مرحلة بناء جديدة وتحدد الصورة الأساسية للتعليمات التالية.
  • COPY تعليمة COPY تقوم بنسخ ملف من جهاز الاستضافة (مضيف Docker) إلى الحاوية.
# تعليمات لملف Dockerfile لإنشاء صورة جديدة فوق الصورة الأساسية (ubuntu)
# باستخدام الصورة الأساسية ubuntu: latest
FROM ubuntu:latest
# نسخ myfile1.txt إلى دليل /usr/share في الحاويات
COPY myfile1.txt /usr/share
# نسخ myfile2.txt إلى دليل /tmp في الحاويات
COPY myfile2.txt /tmp

4. التحقق من جميع الملفات المطلوبة لإنشاء الصورة الجديدة عن طريق تشغيل الأمر tree. يجب أن تظهر Dockerfile، myfile1.txt، و myfile2.txt تحت الدليل ~/host-to-container-copy-demo.

Verifies files and folders using tree command

5. بعد ذلك، قم ببناء الصورة عن طريق تشغيل الأمر docker build. يتم استخدام العلم t لوسم الصورة updated_ubuntu_image بالعلامة latest و. يسمح لـ Docker بالاختيار من جميع الملفات الضرورية من دليل العمل الحالي.

sudo docker build -t updated_ubuntu_image:latest .
Building the Docker image by running the docker build command

6. الآن، قم بالتحقق من الصورة التي تم بناؤها حديثًا updated_ubuntu_image عن طريق تشغيل الأمر docker images. لاحظ السمة REPOSITORY. هذه السمة هي العلامة التي تم إنشاؤها بالعلم -t في الخطوة السابقة.

sudo docker images
Repository Attribute

7. في النهاية، قم بتشغيل حاوية Docker باستخدام الصورة التي تم بناؤها حديثًا عن طريق تشغيل الأمر docker run. يُستخدم العلم -it لتخصيص pseudo-terminal متصل بـ stdin للحاوية. bash يوفر القشرة الافتراضية لتسجيل الدخول لمستخدم نظام Linux.

sudo docker run -it updated_ubuntu_image bash

سترى الآن أنك الآن في قشرة Bash لحاوية Docker.

Running the container using docker run command.

8. بعد ذلك، قم بالتحقق مما إذا كانت الملفات قد تم نسخها بنجاح في الحاوية في الدلائل /tmp و /usr/share عن طريق تشغيل الأمر ls.

Verifying the files if they are successfully copied on the container

تثبيت حجم التخزين والوصول إلى الملفات باستخدام Docker Volume Command

حتى الآن، لقد تعلمت كيفية نسخ الملفات من المضيف إلى الحاوية باستخدام نهجين مختلفين باستخدام أمر docker cp وDockerFile. هذه المرة، دعنا نتعلم كيفية مشاركة أنظمة الملفات بسهولة بين المضيف والحاويات باستخدام الأمر docker volume.

بفرض أنك ما زلت مسجّل الدخول إلى الطرفية:

1. قم بإنشاء حجم على مضيف Docker عن طريق تشغيل الأمر docker volume create. سينشئ الأمر أدناه حجمًا يسمى my-vol. sudo docker volume create my-vol

sudo docker volume create my-vol

2. تحقق مما إذا تم إنشاء الحجم بنجاح عن طريق تشغيل الأمر docker volume ls. يقوم الأمر docker volume ls بسرد الحجم. بعد تشغيل الأمر docker volume ls، سترى my-vol في سمة VOLUME NAME مما يؤكد أن الحجم تم إنشاؤه بنجاح.

sudo docker volume ls
Listing the docker volumes

3. بعد ذلك، قم بتشغيل الحاوية باستخدام الأمر docker run.

  • تستخدم الحاوية التي تحمل اسم volume_testing صورة nginx: latest.
  • d flag runs the container in the background and keeps it alive until deleted.
  • v flag mounts the volume my-vol created on Docker host to the container’s destination /app directory.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest
Running the Docker command and attaching the volume with the container

٤. تحقق مما إذا كان المجلد my-vol الذي أنشأته سابقًا مرتبطًا بشكل صحيح مع الحاوية باستخدام أمر docker inspect. يوفر أمر docker inspect معلومات عن الحاوية. بعد تشغيل أمر docker inspect، سيعرض جميع تفاصيل الحاوية المحددة (volume_testing)، بما في ذلك تفاصيل الارتباط، كما هو موضح أدناه.

sudo docker inspect volume_testing

أدناه، يؤكد لقطة الشاشة الصورة أن المجلد (my-vol) الذي أنشأته على المضيف متصل بنجاح بمجلد الحاوية /app.

Verifying the volumes in the container

الاستنتاج

في هذا البرنامج التعليمي، تعلمت طرقًا مختلفة لنسخ الملفات أو المجلدات من مضيف Docker إلى الحاويات، مثل استخدام أمر Docker cp، وأوامر Docker volume، و Dockerfile.

إذا كنت تخطط لنسخ البيانات من المضيف إلى حاويات Docker، فأي الطرق تنوي استخدامها؟

Source:
https://adamtheautomator.com/docker-cp/