إن استخدام دوكر يوفر العديد من المزايا مثل السماح لك بتغليف التطبيقات في وحدات موحدة لتطوير البرمجيات. هذا يجعل من الأسهل نشر تطبيقاتك وتوسيع نطاقها.
ومع ذلك، فإن إدارة تحديثات صور دوكر على الخادم يمكن أن تصبح مملة. عليك سحب الإصدارات الجديدة للصورة يدويًا وإعادة تشغيل كل حاوية في كل مرة يتم فيها إصدار تحديث.
هنا تأتي أهمية 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
– عنوان خادم SMTPWATCHTOWER_EMAIL_SERVER_PORT
– منفذ خادم SMTPWATCHTOWER_EMAIL_SERVER_USER
– اسم مستخدم SMTPWATCHTOWER_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 لتبسيط تحديث حاوياتك!