تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه اشتراک گذاری داده ها بین کانتینر داکر و هاست


۱ آبان ۱۴۰۴

داکر یکی از محبوب‌ترین ابزارهای کانتینرسازی است که به نرم‌افزارها یک فایل‌سیستم کامل می‌دهد؛ سیستمی که شامل همه چیز مورد نیاز برای اجرا است. با استفاده از کانتینرهای داکر، مطمئن خواهید شد که نرم‌افزارتان همیشه و همه‌جا از لپ‌تاپ توسعه‌دهنده تا سرورهای ابری دقیقا مانند هم رفتار می‌کند. دلیل آن چه خواهد بود؟ محیط اجرایی‌ ثابت و یکسان نگه داشته خواهد شد.

در این آموزش کوتاه اما بسیار کاربردی از لیارا، ابتدا نگاهی اجمالی به ارتباط بین تصاویر داکر (Docker images) و کانتینرهای داکر (Docker containers) خواهیم داشت. بعد از آن، با جزئیات بیشتری به چگونگی اجرا، راه‌اندازی، توقف و حذف کانتینرها خواهیم پرداخت. هدف این است که با زبانی ساده اما دقیق، قدم‌به‌قدم پیش برویم تا حتی اگر تازه‌کار هستید، بتوانید دست به کار شوید و در عین حال، اگر حرفه‌ای هستید، نکات ظریف در این آموزش را از دست ندهید.

نگاهی کلی، تصاویر و کانتینرها، مثل قالب و مجسمه

تصاویر داکر الگوهای ثابت و غیرقابل تغییر هستند که برای ایجاد کانتینرها به کار می‌روند. این تصاویر از یک فایل‌سیستم ریشه آغاز می‌شوند و به صورت لایه‌به‌لایه، تغییرات فایل‌سیستم و پارامترهای اجرایی را به صورت فقط-خواندنی (read-only) اضافه می‌کنند. برخلاف توزیع‌های لینوکس معمولی که شامل نرم‌افزارهای اضافی زیادی هستند، یک تصویر داکر تنها اجزای ضروری یعنی حداقل‌های لازم برای اجرای برنامه را شامل می‌شود. تصاویر هیچ حالتی (state) ندارند و تغییر نمی‌کنند؛ آن‌ها صرفا نقطه شروع برای کانتینرها هستند.

حال، تصاویر با دستور docker run فعال می‌شوند. این دستور یک کانتینر جدید ایجاد می‌کند و روی تصویر، یک لایه خواندنی-نوشتنی (read-write) اضافه می‌کند. ترکیب این لایه‌های فقط-خواندنی با لایه نوشتنی بالایی، به نام سیستم فایل اتحادی (union file system) شناخته می‌شود. اگر در کانتینر در حال اجرا تغییری در یک فایل اعمال کنید، فایل از فضای فقط-خواندنی به لایه نوشتنی کپی می‌شود و تغییرات روی آن اعمال می‌گردد. نسخه تغییر یافته در لایه نوشتنی، نسخه اصلی را پنهان می‌کند اما آن را حذف نمی‌کند. این تغییرات تنها در آن کانتینر خاص وجود دارند. وقتی کانتینر را حذف کنید، تغییرات از دست می‌روند مگر اینکه اقدامی برای حفظ آن‌ها انجام دهید، مانند commit کردن به یک تصویر جدید.

کار با کانتینرها، از ساخت تا مدیریت

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

ابتدا: ساخت دو کانتینر جداگانه

این دستور یک کانتینر جدید از تصویر پایه اوبونتو می‌سازد. پرچم -t یک ترمینال به ما می‌دهد و -i اجازه تعامل را:

docker run -ti ubuntu

خط فرمان حالا تغییر می‌کند و نشان می‌دهد که داخل کانتینر هستیم، به عنوان کاربر root، همراه با یک ID ۱۲ کاراکتری منحصربه‌فرد برای کانتینر.

حالا بیایید تغییری ایجاد کنیم: یک متن ساده را به فایل /tmp/Example1.txt بنویسیم و با cat چک کنیم:

echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt

خروجی به صورت زیر خواهد بود.

Example1

حال باید از کا

exit

کانتینرهای داکر به محض تمام شدن دستوری که اجرا می‌کنند، متوقف می‌شوند. پس وقتی از شل bash خارج شدیم، کانتینر هم خوابید. اگر docker ps را بزنید (که کانتینرهای در حال اجرا را نشان می‌دهد)، چیزی نمی‌بینید:

docker ps

خروجی که به شما نشان خواهد داد:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

اما با اضافه کردن پرچم -a (برای نمایش همه کانتینرها، چه متوقف چه فعال)، کانتینرمان ظاهر می‌شود:

docker ps -a

خروجی نمونه:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
11cc47339ee1        ubuntu              "/bin/bash"         6 minutes ago       Exited (127) 8 seconds ago                       small_sinoussi

وقتی کانتینر ساخته شد، یک ID منحصربه‌فرد (مثل 11cc47339ee1) و یک نام تصادفی (مثل small_sinoussi) گرفت. لیست ps -a جزئیاتی مثل تصویر مبنا (ubuntu)، زمان ساخت (شش دقیقه پیش)، دستور اجرا شده (/bin/bash)، وضعیت (Exited) و زمان توقف را نشان می‌دهد. اگر کانتینر فعال بود، وضعیت “Up” با مدت زمان اجرا را می‌دیدید.

حالا همان دستور را دوباره بزنید:

docker run -ti ubuntu

این یک کانتینر کاملاً جدید می‌سازد. ID جدیدش را در پرامپت می‌بینید. اگر فایل Example1 را چک کنید:

cat /tmp/Example1.txt

خروجی:

cat: /tmp/Example1.txt: No such file or directory

داده‌ها گم نشده‌اند؛ فقط در کانتینر قبلی هستند. خارج شوید:

exit

حالا لیست کنید:

docker ps -a

خروجی نمونه:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                       PORTS                           NAMES
6e4341887b69        ubuntu              "/bin/bash"              About a minute ago   Exited (1) 6 seconds ago                                     kickass_borg
11cc47339ee1        ubuntu              "/bin/bash"              13 minutes ago       Exited (127) 6 minutes ago                                   small_sinoussi

هر دو کانتینر حالا روی سیستم‌تان هستن، اما تغییرات فقط در کانتینر اول مانده.

گام ۲: راه‌اندازی مجدد کانتینر اول

برای راه‌اندازی یک کانتینر موجود، از docker start با پرچم‌های -a (برای اتصال) و -i (تعاملی) استفاده کنید، همراه با ID یا نام کانتینر. ID خودتان را جایگزین کنید:

docker start -ai 11cc47339ee1

دوباره در شل bash کانتینر هستیم. فایل را چک کنید:

cat /tmp/Example1.txt

خروجی:

Example1

خارج شوید:

exit

این نشان می‌دهد که تغییرات داخل کانتینر، با توقف و راه‌اندازی حفظ می‌شوند. فقط حذف کانتینر همه چیز را پاک می‌کند. و یادتان باشد: تغییرات به کانتینرهای دیگر سرایت نمی‌کند؛ هر کدام مستقل‌اند.

گام ۳: حذف هر دو کانتینر

دو کانتینر ساختیم؛ حالا حذف‌شان کنیم. دستور docker rm فقط روی کانتینرهای متوقف کار می‌کند و می‌توانید ID یا نام یکی یا چندتا را مشخص کنید:

docker rm 11cc47339ee1 kickass_borg

خروجی:

11cc47339ee1
kickass_borg

هر دو کانتینر و تغییرات‌شان حالا پاک شدن.

جمع بندی

در این آموزش، دیدیم که docker run هر بار کانتینر جدیدی می‌سازد و چطور کانتینرهای متوقف را پیدا، راه‌اندازی و به‌شان وصل شویم. این اصول پایه‌ای مدیریت کانتینرها هستند و کمک می‌کنند تا محیط‌های اجرایی‌تان را بدون دردسر کنترل کنید. اگر می‌خواهید بیشتر بدانید، به راهنمای “نام‌گذاری کانتینرهای داکر: ۳ نکته برای تازه‌کاران” نگاهی بیندازید ابزاری عالی برای سازماندهی بهتر پروژه‌هایتان. با تمرین این مثال‌ها،很快 می‌توانید کانتینرها را مثل حرفه‌ای‌ها مدیریت کنید و از ثبات داکر برای پروژه‌های واقعی بهره ببرید.

به اشتراک بگذارید

برچسب‌ها: