Introduction
Docker یک ابزار کانتینریسازی محبوب است که برای ارائه برنامههای نرمافزاری با یک سیستم فایل که شامل همه چیزهایی است که برای اجرا نیاز دارند، استفاده میشود. استفاده از کانتینرهای Docker تضمین میکند که نرمافزار بدون توجه به جایی که در آن مستقر شده است، یکسان رفتار میکند، زیرا محیط زمان اجرا آن بیرحمانه سازگار است. در این آموزش، مروری کوتاه بر رابطه بین تصاویر داکر و کانتینرهای داکر ارائه خواهیم کرد. سپس، نگاهی دقیق تر به نحوه اجرا، شروع، توقف و حذف ظروف خواهیم داشت.
بررسی اجمالی
میتوانیم تصویر Docker را به عنوان یک الگوی بیاثر در نظر بگیریم که برای ایجاد کانتینرهای Docker استفاده میشود. تصاویر معمولاً با یک فایل سیستم ریشه شروع می شوند و تغییرات سیستم فایل و پارامترهای اجرای مربوطه آنها را در لایه های مرتب و فقط خواندنی اضافه می کنند. برخلاف یک توزیع معمولی لینوکس، یک تصویر Docker معمولاً فقط شامل موارد ضروری ضروری برای اجرای برنامه است. تصاویر حالت ندارند و تغییر نمی کنند. در عوض، آنها نقطه شروع کانتینرهای Docker را تشکیل می دهند. تصاویر با دستور docker run زنده می شوند، که با افزودن یک لایه خواندن و نوشتن در بالای تصویر، یک ظرف ایجاد می کند. این ترکیب از لایههای فقط خواندنی که در بالای آن لایه خواندن-نوشتن قرار گرفتهاند، به عنوان یک سیستم فایل اتحادیه شناخته میشوند. هنگامی که تغییری در یک فایل موجود در یک کانتینر در حال اجرا ایجاد میشود، فایل از فضای فقط خواندنی در لایه خواندن-نوشتن کپی میشود، جایی که تغییرات اعمال میشوند. نسخه موجود در لایه خواندن و نوشتن فایل اصلی را پنهان می کند اما آن را حذف نمی کند. تغییرات در لایه خواندن و نوشتن فقط در یک نمونه کانتینر جداگانه وجود دارد. هنگامی که یک کانتینر حذف می شود، هرگونه تغییر از بین می رود مگر اینکه اقداماتی برای حفظ آنها انجام شود.
نحوه کار با کانتینرهای داکر
- دو کانتینر داکر ایجاد کنید
- اولین کانتینر را مجددا راه اندازی کنید
- هر دو کانتینر را حذف کنید
کار با کانتینرها
هر بار که از دستور docker run استفاده می کنید، یک کانتینر جدید از تصویری که شما مشخص کرده اید ایجاد می کند. این می تواند منبع سردرگمی باشد، بنابراین بیایید با چند مثال نگاهی بیندازیم:
مرحله 1: ایجاد دو کانتینر
دستور اجرای docker زیر با استفاده از تصویر پایه اوبونتو یک کانتینر جدید ایجاد می کند. -t یک ترمینال به ما می دهد و -i به ما امکان تعامل با آن را می دهد. ما به دستور پیشفرض در فایل Docker تصویر پایه اوبونتو، bash، تکیه میکنیم تا ما را در یک پوسته رها کند.
docker run -ti ubuntuخط فرمان تغییر می کند تا نشان دهد که ما در داخل کانتینر به عنوان کاربر اصلی هستیم و به دنبال آن شناسه ظرف 12 کاراکتری قرار می گیرد.
root@11cc47339ee1:/#ما تغییری را با بازتاب متنی در پوشه /tmp کانتینر ایجاد می کنیم، سپس از cat برای تأیید اینکه با موفقیت ذخیره شده است استفاده می کنیم.
echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txtOutput
Example1
حالا بیایید از ظرف خارج شویم.
exitکانتینرهای Docker به محض تکمیل فرمانی که صادر کردند، کار نمیکنند، بنابراین کانتینر ما با خروج از پوسته bash متوقف شد. اگر دستور ps را اجرا کنیم، فرمان نمایش کانتینرهای در حال اجرا، دستور خود را نخواهیم دید.
docker psOutput
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESاگر پرچم -a را اضافه کنیم که همه کانتینرها را نشان می دهد، متوقف شده یا در حال اجرا هستند، ظرف ما در لیست ظاهر می شود:
docker ps -aOutput
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussiزمانی که کانتینر ایجاد شد، شناسه کانتینر و نامی که به صورت تصادفی تولید شده بود به آن داده شد. در این مورد، 11cc47339ee1 شناسه کانتینر و small_sinoussi نامی است که بهطور تصادفی تولید میشود. ps -a آن مقادیر و همچنین تصویری که کانتینر از آن ساخته شده است (ubuntu)، هنگام ایجاد کانتینر (شش دقیقه پیش) و دستوری که در آن اجرا شده است (/bin/bash) را نشان می دهد. خروجی همچنین وضعیت کانتینر (Exited) و مدت زمانی که کانتینر وارد آن حالت شده (6 ثانیه پیش) را ارائه می دهد. اگر کانتینر همچنان در حال کار بود، وضعیت «بالا» را مشاهده میکردیم، به دنبال آن مدت زمانی که کار میکرد.
اگر همان دستور را دوباره اجرا کنیم، یک ظرف کاملاً جدید ایجاد می شود:
docker run -ti ubuntuمیتوانیم بگوییم که یک ظرف جدید است، زیرا شناسه در خط فرمان متفاوت است، و وقتی به دنبال فایل Example1 خود میگردیم، آن را پیدا نمیکنیم:
cat /tmp/Example1Output
cat: /tmp/Example1: No such file or directoryاین می تواند به نظر برسد که داده ها ناپدید شده اند، اما اینطور نیست. اکنون از کانتینر دوم خارج می شویم تا ببینیم که آن و اولین کانتینر ما با فایلی که ایجاد کردیم، هر دو در سیستم هستند.
exitوقتی دوباره کانتینرها را لیست می کنیم، هر دو ظاهر می شوند:
docker ps -aOutput
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مرحله 2: راه اندازی مجدد اولین کانتینر
برای راهاندازی مجدد یک کانتینر موجود، از دستور start با پرچم -a برای اتصال به آن و پرچم -i برای تعاملی کردن آن و به دنبال آن شناسه یا نام کانتینر استفاده میکنیم. حتماً شناسه کانتینر خود را در دستور زیر جایگزین کنید:
docker start -ai 11cc47339ee1ما یک بار دیگر خود را در اعلان bash کانتینر مییابیم و وقتی فایلی را که قبلاً ایجاد کردهایم cat میکنیم، هنوز آنجاست.
cat /tmp/Example1.txtOutput
Example1اکنون می توانیم از کانتینر خارج شویم:
exitاین خروجی نشان می دهد که تغییرات ایجاد شده در داخل کانتینر از طریق توقف و راه اندازی آن ادامه می یابد. تنها زمانی که ظرف حذف می شود، محتوا حذف می شود. این مثال همچنین نشان میدهد که تغییرات محدود به ظرف جداگانه بوده است. وقتی ظرف دوم را راه اندازی کردیم، حالت اولیه تصویر را منعکس می کرد.
مرحله 3: حذف هر دو کانتینر
ما دو کانتینر ایجاد کردهایم و آموزش کوتاه خود را با حذف آنها به پایان میرسانیم. دستور docker rm که فقط روی کانتینرهای متوقف شده کار می کند، به شما امکان می دهد نام یا شناسه یک یا چند کانتینر را مشخص کنید، بنابراین می توانیم هر دو را با موارد زیر حذف کنیم:
docker rm 11cc47339ee1 kickass_borgOutput
11cc47339ee1
kickass_borgهر دو کانتینر و هر تغییری که در داخل آنها ایجاد کردیم، اکنون از بین رفته اند.
Result
ما نگاهی دقیق به دستور docker run انداختهایم تا ببینیم چگونه هر بار که اجرا میشود به طور خودکار یک کانتینر جدید ایجاد میکند. ما همچنین نحوه یافتن یک کانتینر متوقف شده، راه اندازی و اتصال به آن را دیده ایم. اگر میخواهید درباره مدیریت کانتینرها اطلاعات بیشتری کسب کنید، ممکن است به راهنمای نامگذاری کانتینرهای Docker: 3 نکته برای مبتدیان علاقه مند شوید.









