Skip to content

notesparvvaresh/docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

کانتینرها و ایمیج‌های Docker: یک مرور کلی

۱. ایمیج Docker

ایمیج Docker به عنوان یک قالب (template) فقط خواندنی برای ایجاد کانتینرها استفاده می‌شود. این ایمیج شامل تمامی اجزایی است که برای اجرای یک نرم‌افزار لازم است، مانند:

  • برنامه اصلی: خود نرم‌افزار یا اپلیکیشن مورد نظر.
  • محیط اجرایی: مانند پایتون، جاوا یا هر زبان دیگری.
  • کتابخانه‌ها و وابستگی‌ها: تمامی پکیج‌ها و ابزارهای مورد نیاز.
  • متغیرهای محیطی: تنظیماتی که بر رفتار برنامه تأثیر دارند.
  • فایل‌های پیکربندی: تنظیمات مورد نیاز برای اجرای نرم‌افزار.

ایمیج Docker از روی یک Dockerfile ساخته می‌شود که دستورات لازم برای راه‌اندازی محیط و نصب اجزای مورد نیاز را مشخص می‌کند.

نکات مهم درباره ایمیج‌های Docker:

  • فقط خواندنی: پس از ایجاد، ایمیج‌های Docker قابل تغییر نیستند. تغییراتی که در یک کانتینر در حال اجرا (مثل نصب پکیج جدید) اعمال می‌شود، در ایمیج اصلی ثبت نخواهد شد.
  • ساختار لایه‌ای: هر ایمیج از چندین لایه تشکیل شده‌است که هر کدام نمایانگر یک دستور در Dockerfile (مانند RUN، COPY، ADD و ...) هستند. این لایه‌ها به‌منظور بهینه‌سازی فرایند ساخت (build) در حافظه کش نگهداری می‌شوند.
  • قابل حمل: ایمیج‌های Docker مستقل از سیستم عامل میزبان بوده و می‌توانند روی هر سیستمی که Docker نصب شده باشد اجرا شوند.

مثال یک Dockerfile:

# استفاده از یک ایمیج پایه
FROM ubuntu:20.04

# نصب پکیج‌های مورد نیاز
RUN apt-get update && apt-get install -y python3 python3-pip

# کپی کردن فایل‌های برنامه به داخل کانتینر
COPY . /app

# تنظیم دایرکتوری کاری
WORKDIR /app

# نصب وابستگی‌های پایتون
RUN pip3 install -r requirements.txt

# باز کردن پورت مورد نیاز
EXPOSE 5000

# دستور اجرای برنامه
CMD ["python3", "app.py"]

۲. کانتینر Docker

کانتینر Docker نمونه اجرایی (runtime instance) یک ایمیج Docker است. وقتی یک ایمیج اجرا شود، به یک کانتینر تبدیل می‌شود. کانتینرها محیط‌های ایزوله‌ای هستند که برنامه‌ها را به شیوه‌ای یکپارچه بدون توجه به تفاوت‌های میزبان اجرا می‌کنند.

نکات کلیدی درباره کانتینرهای Docker:

  • لایه قابل نوشتن: در حالی که ایمیج‌ها فقط خواندنی هستند، کانتینرها یک لایه قابل نوشتن بر روی ایمیج به آنها اضافه می‌کنند. تغییراتی که در حین اجرای کانتینر (مانند تغییر فایل‌ها یا نصب نرم‌افزار) انجام می‌شود، در همین لایه ذخیره می‌گردد.
  • محیط ایزوله: کانتینرها در محیط‌های جداگانه از یکدیگر و از میزبان اجرا می‌شوند، به طوری که از تداخل میان برنامه‌ها جلوگیری می‌شود.
  • موقتی بودن: کانتینرها معمولاً زودگذر هستند؛ پس از توقف یا حذف کانتینر، تغییرات ایجاد شده در آن از بین می‌رود مگر اینکه به روش‌های دیگری مانند استفاده از volumes یا commit ذخیره شوند.

اجرای یک کانتینر: برای اجرای یک کانتینر از یک ایمیج، از دستور docker run استفاده می‌شود. در این فرآیند، Docker ایمیج را گرفته و کانتینر جدیدی از آن ایجاد می‌کند که فرمان یا پردازه تعیین‌شده (مثلاً راه‌اندازی سرور یا اجرای اپلیکیشن) را اجرا می‌کند.

مثال:

docker run -d -p 5000:5000 my-image

این دستور کانتینر را در حالت detached (-d) اجرا کرده و پورت 5000 میزبان را به پورت 5000 داخل کانتینر متصل می‌کند.

۳. ارتباط بین ایمیج‌ها و کانتینرها

  • ایمیج‌ها به عنوان نقشه‌ی راه (blueprint): ایمیج‌ها مشخصات دقیق نحوه ایجاد یک کانتینر را تعیین می‌کنند.
  • کانتینرها به عنوان نمونه‌های اجرایی: یک کانتینر یک نمونه (instance) از یک ایمیج است که می‌تواند در طول زمان تغییراتی داشته باشد.
  • تعداد کانتینرهای متعدد از یک ایمیج: می‌توان چندین کانتینر را از یک ایمیج ایجاد کرد.
  • پایداری ایمیج‌ها: حذف یا توقف یک کانتینر تاثیری بر ایمیج اصلی ندارد؛ کانتینر می‌تواند مجدداً از همان ایمیج ساخته شود.

۴. مراحل کاری معمول با Docker

  1. ایجاد یک ایمیج: ابتدا یک ایمیج از طریق Dockerfile ساخته می‌شود.
  2. اجرای یک کانتینر: سپس از دستور docker run برای ایجاد و اجرای کانتینر از ایمیج استفاده می‌شود.
  3. اعمال تغییرات (اختیاری): تغییراتی که در داخل کانتینر انجام می‌شود (مانند نصب پکیج یا تغییر فایل‌ها)، تنها به همان کانتینر مربوط می‌شود مگر اینکه به ایمیج جدید commit شود.
  4. توقف کانتینر: پس از پایان کار، کانتینر متوقف می‌شود. البته در صورت نیاز می‌توان آن را دوباره اجرا کرد اما تغییرات اعمال‌شده در حین اجرا به صورت خودکار ذخیره نخواهد شد.
  5. حذف کانتینر: در صورت عدم نیاز به کانتینر، می‌توان آن را حذف کرد؛ در این صورت ایمیج اصلی بدون تغییر باقی می‌ماند.

۵. مقایسه کلیدی بین ایمیج و کانتینر

ویژگی ایمیج Docker کانتینر Docker
ماهیت قالب تنها خواندنی نمونه اجرایی قابل نوشتن
حالت تغییرناپذیر قابل تغییر در زمان اجرا
کاربرد تعریف نحوه ایجاد کانتینر محیط اجرای برنامه
چرخه حیات امکان به اشتراک‌گذاری، نسخه‌بندی، و استفاده مجدد ایجاد، اجرا، توقف و حذف

۶. دستورات کلیدی Docker

  • ساخت ایمیج:
    docker build -t my-image .
  • اجرای کانتینر از ایمیج:
    docker run my-image
  • لیست تمامی کانتینر‌ها:
    docker ps -a
  • توقف کانتینر:
    docker stop <container_id>
  • حذف کانتینر:
    docker rm <container_id>
  • حذف ایمیج:
    docker rmi <image_id>

۷. Volumes Docker و حفظ داده‌ها

با توجه به اینکه کانتینرها به صورت موقتی هستند و تغییرات در لایه قابل نوشتن ذخیره می‌شوند، استفاده از Volumes در Docker امکان ذخیره‌سازی داده‌ها به صورت دائمی را فراهم می‌کند. این Volume ها در یک دایرکتوری مشخص در میزبان ذخیره می‌شوند و می‌توانند میان کانتینرهای مختلف به اشتراک گذاشته شوند. این ویژگی تضمین می‌کند که داده‌ها حتی پس از حذف کانتینر باقی بمانند.


راهنمای نصب پکیج یا ویرایش فایل‌ها در کانتینر در حال اجرا

۱. یافتن شناسه یا نام کانتینر:

ابتدا باید شناسه یا نام کانتینر مدنظر را بدانید. برای مشاهده لیست کانتینرهای در حال اجرا، از دستور زیر استفاده کنید:

docker ps

این دستور اطلاعاتی همچون CONTAINER ID و NAMES کانتینرهای در حال اجرا را نمایش می‌دهد.

۲. ورود به داخل کانتینر با استفاده از docker exec:

با استفاده از دستور docker exec می‌توانید وارد کانتینر شده و تغییرات لازم را اعمال کنید. برای شروع یک شِل (مثلاً bash یا sh)، دستور زیر را اجرا کنید:

docker exec -it <container_id_or_name> bash

اگر کانتینر از شِل bash پشتیبانی نمی‌کند، می‌توانید از sh استفاده کنید:

docker exec -it <container_id_or_name> sh

پس از اجرای این دستور، به خط فرمان داخل کانتینر دسترسی پیدا کرده و می‌توانید تغییرات مد نظر را اعمال کنید.

۳. نصب پکیج یا ویرایش فایل در داخل کانتینر:

  • نصب پکیج:
    در صورتی که کانتینر مبتنی بر اوبونتو یا دبیان باشد، می‌توانید پکیج مورد نیاز را با دستور زیر نصب کنید:

    apt-get update && apt-get install -y <package_name>

    اگر کانتینر بر پایه Alpine باشد، از مدیریت پکیج apk استفاده کنید:

    apk add --no-cache <package_name>
  • ویرایش فایل:
    برای ویرایش فایل‌ها می‌توانید از ویرایشگرهایی مانند nano یا vi استفاده کنید. در صورتی که این ویرایشگرها نصب نباشند، می‌توانید با استفاده از دستور echo محتویات جدید را به فایل اضافه یا جایگزین کنید:

    echo "متن جدید" > /path/to/file.txt

۴. خروج از کانتینر:

پس از اعمال تغییرات، با استفاده از دستور:

exit

از کانتینر خارج شوید.


مثال‌های عملی

الف) نصب یک پکیج (مثلاً curl) در داخل کانتینر:

  1. ورود به کانتینر:
    docker exec -it my-container bash
  2. نصب پکیج:
    apt-get update && apt-get install -y curl
  3. خروج از کانتینر:
    exit

ب) تغییر یا افزودن محتوا به یک فایل در داخل کانتینر:

  1. ورود به کانتینر:
    docker exec -it my-container bash
  2. افزودن محتوا به فایل (مثلاً /app/log.txt):
    echo "این یک ورودی لاگ است" >> /app/log.txt
  3. خروج از کانتینر:
    exit

توضیحات تکمیلی:

  • استفاده از docker commit:
    اگر بخواهید تغییرات موقت داخل کانتینر (مثلاً نصب یک پکیج) را به صورت دائمی ذخیره کنید، می‌توانید از دستور docker commit برای ایجاد یک ایمیج جدید از کانتینر تغییر یافته استفاده کنید:

    docker commit <container_id> <new_image_name>
  • توضیح بیشتر درباره تغییرات موقتی:
    تغییراتی که با دستور docker exec اعمال می‌شوند تنها در لایه قابل نوشتن کانتینر ذخیره می‌شوند و در صورت حذف کانتینر از بین می‌روند. برای حفظ تغییرات باید آن‌ها را به یک ایمیج جدید commit کنید یا داده‌ها را در یک volume ذخیره کنید.

  • ابزارهای تکمیلی:
    در پروژه‌های پیچیده می‌توان از ابزارهایی مانند Docker Compose برای مدیریت چندین کانتینر با هم استفاده کرد. Docker Compose امکان تعریف سرویس‌ها، شبکه‌بندی و volumeها در یک فایل YAML را فراهم می‌کند و مدیریت پروژه‌های چند کانتینری را ساده‌تر می‌کند.


خلاصه نهایی

  • ایمیج Docker: قالب فقط خواندنی شامل تمامی اجزای لازم جهت اجرای برنامه (شامل کد، محیط اجرایی، کتابخانه‌ها، متغیرهای محیطی و پیکربندی‌ها) است.
  • کانتینر Docker: نمونه اجرایی ایمیج که یک محیط ایزوله و قابل تغییر در زمان اجرا فراهم می‌کند.
  • رویه کار معمول: ساخت ایمیج از Dockerfile → اجرای کانتینر از ایمیج → اعمال تغییرات (اختیاری) → توقف یا حذف کانتینر.
  • نگه‌داشت داده‌ها: استفاده از Docker Volumes برای حفظ داده‌ها حتی پس از حذف کانتینر توصیه می‌شود.
  • ابزارهای مدیریتی: دستورات اصلی Docker و همچنین ابزارهایی مانند Docker Compose برای مدیریت پروژه‌های پیچیده در دسترس هستند.

این ترجمه جامع و روان به شما کمک می‌کند تا مفاهیم کلیدی و عملیات‌های اساسی مربوط به Docker Image و Container را به‌خوبی درک کنید.

About

Docker explained and a simple project

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published