دليل المبتدئين إلى Docker: ابدأ بسرعة في تحويل تطبيقاتك إلى حاويات
دليل المبتدئين إلى Docker: ابدأ بسرعة في تحويل تطبيقاتك إلى حاويات
أصبح Docker جزءًا لا يتجزأ من تطوير البرامج الحديثة ونشرها. على الرغم من المناقشات التي لا حصر لها حول Kubernetes، إلا أن Docker لا يزال الأداة المفضلة للعديد من الشركات لإنشاء تطبيقاتها واختبارها ونشرها. ستأخذك هذه المقالة بسرعة عبر أساسيات Docker، وتفهم مفاهيمها الأساسية، وتقدم مثالًا عمليًا لمساعدتك على البدء في تحويل تطبيقاتك إلى حاويات.
مفاهيم Docker الأساسية
قبل البدء في الممارسة العملية، من الضروري فهم بعض مفاهيم Docker الأساسية:
- الصورة (Image): الصورة عبارة عن قالب للقراءة فقط يحتوي على كل ما هو مطلوب لتشغيل التطبيق: التعليمات البرمجية وبيئة وقت التشغيل وأدوات النظام والمكتبات والتبعيات. إنه مشابه لصورة الجهاز الظاهري، ولكنه أخف وزنًا.
- الحاوية (Container): الحاوية هي مثيل قيد التشغيل تم إنشاؤه من صورة. إنه مثيل لوقت تشغيل الصورة، ويحتوي على التطبيق وجميع تبعياته. الحاويات معزولة عن بعضها البعض، ولها نظام الملفات والعمليات ومساحة الشبكة الخاصة بها.
- Docker Hub: Docker Hub هو مستودع صور عام، يمكنك من خلاله تنزيل الصور المبنية مسبقًا، أو تحميل صورك الخاصة. إنه مشابه لـ GitHub، ولكنه مخصص لصور Docker.
- Dockerfile: Dockerfile هو ملف نصي يحتوي على جميع التعليمات لإنشاء صورة Docker. من خلال كتابة Dockerfile، يمكنك أتمتة عملية إنشاء الصورة.
- Docker Compose: Docker Compose هي أداة لتعريف وتشغيل تطبيقات Docker متعددة الحاويات. يسمح لك بتكوين خدمات التطبيق باستخدام ملف YAML، ثم استخدام أمر واحد لبدء أو إيقاف جميع الخدمات.
تثبيت Docker
أولاً، تحتاج إلى تثبيت Docker. يوفر Docker حزم تثبيت لأنظمة تشغيل مختلفة. قم بزيارة موقع Docker الرسمي، واتبع التعليمات المناسبة للتثبيت.
بعد التثبيت، يمكنك التحقق من تثبيت Docker بشكل صحيح عن طريق تشغيل الأمر docker --version.
تحويل تطبيق Python بسيط إلى حاوية
سنقوم بإنشاء تطبيق Python بسيط، واستخدام Docker لتحويله إلى حاوية.
1. إنشاء تطبيق Python
قم بإنشاء ملف باسم app.py، يحتوي على الكود التالي:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
سيعيد تطبيق Flask البسيط هذا "Hello, Docker!" على المسار الجذر /.
2. إنشاء ملف requirements.txt
يعتمد التطبيق على مكتبة Flask، ونحتاج إلى إنشاء ملف requirements.txt للإعلان عن هذه التبعيات.
Flask
3. إنشاء Dockerfile
قم بإنشاء ملف باسم Dockerfile، وأضف المحتوى التالي:
# استخدم صورة Python الرسمية كصورة أساسية
FROM python:3.9-slim-buster
# قم بتعيين دليل العمل
WORKDIR /app
# انسخ ملف requirements.txt إلى دليل العمل
COPY requirements.txt .
# قم بتثبيت التبعيات
RUN pip install --no-cache-dir -r requirements.txt
# 将应用程序代码复制到工作目录
COPY app.py .
# 暴露端口 5000
EXPOSE 5000
# 定义启动命令
CMD ["python", "app.py"]
```
**Dockerfile 说明:**
* `FROM python:3.9-slim-buster`: تحديد الصورة الأساسية كإصدار مبسط من Python 3.9.
* `WORKDIR /app`: تعيين دليل العمل داخل الحاوية إلى `/app`.
* `COPY requirements.txt .`: نسخ ملف `requirements.txt` من الدليل الحالي إلى دليل `/app` في الحاوية.
* `RUN pip install --no-cache-dir -r requirements.txt`: تشغيل الأمر `pip` داخل الحاوية لتثبيت التبعيات المحددة في ملف `requirements.txt`. يمكن للمعامل `--no-cache-dir` تقليل حجم الصورة.
* `COPY app.py .`: نسخ ملف `app.py` من الدليل الحالي إلى دليل `/app` في الحاوية.
* `EXPOSE 5000`: الإعلان عن أن الحاوية ستستمع إلى المنفذ 5000.
* `CMD ["python", "app.py"]`: تحديد الأمر الذي سيتم تنفيذه عند بدء تشغيل الحاوية.
### 4. 构建 Docker 镜像
في الدليل الذي يحتوي على `Dockerfile`، قم بتشغيل الأمر التالي لإنشاء صورة Docker:
```bash
docker build -t my-python-app .
```
* `docker build`: أمر إنشاء الصورة.
* `-t my-python-app`: تحديد اسم للصورة (`my-python-app`).
* `.`: تحديد الدليل الذي يوجد به Dockerfile (الدليل الحالي).
قد تستغرق عملية الإنشاء بعض الوقت، اعتمادًا على سرعة الشبكة وحجم التبعيات.
### 5. 运行 Docker 容器
استخدم الأمر التالي لتشغيل حاوية Docker:
```bash
docker run -d -p 5000:5000 my-python-app
```
* `docker run`: أمر تشغيل الحاوية.
* `-d`: تشغيل الحاوية في وضع منفصل (تشغيل في الخلفية).
* `-p 5000:5000`: تعيين المنفذ 5000 على المضيف إلى المنفذ 5000 في الحاوية.
* `my-python-app`: تحديد اسم الصورة المراد استخدامها.
### 6. 验证应用程序
في المتصفح، قم بزيارة `http://localhost:5000`، يجب أن ترى "Hello, Docker!"。
### 7. 停止和删除容器
استخدم الأمر التالي لإيقاف الحاوية:
```bash
docker stop
```
`` يمكنك عرض `docker ps` الأمر.
استخدم الأمر التالي لحذف الحاوية:
```bash
docker rm
```
## Docker Compose 入门
إذا كان تطبيقك يتكون من خدمات متعددة، يمكنك استخدام Docker Compose لإدارتها.
### 1. 创建 `docker-compose.yml` 文件
قم بإنشاء ملف باسم `docker-compose.yml`، وأضف المحتوى التالي:
```yaml
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
```
**docker-compose.yml 说明:**
* `version: "3.9"`: يحدد إصدار ملف Docker Compose.
* `services`: يحدد خدمات التطبيق.
* `web`: يحدد خدمة باسم "web".
* `image: my-python-app`: يحدد الصورة التي تستخدمها الخدمة.
* `ports`: يحدد تعيينات المنافذ.
### 2. تشغيل التطبيق
في الدليل الذي يحتوي على ملف `docker-compose.yml`، قم بتشغيل الأمر التالي لبدء تشغيل التطبيق:
```bash
docker-compose up -d
```
* `docker-compose up`: أمر لبدء تشغيل التطبيق.
* `-d`: يقوم بتشغيل الحاويات في وضع منفصل (detached mode).
### 3. إيقاف التطبيق
استخدم الأمر التالي لإيقاف التطبيق:
```bash
docker-compose down
```
## أفضل ممارسات أمان Docker
كما يتضح من المناقشة، فإن أمان صور Docker يمثل مشكلة مهمة. فيما يلي بعض أفضل ممارسات أمان Docker:
* **استخدام الصور الرسمية:** استخدم الصور المقدمة رسميًا قدر الإمكان، حيث يتم فحص هذه الصور وصيانتها بشكل عام بحثًا عن الأمان.
* **فحص ثغرات الصور:** استخدم أدوات مثل Trivy لفحص الثغرات الأمنية المعروفة في الصور وتحديث الصور في الوقت المناسب.
* **استخدام مبدأ أقل الامتيازات:** تجنب تشغيل الحاويات كمستخدم root.
* **تقييد موارد الحاوية:** استخدم cgroups لتقييد استخدام وحدة المعالجة المركزية والذاكرة للحاوية.
* **تحديث الصور بانتظام:** حافظ على تحديث الصور لإصلاح الثغرات الأمنية.
* **استخدام أدوات الفحص الأمني:** يمكن دمج أدوات مثل Snyk و Clair في عملية CI/CD الخاصة بك لفحص ثغرات الصور تلقائيًا.
## خاتمةتقدم هذه المقالة دليلًا سريعًا للبدء في استخدام Docker، وتغطي المفاهيم الأساسية وخطوات التثبيت ومثالًا بسيطًا لتطبيق Python يتم تحويله إلى حاوية. من خلال تعلم هذه الأساسيات، يمكنك البدء في استخدام Docker لبناء واختبار ونشر تطبيقاتك. تذكر أن الأمان أمر بالغ الأهمية، ويجب عليك دائمًا الانتباه إلى أمان صور Docker واتخاذ الإجراءات المناسبة لحماية تطبيقاتك. على الرغم من أن Kubernetes قوية في تنسيق الحاويات على نطاق واسع، إلا أن Docker لا يزال حلاً بسيطًا وفعالًا في العديد من السيناريوهات. من خلال إتقان Docker، ستكون في وضع أفضل لمواجهة تحديات تطوير البرامج الحديثة ونشرها.
# مثال على Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
docker build -t my-python-app .
docker run -p 8000:8000 my-python-app





