ذكري المظهر

كيفية بناء صور عامل ميناء مع dockerfile

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks

جدول المحتويات:

Anonim

صورة Docker هي مخطط حاويات Docker الذي يحتوي على التطبيق وكل ما تحتاجه لتشغيل التطبيق. الحاوية هي نسخة وقت التشغيل لصورة.

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

ما هو Dockerfile

ملف Dockerfile هو ملف نصي يحتوي على جميع الأوامر التي يمكن للمستخدم تشغيلها في سطر الأوامر لإنشاء صورة. ويشمل جميع الإرشادات التي يحتاجها Docker لبناء الصورة.

تتكون صور Docker من سلسلة من طبقات نظام الملفات التي تمثل الإرشادات الموجودة في Dockerfile للصورة والتي تشكل أحد تطبيقات البرامج القابلة للتنفيذ.

يأخذ ملف Docker النموذج التالي:

# Comment INSTRUCTION arguments

لا يعتبر INSTRUCTION حساسًا لحالة الأحرف ، ولكن الاتفاقية تستخدم UPPERCASE لأسمائها.

فيما يلي القائمة مع وصف موجز لبعض الإرشادات الأكثر استخدامًا Dockerfile:

  • ARG - يسمح لك هذا الإرشادات بتحديد المتغيرات التي يمكن تمريرها في وقت الإنشاء. يمكنك أيضًا تعيين قيمة افتراضية. من - الصورة الأساسية لبناء صورة جديدة. يجب أن يكون هذا الإرشادات أول تعليمة غير تعليق في Dockerfile. الاستثناء الوحيد من هذه القاعدة هو عندما تريد استخدام متغير في الوسيطة FROM . في هذه الحالة ، يمكن أن يسبق FROM إرشادات ARG أو أكثر. LABEL - يستخدم لإضافة بيانات التعريف إلى صورة ، مثل الوصف والإصدار والمؤلف.. إلخ. يمكنك تحديد أكثر من LABEL ، وكل تعليمة LABEL هي زوج قيمة مفتاح. RUN - سيتم تنفيذ الأوامر المحددة في هذه التعليمات أثناء عملية الإنشاء. ينشئ كل تعليمة RUN طبقة جديدة أعلى الصورة الحالية. إضافة - تستخدم لنسخ الملفات والدلائل من المصدر المحدد إلى الوجهة المحددة على صورة عامل ميناء. يمكن أن يكون المصدر ملفات أو أدلة محلية أو عنوان URL. إذا كان المصدر هو أرشيف القطران المحلي ، فسيتم تفريغه تلقائيًا في صورة Docker. COPY - يشبه ADD لكن المصدر يمكن أن يكون ملفًا محليًا أو دليلًا فقط. ENV - يسمح لك هذا الإرشادات بتحديد متغير بيئة. CMD - يستخدم لتحديد أمر سيتم تنفيذه عند تشغيل حاوية. يمكنك استخدام تعليمة CMD واحدة فقط في Dockerfile. ENTRYPOINT - على غرار CMD ، تحدد هذه التعليمات الأمر الذي سيتم تنفيذه عند تشغيل الحاوية. WORKDIR - يعين هذا التوجيه دليل العمل الحالي لتعليمات RUN و CMD و ENTRYPOINT و COPY و ADD . USER - اضبط اسم المستخدم أو UID لاستخدامه عند تشغيل أي من تعليمات RUN و CMD و ENTRYPOINT و COPY و ADD . حجم - يتيح لك تحميل دليل الجهاز المضيف إلى الحاوية. EXPOSE - يستخدم لتحديد المنفذ الذي تستمع إليه الحاوية في وقت التشغيل.

لاستبعاد الملفات والدلائل من إضافتها إلى الصورة ، قم بإنشاء ملف .dockerignore في دليل السياق. يشبه بناء جملة .dockerignore ملف Git.

للحصول على مرجع كامل وشرح مفصل لتعليمات Dockerfile ، انظر الصفحة المرجعية الرسمية Dockerfile.

إنشاء Dockerfile

يتمثل السيناريو الأكثر شيوعًا عند إنشاء صور Docker في سحب صورة موجودة من سجل (عادةً من Docker Hub) وتحديد التغييرات التي تريد إجراؤها على الصورة الأساسية. الصورة الأساسية الأكثر استخدامًا عند إنشاء صور Docker هي جبال الألب لأنها صغيرة الحجم ومُحسّنة للتشغيل في ذاكرة الوصول العشوائي.

Docker Hub هي خدمة التسجيل المستندة إلى مجموعة النظراء والتي يتم استخدامها من بين وظائف أخرى للحفاظ على صور Docker إما في مستودع عام أو خاص.

في هذا المثال ، سنقوم بإنشاء صورة Docker لخادم Redis. سنستخدم أحدث إصدار من أوبونتو 18.04 كصورة أساسية.

أولاً ، قم بإنشاء دليل يحتوي على Dockerfile وكافة الملفات الضرورية:

mkdir ~/redis_docker

انتقل إلى الدليل وإنشاء ملف Dockerfile التالي:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

دعنا نوضح معنى كل سطر في Dockerfile:

  • في السطر 1 نحدد الصورة الأساسية. تعليمات RUN التي تبدأ في السطر 3 ستقوم بتحديث الفهرس apt وتثبيت حزمة "خادم redis" وتنظيف ذاكرة التخزين المؤقت apt الأوامر المستخدمة في التعليمات هي نفس الأوامر التي ستستخدمها لتثبيت redis على خادم Ubuntu. تحدد تعليمات EXPOSE المنفذ الذي يستمع إليه خادم redis. في السطر الأخير ، نستخدم تعليمة CMD لتعيين الأمر الافتراضي التي سيتم تنفيذها عند تشغيل الحاوية.

احفظ الملف وأغلق المحرر.

بناء الصورة

والخطوة التالية هي بناء الصورة. للقيام بذلك ، قم بتشغيل الأمر التالي من الدليل حيث يوجد Dockerfile:

docker build -t linuxize/redis.

يحدد الخيار -t اسم الصورة واختياريا اسم مستخدم وعلامة في تنسيق 'اسم المستخدم / imagename: العلامة'.

سيبدو ناتج عملية الإنشاء كما يلي:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

عند اكتمال عملية الإنشاء ، سيتم إدراج الصورة الجديدة في قائمة الصور:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

تشغيل الحاوية

الآن بعد أن تم إنشاء الصورة ، يمكنك تشغيل حاوية منها عن طريق تشغيل:

docker run -d -p 6379:6379 --name redis linuxize/redis

تخبر خيارات -d Docker بتشغيل الحاوية في الوضع المنفصل ، وسيقوم الخيار -p 6379:6379 بنشر المنفذ 6379 على الجهاز المضيف --name redis خيار --name redis اسم الحاوية. الوسيطة الأخيرة linuxize/redis هي اسم الصورة ، والتي تُستخدم لتشغيل الحاوية.

عند بدء تشغيل الحاوية ، استخدم الأمر التالي لسرد جميع حاويات التشغيل:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

للتحقق من أن كل شيء يعمل لأنه يجب أن يستخدم redis-cli للاتصال بحاوية الرصيف:

redis-cli ping

يجب أن يستجيب خادم redis مع PONG .

استنتاج

غطى هذا البرنامج التعليمي فقط أساسيات استخدام Dockerfiles لبناء الصور. لمعرفة المزيد حول كيفية كتابة Dockerfiles وأفضل الممارسات الموصى بها ، راجع أفضل الممارسات لكتابة Dockerfiles.

عامل ميناء