تحديث حاويات دوكر تلقائيا باستخدام ووتش تاور على أوبونتو

تحديث حاويات دوكر تلقائيا ووتش تاور اوبونتو تثبيت

إن استخدام دوكر يوفر العديد من المزايا مثل السماح لك بتغليف التطبيقات في وحدات موحدة لتطوير البرمجيات. هذا يجعل من الأسهل نشر تطبيقاتك وتوسيع نطاقها.

ومع ذلك، فإن إدارة تحديثات صور دوكر على الخادم يمكن أن تصبح مملة. عليك سحب الإصدارات الجديدة للصورة يدويًا وإعادة تشغيل كل حاوية في كل مرة يتم فيها إصدار تحديث.

هنا تأتي أهمية Watchtower! Watchtower عبارة عن حل قائم على الحاويات التي ستراقب حاويات دوكر الخاصة بك أثناء التشغيل وتراقب التغييرات على الصور التي بدأت منها تلك الحاويات في الأصل.

عندما يكتشف Watchtower أن صورة قد تغيرت، فإنه سيقوم تلقائيًا بإعادة تشغيل الحاويات ذات الصلة لسحب الصورة الجديدة وتشغيل أحدث إصدار.

في هذا الدليل الشامل، سنغطي كيفية تثبيت Watchtower وتكوينه لتحديث الحاويات تلقائيًا على أوبونتو 20.04/22.04.

المتطلبات الأساسية

قبل البدء في تثبيت Watchtower، هناك بعض المتطلبات الأساسية التي تحتاجها:

  • خادم أوبونتو 20.04/22.04 مع دوكر مثبت – يمكنك اتباع دليل تثبيت دوكر لأوبونتو 20.04/22.04
  • تكوين دوكر للبدء التلقائي عند التشغيل (يجب أن يكون الافتراضي)
  • بعض حاويات دوكر قيد التشغيل بالفعل على الخادم والتي ترغب في الاحتفاظ بها محدثة

بمجرد أن يكون خادم أوبونتو الخاص بك جاهزًا مع دوكر نشط وبعض الحاويات قيد التشغيل، يمكننا الانتقال إلى تثبيت Watchtower.

الخطوة 1 – تثبيت Watchtower

يتم توزيع Watchtower كصورة دوكر، لذلك التثبيت بسيط مثل تشغيل حاوية من تلك الصورة. تستضيف صورة Watchtower على Docker Hub.

قم بسحب أحدث صورة Watchtower:

$ docker pull containrrr/watchtower

بمجرد اكتمال تنزيل الصورة، يمكنك تشغيل حاوية Watchtower:

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

دعنا نستعرض الخيارات التي نمررها إلى أمر docker run:

  • -d – يشغل حاوية Watchtower في الوضع المنفصل
  • --name watchtower – يسمي الحاوية “watchtower” لتسهيل التعرف عليها
  • -v /var/run/docker.sock:/var/run/docker.sock – يربط منفذ دوكر في حاوية Watchtower حتى يمكنها التواصل مع ديمون دوكر
  • containrrr/watchtower – صورة دوكر Watchtower للاستخدام

سيقوم هذا بإنشاء وتشغيل حاوية Watchtower في الخلفية جاهزة لبدء مراقبة حاوياتك الأخرى.

الخطوة 2 – تكوين خيارات إشعار Watchtower

بشكل افتراضي، سيقوم Watchtower بالتحقق بصمت من تحديثات صورة الحاوية في الخلفية دون إخطارك. يمكنك تغيير هذا السلوك عن طريق تعيين بعض المتغيرات البيئية عند تشغيل Watchtower:

إشعارات عن الحاويات المحدثة

للحصول على إشعارات عند تحديث Watchtower للحاويات، مرر المتغير البيئي -e WATCHTOWER_NOTIFICATIONS=email.

هناك عدة خيارات للإشعارات:

  • email – سيرسل إشعارات بالبريد الإلكتروني. يتطلب تكوينًا إضافيًا.
  • slack – يمكنه نشر إشعارات على Slack. يتطلب URL webhook وقناة.
  • msteams – أرسل إشعارات إلى MS Teams. يتطلب URL webhook.
  • gotify – أرسل إشعارات عبر Gotify. يتطلب رمز تطبيق وعنوان خادم.

على سبيل المثال:

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=email containrrr/watchtower

سيتم تمكين الإشعارات البريد الإلكتروني عند تحديث الحاويات.

إشعارات عند بدء/إيقاف Watchtower

يمكنك أيضًا الحصول على إشعارات عند بدء حاوية Watchtower أو إيقافها عن طريق تمرير -e WATCHTOWER_NOTIFICATIONS_LEVEL=start-exit:

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=email -e WATCHTOWER_NOTIFICATIONS_LEVEL=start-exit containrrr/watchtower

سيرسل هذا إشعارات عند تحديث الحاويات وعند بدء/إيقاف Watchtower.

تكوين خدمات الإشعار

إذا قمت بتمكين الإشعارات، فستحتاج إلى توفير تكوينات لخدمات الإشعار.

يتم ذلك عن طريق تمرير متغيرات بيئية إضافية أو عن طريق تركيب ملفات تكوين YAML في الحاوية.

تكوين البريد الإلكتروني

لتلقي إشعارات بالبريد الإلكتروني، يجب توفير:

  • WATCHTOWER_EMAIL_FROM – عنوان إرسال رسائل البريد الإلكتروني الإشعارية منه
  • WATCHTOWER_EMAIL_TO – العنوان المراد إرسال الإشعارات إليه
  • WATCHTOWER_EMAIL_SERVER – عنوان خادم SMTP
  • WATCHTOWER_EMAIL_SERVER_PORT – منفذ خادم SMTP
  • WATCHTOWER_EMAIL_SERVER_USER – اسم مستخدم SMTP
  • WATCHTOWER_EMAIL_SERVER_PASSWORD – كلمة مرور SMTP

بالنسبة لـ Gmail، سيبدو الأمر كالتالي:

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=email \
  -e [email protected] \
  -e [email protected] \ 
  -e WATCHTOWER_EMAIL_SERVER=smtp.gmail.com \
  -e WATCHTOWER_EMAIL_SERVER_PORT=587 \
  -e [email protected] \
  -e WATCHTOWER_EMAIL_SERVER_PASSWORD=gmail_password \
  containrrr/watchtower

تكوين Slack

للنشر على Slack، ستحتاج إلى:

  • WATCHTOWER_NOTIFICATIONS_SLACK_WEBHOOK_URL – URL Slack webhook الخاص بك
  • WATCHTOWER_NOTIFICATIONS_SLACK_CHANNEL – قناة Slack للنشر إليها

على سبيل المثال:

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=slack \
  -e WATCHTOWER_NOTIFICATIONS_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx \
  -e WATCHTOWER_NOTIFICATIONS_SLACK_CHANNEL="#channel-name" \
  containrrr/watchtower  

تكوين MS Teams

لإشعارات MS Teams، ستحتاج فقط إلى توفير:

  • WATCHTOWER_NOTIFICATIONS_MSTEAMS_WEBHOOK_URL – URL MS Teams webhook الخاص بك

على سبيل المثال:

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=msteams \
  -e WATCHTOWER_NOTIFICATIONS_MSTEAMS_WEBHOOK_URL=https://webhook.teams.microsoft.com/xxx \
  containrrr/watchtower

استخدام ملفات التكوين

بدلاً من تمرير متغيرات بيئية، يمكنك تعريف تكوينات الإشعار الخاصة بك في ملفات YAML وتركيبها في الحاوية Watchtower.

هذا يتيح لك الاحتفاظ بالتكوينات الخاصة بك خارجيًا وعدم الحاجة إلى تمرير سلاسل أوامر طويلة.

مسارات ملفات التكوين:

  • /config/email.yaml – تكوين البريد الإلكتروني
  • /config/slack.yaml – تكوين Slack
  • /config/msteams.yaml – تكوين MS Teams

قم ببساطة بتركيب ملفات YAML مخصصة فوق الملفات الافتراضية الفارغة.

على سبيل المثال لإشعارات البريد الإلكتروني:

$ docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /path/to/email.yaml:/config/email.yaml \
  containrrr/watchtower

أين سيحتوي email.yaml الخاص بك على:

email:
  from: [email protected]
  to: [email protected]
  server: smtp.gmail.com 
  port: 587
  user: [email protected]
  password: gmail_password

هذا يحافظ على تكوينات الإشعار الخاصة بك خارجية ومنفصلة عن حاوية Watchtower نفسها.

الخطوة 3 – التحكم في الحاويات التي يتم تحديثها

بشكل افتراضي، سيراقب Watchtower جميع الحاويات التي تعمل على ديمون دوكر ويقوم بتحديث أي حاويات تم تحديث الصورة فيها.

يمكنك استبعاد حاويات حسب الاسم أو التصنيف لمنع Watchtower من تحديثها تلقائيًا:

استبعاد حسب اسم الحاوية

مرر خيار --exclude مع مرشح regex للأسماء:

$ docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --exclude "اسم-الحاوية|حاوية-أخرى"

استبعاد حسب تصنيف الحاوية

قم بتصنيف الحاويات بـ com.centurylinklabs.watchtower.enable=false لاستبعادها:

$ docker run -d --label com.centurylinklabs.watchtower.enable=false nginx

سيتم تجاهل الحاويات المزودة بهذا التصنيف من قبل Watchtower.

تضمين الحاويات المطابقة فقط

يمكنك أيضًا إنشاء قائمة بيضاء للحاويات لتحديث فقط الحاويات المطابقة لنمط ما باستخدام --include:

$ docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --include "حاوية-أ|حاوية-ب"

الآن، سيقوم Watchtower تلقائيًا بتحديث الحاويات المسماة حاوية-أ أو حاوية-ب فقط، متجاهلاً باقي الحاويات.

الخطوة 4 – تغيير فترات استطلاع Watchtower

يقوم Watchtower بالتحقق من وجود صور جديدة كل بضع دقائق بشكل افتراضي. يمكنك تغيير مدى تواتر البحث عن صور جديدة من قِبل Watchtower.

التحقق من وجود صور جديدة

لتغيير مدى تواتر التحقق من وجود صور جديدة، مرر خيار --interval مع سلسلة المدة الزمنية:

$ docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --interval 5m

سيجعل هذا Watchtower يتحقق من وجود صور جديدة كل 5 دقائق.

إعادة تشغيل الحاويات

بشكل افتراضي، سينتظر Watchtower 10 دقائق بعد تحديث الصورة قبل إعادة تشغيل الحاويات. يمكنك تعديل المدة التي ينتظرها Watchtower قبل إعادة التشغيل باستخدام --restart-delay:

$ docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --restart-delay 2m 

سيضبط هذا تأخير إعادة التشغيل إلى دقيقتين.

الخطوة 5 – أتمتة بدء تشغيل Watchtower

الخطوة الأخيرة هي التأكد من بدء تشغيل Watchtower تلقائيًا عند بدء تشغيل ديمون دوكر. سيقوم هذا بتشغيل Watchtower في كل مرة تقوم فيها بإعادة تشغيل الخادم.

يمكنك إنشاء ملف وحدة systemd بسيط لبدء تشغيل Watchtower عند التشغيل.

أنشئ ملف وحدة على /etc/systemd/system/watchtower.service بهذا التعريف:

[Unit]
Description=Watchtower - تحديث حاويات دوكر تلقائيا  
Requires=docker.service
After=docker.service
[Service] 
Restart=always
ExecStart=/usr/bin/docker start -a watchtower
ExecStop=/usr/bin/docker stop -t 2 watchtower
[Install]
WantedBy=multi-user.target

سيقوم هذا بتشغيل حاوية Watchtower التي أنشأناها عند بدء تشغيل ديمون دوكر.

أعد تحميل systemd ومكّن خدمة Watchtower لبدء التشغيل عند التشغيل:

$ sudo systemctl daemon-reload
$ sudo systemctl enable watchtower

سيتم الآن بدء تشغيل Watchtower تلقائيًا في كل مرة تقوم فيها بإعادة تشغيل الخادم.

الخطوة 6 – إعداد Watchtower في ملف Docker Compose

يمكنك أيضًا تشغيل Watchtower كجزء من مجموعة Docker Compose.

أضف خدمة watchtower إلى ملف docker-compose.yml الخاص بك كما يلي:

version: "3"
services:
  app:
    image: myapp
    ports:
      - "8080:80"
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 30

سيقوم هذا بتشغيل Watchtower جنبًا إلى جنب مع حاويات التطبيق/الخدمة المحددة في ملف compose الخاص بك.

سيراقب Watchtower الخدمات الأخرى ويقوم تلقائيًا بتحديث أي صور مع إصدار إصدارات جديدة.

يقوم التضمين volumes بتوصيل منفذ Docker حتى يمكن لـ Watchtower التواصل مع ديمون Docker.

يحدد command فاصل الفحص إلى 30 ثانية. يمكنك تخصيص هذه الفترة حسب الحاجة.

الآن عند تشغيل docker-compose up، سيقوم Watchtower بالاحتفاظ بتحديث الصور الخاصة بك تلقائيًا!

يتيح لك استخدام Docker Compose إضافة مراقبة Watchtower بسهولة إلى المجموعات الجديدة والحالية. ما عليك سوى إضافة خدمة watchtower والتضمين volume لبدء تحديث أي صور جديدة أو حالية تلقائيًا.

الخلاصة

في هذا الدليل، غطينا كيفية تثبيت وتكوين Watchtower لتحديث حاويات Docker الخاصة بك تلقائيًا.

تتضمن النقاط الرئيسية:

  • يعمل Watchtower كحاوية Docker لمراقبة الحاويات الأخرى
  • يمكن للإشعارات أن تنبهك عند تحديث Watchtower للحاويات
  • استبعاد الحاويات من التحديثات التلقائية حسب الاسم أو التصنيف
  • تغيير تواتر Watchtower في البحث عن صور جديدة
  • إنشاء ملف وحدة systemd لتشغيل Watchtower عند التشغيل

مع تشغيل Watchtower، لم يعد عليك التحقق يدويًا من تحديثات صور Docker أو إعادة تشغيل الحاويات. سيحافظ Watchtower على حداثة حاوياتك تلقائيًا في الخلفية.

هذا يبسط إدارة تحديثات الحاويات بشكل كبير مع نمو البنية الخاصة بك. جرّب Watchtower لتبسيط تحديث حاوياتك!

LEAVE A COMMENT