إذا كنت تبحث عن معلومات حول كيفية تثبيت Docker على Ubuntu، فأنت في المكان الصحيح. ليس فقط ذلك، ولكن كمكافأة، ستعلم هذه الدورة التعليمية أيضًا كيفية تشغيل الأوامر الأساسية لـ Docker لتشغيل وإدارة الحاويات.
باستخدام ميزات مفيدة من Visual Studio (VS) Code، ستتعلم أيضًا كيفية تعزيز مهارات SSH الخاصة بك. لنبدأ!
ذات صلة: رجل ويندوز في عالم لينكس: VS Code و SSH عن بعد
المتطلبات
إذا كنت ترغب في متابعة الخطوات خطوة بخطوة، في هذه الدورة التعليمية، تأكد من أن لديك ما يلي:
- A fresh install of Ubuntu Server LTS with SSH Enabled (This guide will be using Ubuntu Server LTS 20.04.1)
- A Windows Machine with VSCode installed (This guide will be using Visual Studio Code 1.52.1)
- الامتداد الرسمي لـ VSCode SSH مثبتًا ومتصلاً بخادم Ubuntu Server LTS الخاص بك
تثبيت Docker على Ubuntu
لنبدأ بتثبيت Docker على Ubuntu. في هذه النقطة، يفترض هذا البرنامج التعليمي أنك تستخدم كمبيوتر Windows المحلي الخاص بك مع فتح VS Code متصلًا بخادم Ubuntu الخاص بك عبر SSH. تعرف على كيفية إعداد هذا البيئة المفيدة في أحدث مقال حول استخدام VS Code و SSH.
في المثال أدناه، يتم توصيل VSCode عن بعد بـ Ubuntu مع مجلد الرئيسي (في هذه الحالة، /home/homelab) المفتوح كمساحة عمل:

العملية الفعلية لتثبيت Docker في خادم Ubuntu عبارة عن أمرين فقط. تجعل Ubuntu Docker متاحًا كخيار تثبيت في مدير الحزم الافتراضي الذي يأتي مع Ubuntu المعروف باسم apt
.
في نافذة الطرفية SSH في VS Code ، قم بتشغيل الأمرين التاليين لتثبيت Docker:
أثناء تثبيت خادم Ubuntu ، ربما تكون قد تم عرض الخيار لتثبيت Docker كـ snap. إذا كنت قد فعلت ذلك ، قم أولاً بإزالة حزمة snap عبر تشغيل
sudo snap remove docker
يمكنك مشاهدة تثبيت Docker في الرسم المتحرك أدناه:

يكفي Ubuntu أن تمكن تلقائيًا وتعيين الخدمة للبدء عند التمهيد بالنسبة لك ، لذا أنت جاهز لبدء استخدام Docker!
إنشاء وتشغيل حاوية Docker على Ubuntu
الآن بعد أن قمت بتثبيت Docker ، ماذا يمكنك القيام به؟ دعونا نبدأ بإنشاء حاوية Docker. سيقوم هذا البرنامج التعليمي بإعداد خادم ويب ثابت كمثال جيد على حاوية Docker. في هذا القسم ، ستقوم ب:
- إعداد حاوية جديدة من مستودع الصور Docker Hub لتشغيل خدمة HTTP
- استخدام رسم الخرائط لربط منفذ HTTP داخل الحاوية بخادم Ubuntu الخاص بك
- إعداد الربط الملزم لربط البيانات المهمة من داخل الحاوية بخادم Ubuntu الخاص بك
- قم بإعداد الاستمرارية من خلال إعادة التشغيل لحاويتك
إذا كان أي من الخطوات المذكورة أعلاه غير واضحة، لا تقلق، سنغطي كل خطوة، واحدة تلو الأخرى لمساعدتك على فهم العملية.
تحميل صورة Docker
أول سؤال يجب أن تطرحه هو، من أين ستأتي هذه الحاوية؟ دعنا نلقي نظرة على Docker Hub.
A large part of Docker is understanding image repositories. Rather than being distributed like packages, services in Docker get distributed as Docker Images.
A Docker Image is a snapshot of the software that the publisher wants to distribute and the entire filing system! This is analogous to creating .wim image of Windows.
تجعل هذه النظام الملفات المأخوذة للـ Docker شائعة للغاية: يتم أخذ البرنامج مع بيئة التشغيل بأكملها. وبذلك، يتم التخلص من المشاكل المتعلقة بالاختلافات بين بيئات الخادم.
أحد أكثر المستودعات شهرة (والافتراضية) للصور هو Docker Hub والمعروف أيضًا باسم مستودع Docker الرسمي. يعتبر مستودع الصور هو المكان الذي يمكنك من خلاله تنزيل آلاف الصور المُنشأة مسبقًا لتشغيلها كحاويات.
نظرًا لأن هذا البرنامج التعليمي يقوم بإعداد خادم ويب ثابت، فإنك بحاجة إلى تنزيل صورة خادم ويب. أشهر خادمي ويب المتوفرين هنا هما Apache httpd و Nginx ولكن لتغيير الأمور قليلاً وربما لإلقاء نظرة على خادم ويب جديد، دعنا نستخدم واحد يسمى Caddy.
يُعرف Caddy بكونه خادم ويب يتميز ببساطته. يمكن استخدام العديد من تكوينات الخادم الصالحة باستخدام سطر واحد فقط في ملف. البساطة جيدة وتشكل أيضًا مثالاً جيداً.
- أولاً ، ستحتاج إلى العثور على صورة Docker. على جهاز الكمبيوتر الخاص بك الذي يعمل بنظام Windows ، انتقل إلى https://hub.docker.com.
- قم بالبحث عن caddy في الزاوية اليسرى العليا من الصفحة. يجب أن ترى صفحة مشابهة للصورة التالية:

A benefit (and downside) of Docker Hub is that anyone, even you, can create and upload Docker Images to the site.
يجب أن تكون حذرًا للتأكد من أن الصورة التي تختارها قادمة من مصدر موثوق. يمكن لأي شخص وضع برمجيات ضارة في الصورة إذا اختار ذلك وقام بتحميل إصداره إلى Docker Hub.
ثالثاً ، لاحظ اسم الصورة. في لقطة الشاشة أعلاه ، الاسم هو caddy بالضبط. ستحتاج إلى هذا الاسم لتحديد اسم الصورة في الخطوات التالية.
تشغيل حاوية باستخدام Docker على أوبونتو
بمجرد معرفة اسم الصورة التي ترغب في تنزيلها ، حان الوقت لتنزيلها وإنشاء حاوية منها.
بدء تشغيل حاوية من صورة يتطلب أمرًا واحدًا فقط. في محطة SSH المتصلة بخادم أوبونتو الخاص بك ، قم بتشغيل الأمر التالي docker run
.
الأمر أدناه يتحقق من وجود صورة caddy على الجهاز المحلي. إذا لم تكن موجودة ، فإنه يقوم بتنزيل الصورة من Docker Hub ، وإنشاء حاوية وتشغيلها. يستخدم الأمر أدناه مفتاح -p
لرسم تطابق المنفذ الاستماع إلى خادم أوبونتو المنفذ 80 مع المنفذ 80 للحاوية. يُسمى هذا الميزة تعيين المنفذ.
معظم صور Docker Hub تتبع تقليدًا في التسمية يتضمن <user>/<اسم الصورة>. ومع ذلك ، الصور التي يتم تسويقها باسم “رسمي” من قبل Docker ليس لها <user> أمامها (مثل caddy أعلاه).
تعمل الأمر أعلاه كما يلي ، حيث يتم عرض معلومات سجل caddy مباشرة في الطرفية:

قد تلاحظ أن جميع أوامر Docker تبدأ بـ
sudo
، لإجبار الأوامر على تشغيلها كمسؤول. بشكل افتراضي ، يعمل خدمة Docker كـroot
، ويجب أن تقوم بجميع التغييرات التي تقوم بها على الحاويات أو الصور كمسؤول.
و… أنت الآن مستعد! هذا كل شيء. أليس من الرائع أنك قمت بتثبيت Docker على Ubuntu؟
الآن انتقل إلى http://<your-ip> على جهاز الكمبيوتر الخاص بك ويجب أن ترى صفحة هبوط لـ Caddy. يمكنك رؤية ذلك أدناه (تم استبدال عنوان IP في هذا الدليل بـhttp://homelab-docker):

يعمل الحاوية caddy الآن ولكن ربما لاحظت مشكلة. يستغرق تشغيل تلك الأمر docker
السيطرة على سطر الأوامر. لا يمكنك تشغيل المزيد من الأوامر ، وإذا انتهت الجلسة ، يتوقف تشغيل الحاوية. دعنا نحل تلك المشكلة عن طريق تشغيل الحاوية في الخلفية (المعروفة أيضًا باسم الانفصال عن الحاوية).
تشغيل حاويات Docker في الخلفية
الآن لديك حاوية تعمل ولكن سطر الأوامر معلق. لا يمكنك القيام بأي شيء آخر. تحتاج إلى طريقة أفضل لبدء حاوية عن طريق تشغيلها في الخلفية مثل خدمة. للقيام بذلك:
- قم بإيقاف تشغيل الحاوية الحالية عن طريق الضغط على control+c في سطر الأوامر. يجب أن يعيد ذلك سطر الأوامر الخاص بك.
- الآن، قم بتشغيل نفس الأمر السابق ولكن هذه المرة مع المعامل
-d
كما هو موضح أدناه. سترى أن Docker سيعيد رقم التعريف الخاص بالحاوية ويعيد سطر الأوامر إليك.

إدارة الحاويات الخلفية باستخدام أوامر Docker
بمجرد أن يكون لديك حاويات Docker خلفية واحدة أو أكثر تعمل، ستحتاج إلى إدارتها بطريقة ما. يوفر لك Docker عدة أوامر مختلفة للقيام بذلك باستخدام أوامر docker container
.
sudo docker container list -a
: يعرض قائمة بجميع الحاويات (التي تعمل والتي تم إيقافها) وحالتهاsudo docker container stop <name>
: يتوقف عن تشغيل حاوية Docker باستخدام اسمها (أو باستخدام معرفها)sudo docker container start <name>
: يبدأ تشغيل حاوية Docker باستخدام اسمها (أو باستخدام معرفها)sudo docker container prune
: يقوم بتدمير وإزالة جميع الحاويات التي تم إيقاف تشغيلها
يمكنك رؤية جميع الأوامر المذكورة أعلاه المستخدمة في سياق الصورة أدناه:

هناك العديد من أوامر حاويات Docker الأخرى لعرضها وتغييرها وتفقدها، أو حتى الوصول إلى الحاويات عن بُعد على الخادم الخاص بك. يمكنك عرضها جميعًا عن طريق تشغيل الأمر
sudo docker container --help
.
على الرغم من أنك الآن قد نشرت خادم ويب في حاوية تعمل في الخلفية، لا يزال لديك طريقة لاستضافة المحتوى الخاص بك. حاليًا، Caddy يخدم صفحة الويب الافتراضية.
لنلقي نظرة الآن على كيفية استخدام صور Docker باستخدام مفهوم يُسمى ربط التحميلات لنشر حاويات تحتوي على بيانات ذات معنى.
تخزين بيانات الحاوية باستخدام ربط التحميلات
يعتمد Docker على مفهوم الصور (والحاويات التي تُنشئ) على أنها قابلة للتجاوز أو عابرة. إذا كان هناك تحديث لبرنامج Caddy ، فليس عليك تحديث الخدمة ، بل يتعين عليك التخلص من الحاوية بأكملها واستخدام صورة جديدة تمامًا من البداية.
فوائد التخلص وإعادة إنشاء الحاويات مثل هذه هي ذات أهمية. تتم إدخال عدم الاستقرار في البرمجيات مع مرور الوقت من خلال تحديث برنامج قديم (بالإمكان أن يكون لعدة سنوات). من خلال استخدام صورة جديدة في كل مرة ، يوفر لك Docker قاعدة مستقرة وموثوقة (على الأرجح) تم اختبارها في كل تحديث.
هذا المفهوم يعادل استخدام تثبيت جديد لنظام Windows في كل مرة تحدث فيها تطبيقات Windows الخاصة بك. فكرة غير ممتعة على Windows ، ولكنها قابلة للتطبيق بشكل كبير في Docker.
ومع ذلك ، يوجد مشكلة واضحة في المنهجية القابلة للتجاوز. لا تريد أن تتخلص من البيانات الأساسية عندما تتم إزالة الخدمة الحالية. يحل Docker هذه المشكلة باستخدام مفهوم يُسمى ربط التحميلات.
لنلقي الآن نظرة على كيفية إنشاء تحميل مرتبط لحاوية.
إنشاء هيكل المجلد وتنظيفه
قبل أن تتمكن من استخدام ربط التحميلات ، تحتاج إلى إنشاء موقع لتخزين هذه البيانات. ستقوم هذه الدورة التعليمية بإنشاء مجلد في دليل المنزل الخاص بك. للقيام بذلك في VS Code أثناء الاتصال بخادم Ubuntu الخاص بك:
- انقر بزر الماوس الأيمن في منطقة فارغة من لوحة المستكشف في VS Code واختر “مجلد جديد”.
2. قم بتسمية المجلد الجديد بـ “containers/caddy/files”.
أسماء المجلدات هي حسب اختيارك طالما تم تعريفها بشكل صحيح في أمر Docker القادم. بواسطة استخدام شرطة مائلة، يفسر VS Code ذلك على أنه إنشاء ثلاثة مجلدات. مجلد “files” هو مجلد فرعي لمجلد “caddy”، و “caddy” هو مجلد فرعي لـ “containers”. ليس عليك استخدام هذه الهيكلة للمجلدات، ولكنها تجعل المزيد من المعنى عندما يكون لديك عدة حاويات على نفس الخادم.
إذا لم يتم القيام بذلك مسبقًا، قم بإيقاف وإزالة أي حاويات قمت بإنشائها مسبقًا باستخدام ما يلي:
يمكنك رؤية هذا الأمر في لقطة الشاشة أدناه:

نشر حاوية Caddy بربط المجلدات
الآن لديك هيكل المجلدات المنشأ على خادم Ubuntu. حان الوقت لإنشاء حاوية Caddy بربط المجلدات.
- قبل أن تتقدم كثيرًا، ابحث أولاً عن موقع تخزين البيانات الثابتة للحاوية التي تعمل عليها. سيكون هذا الموقع مختلفًا اعتمادًا على من قام بإنشاء صورة Docker والغرض الذي تخدمه.
أفضل خيار للعثور على مكان تخزين البيانات المستمرة هو التحقق من الوثائق داخل Docker Hub للصورة المعنية. بالنسبة لـ Caddy، يمكنك العثور على الوثائق هنا:

2. ابدأ تشغيل الحاوية باستخدام الأمر التالي. المعلمة -v ~/containers/caddy/files:/usr/share/caddy
تقوم بربط المسار قبل الفاصلة (~/containers/caddy/files) بالمجلد داخل الحاوية (/usr/share/caddy). يعمل هذا بشكل مشابه للغاية لأمر تعيين المنفذ: باستثناء أنك تقوم بربط مجلد بدلاً من منفذ. هذا النوع من الأمر يسمى ربط التركيبة.
الموجة (
~
) في الكود أعلاه تشير إلى المجلد الرئيسي. في هذه المقالة، فهذا ما يعادل/home/homelab
.
3. قم بفتح متصفح وانتقل مرة أخرى إلى عنوان http الخاص بالخادم. ستلاحظ أن الخادم يخدم الآن صفحة 404
. هذا متوقع لأن ليس لديك حاليًا ملف index.html في ~/containers/caddy/files.
4. قم بإنشاء ملف index.html في ~/containers/caddy/files على خادم Ubuntu في نافذة مستكشف VS Code الذي يبدو كما يلي:
5. انتقل إلى عنوان HTTP الخاص بالخادم الخاص بك وتحقق من أن الحاوية تخدم الآن صفحة index.html الجديدة الخاصة بك.
يمكنك رؤية كل ما سبق في الرسوم المتحركة التالية:

على عكس أوامر إدارة Docker ، لا تتطلب الملفات التي تقوم بإنشائها (مثل index.html) حقوق الإدارة. يحدث ذلك لأنك تمتلك المحتوى الذي يقدمه خادم caddy ، حيث يكون في مجلد المستخدم الخاص بك.
التحقق من صحة الارتباط الملزم
رائع! ليس فقط أنت تستخدم حاوية Docker جديدة تمامًا ، بل أن تلك الحاوية تقدم المحتوى المحفوظ محليًا في مجلد المستخدم الخاص بك! يمكنك إثبات ذلك عن طريق تشغيل ما يلي:
- قم بإيقاف وإزالة الحاوية التي تعمل حاليًا. يقوم هذا الخطوة بإزالة كل شيء بما في ذلك ملف index.html إذا لم تكن تستخدم روابط ملزمة.
2. إنشاء حاوية جديدة تمامًا.
3. التحقق من أن الحاوية الجديدة لا تزال تقدم ملف index.html على عنوان http://<your server>
.
إنشاء حاويات دائمة لـ Docker
A container isn’t that useful if it stops when the server reboots. By default, that’s what is going to happen if you don’t make it happen. To prevent this, let’s generate a new caddy container again but this time once that restarts when the Docker host, Ubuntu in this case, restarts.
- إيقاف وإزالة جميع الحاويات الجارية.
2. أعد تشغيل حاوية caddy باستخدام المعلمة --restart always
، لتعيين هذه الحاوية الجديدة للبدء مع الاستضافة عند إعادة التشغيل. مع العلم الموجود في العلم --restart always
، تتصرف حاويتك الآن مثل خدمة صحيحة: تبدأ تلقائيًا عند الإقلاع.
3. أعد تشغيل الخادم.
4. الآن تحقق من أن الحاوية الجديدة تعمل ولا تزال تقدم ملف index.html على عنوان http://<your server>
.
يمكنك رؤية الأوامر التالية المطبقة أدناه:

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