آموزش داکر (بخش پنجم) – از صفر تا صد


در بخش قبلی از این سری مقالات آموزش داکر با روش افزایش سرعت چرخههای Build و ایجاد ایمیجهای سبک آشنا شدیم. در این بخش از این سلسله مطالب آموزشی نگاهی خواهیم داشت به 15 مورد از دستورهای داکر که هر توسعهدهندهای باید بداند. داکر دستورهای بسیار زیادی دارد. صفحه مستندات داکر (+) وسیع است؛ اما در نگاه اول سردرگمکننده به نظر میرسد. در این مقاله برخی دستورهای کلیدی که برای اجرای داکر خالص مورد نیاز هستند را معرفی میکنیم. همچنین در مقاله «داکر چیست» نیز به معرفی داکر و ارائه راهنمای شروع به کار با آن پرداخته شده است.
علاوه بر این، یک مقاله آموزشی جامع و جدیدتر نیز برای آموزش داکر در مجله فرادرس منتشر شده است که مطالعه آن به علاقهمندان پیشنهاد میشود:
دستورهای داکر
از بخشهای قبلی این سری آموزشی به یاد داریم که هر ایمیج داکر از یک داکرفایل به همراه وابستگیهای ضروری تشکیل یافته است. همچنین به خاطر داریم که یک کانتینر داکر همان ایمیج داکر است که حیات یافته است. برای کار با دستورهای داکر باید ابتدا بدانید که آیا با یک ایمیج سر و کار دارید یا یک کانتینر داکر.
- ایمیج داکر یا وجود دارد و یا وجود ندارد.
- کانتینر داکر یا وجود دارد یا وجود ندارد.
- کانتینر داکر که وجود دارد یا در حال اجرا است و یا نیست.
زمانی که بدانید با چه چیزی کار میکنید، میتوانید دستورهای مناسب آن را بیابید.
موارد اشتراک دستورها
در ادامه چند مورد ارائه شده است که باید در مورد دستورهای داکر بدانید؛ دستورهای مدیریت CLI داکر با عبارت docker آغازمی شوند و سپس یک فاصله و سپس دستهبندی مدیریت و در ادامه یک فاصله و سپس خود دستور میآید. برای نمونه دستور زیر موجب توقف یک کانتینر میشود:
docker container stop
دستوری که به یک کانتینر یا ایمیج خاص ارجاع میدهد نیازمند نام یا شناسه آن کانتینر یا ایمیج است. برای نمونه، دستور زیر برای ساخت و اجرای کانتینری به نام my_app استفاده میشود.
docker container run my_app
ما از my_container برای اشاره به یک کانتینر نمونه در همه مثالهای این راهنما استفاده خواهیم کرد. همین وضعیت در مورد عبارتهای my_image ،my_tag و نظایر آن نیز مصداق دارد.
ما خود دستور را ارائه میکنیم و سپس فلگهای رایج دستور را در صورتی که امکان اعمال داشته باشند میآوریم. هر فلگ با استفاده از دو خط تیره در ابتدای نام کامل فلگ مشخص میشود. فلگی که یک خط تیره دارد میانبری برای نام کامل فلگ است. برای نمونه p- اختصاری برای فلگ port— است.
هدف از این وضعیت آن است که این دستورها و فلگها در خاطر بمانند و در این راهنما به منظور یک ارجاع استفاده میشود. این راهنما برای سیستم عامل لینوکس و موتور داکر نسخه 18.09.1 و API نسخه 1.39 نوشته شده است.
ابتدا به دستورهایی که برای کانتینرها وجود دارند نگاه میکنیم و سپس دستورهای موجود برای ایمیجها را مورد بررسی قرار میدهیم. Volume-ها در بخش بعدی این سری مقالات بررسی خواهند شد. در ادامه فهرستی از 15 دستور که باید بدانید را مشاهده میکنید. البته 3 دستور اضافی نیز در نظر گرفته شده است:
کانتینرها
ساختار دستورها به صورت docker container my_command است.
- create - یک کانتینر را از روی ایمیج میسازد.
- start - یک کانتینر موجود را آغاز میکند.
- run – یک کانتینر را ایجاد کرده و آن را اجرا میکند.
- ls - کانتینرهای در حال اجرا را فهرست میکند.
- inspect - اطلاعات زیادی در مورد یک کانتینر ارائه میکند.
- logs - log-ها را نمایش میدهد.
- stop - کانتینر در حال اجرا را با ملایمت متوقف میکند.
- kill - پروسس اصلی کانتینر را اجباراً از بین میبرد.
- rm – یک کانتینر متوقف شده را حذف میکند.
ایمیجها
از ساختار دستور زیر استفاده میکنیم:
docker image my_command
- build - یک ایمیج میسازد.
- push – یک ایمیج را به ریپازیتوری ریموت پوش میکند.
- ls – ایمیجها را فهرست میکند.
- history – اطلاعات ایمیج واسط را نمایش میدهد.
- inspect – اطلاعات زیادی در مورد یک ایمیج نمایش میدهد که شامل لایهها نیز میشود.
- rm - یک ایمیج را حذف میکند.
متفرقه
- docker version – اطلاعاتی در مورد کلاینت داکر و نسخههای سرور نمایش میدهد.
- docker login - وارد یک رجیستری داکر میشوید.
- docker system prune - همه کانتینرهای بیاستفاده، شبکههای استفاده نشده و ایمیجهای بیمصرف را حذف میکند.
کانتینرها
در این بخش دستوراتی که به کانتینرها مربوط هستند را به تفصیل معرفی کرده و مورد بررسی قرار میدهیم.
عبارتهای create ،start و run در زندگی روزمره ما مفاهیم آشنایی هستند؛ اما هر یک از آنها یک دستور جداگانه داکر محسوب میشوند که یک کانتینر را ایجاد کرده یا آن را اجرا میکنند. در ادامه برخی از دستورهای ایجاد کانتینر را بررسی میکنیم.
docker container create my_repo/my_image:my_tag
این دستور یک کانتینر را از یک تصویر میسازد. دقت کنید که در ادامه این مقاله بخش my_repo/my_image:my_tag را به صورت اختصاری my_image مینویسیم. فلگهای بسیار زیادی وجود دارند که میتوان به یک دستور create ارسال کرد.
a- اختصاری برای attach-- است که کانتینر را به STDIN ،STDOUT یا STDERR الصاق میکند. اینک که یک کانتینر ایجاد کردهایم میتوانیم آن را آغاز کنیم.
docker container start my_container
دستور فوق یک کانتینر موجود را آغاز میکند. دقت کنید که کانتینر میتواند به وسیله شناسه کانتینر یا نام کانتینر مورد ارجاع قرار گیرد.
docker container start my_container
اینک که میدانیم چگونه میتوانیم یک کانتینر را ایجاد کرده یا آغاز کنیم. در ادامه یکی از پرکاربردترین دستورهای داکر را معرفی میکنیم. این دستور ترکیبی از دو دستور create و start به صورت run است.
docker container run my_image
دستور فوق یک کانتینر جدید میسازد و آن را آغاز میکند. این دستور نیز گزینههای زیادی دارد که در ادامه برخی از آنها را بررسی میکنیم:
docker container run -i -t -p 1000:8000 --rm my_image
i- اختصاری برای interactive-- است. این فلگ STDIN را حتی در صورتی که الصاق نشده باشد باز نگه میدارد. t- اختصاری برای tty-- است. این فلگ یک شبه ترمینال تخصیص میدهد که ترمینال شما را به STDIN و STDOUT کانتینر اتصال میدهد. ما باید هر دو فلگ i- و t- را ارائه کنیم تا بتوانیم از طریق پوسته ترمینال با کانتینر تعامل پیدا کنیم.
p- اختصاری برای port— است. این پورت واسطی برای دنیای خارج محسوب میشود. پورت 1000:8000 در واقع پورت 8000 داکر را به پورت 1000 رایانه نگاشت میکند. اگر اپلیکیشنی دارید که چیزی را روی مرورگر خروجی میدهد، در این صورت باید در مرورگر خود به آدرس localhost:1000 بروید تا آن را ببینید.
فلگ rm— به طور خودکار زمانی که کانتینر متوقف شود، آن را حذف میکند. در ادامه برخی دستورهای دیگر run را بررسی میکنیم.
docker container run -it my_image my_command
sh دستوری است که میتواند در زمان اجرا بیان شود. sh باعث باز شدن یک نشست shell درون کانتینر میشود که به وسیله آن میتوان با ترمینال تعامل یافت. در ایمیجهای Alpine استفاده از sh نسبت به bash ترجیح بیشتری دارد، چون در این ایمیجها bash به صورت پیشفرض نصب نیست. با وارد کردن دستور exit میتوانید از نشست تعاملی shell خارج شوید. دقت کنید که i- و t- را میتوانیم به صورت it- ترکیب کنیم.
docker container run -d my_image
d- اختصاری برای دستور detach— است. بدین ترتیب کانتینر در پسزمینه اجرا میشود. این وضعیت به ما اجازه میدهد که در عین اجرا کردن کانتینر از همان ترمینال برای دستورهای دیگر نیز بتوانیم استفاده کنیم.
بررسی وضعیت کانتینر
اگر کانتینرهای داکرِ در حال اجرایی دارید و میخواهید بفهمید که با کدام یک باید تعامل پیدا کنید، در این صورت باید آنها را فهرست کنید:
docker container ls
این دستور کانتینرهای در حال اجرا را فهرست میکند. ضمناً اطلاعات مفیدی در مورد کانتینرها ارائه میکند.
docker container ls -a -s
در دستور فوق فلگ a- اختصاری برای all- است. یعنی همه کانتینرها (و نه فقط کانتینرهای اجرایی) فهرست شود.
s- اختصاری برای size-- است یعنی اندازه هر کانتینر نیز مشخص شود.
docker container inspect my_container
با استفاده از دستور فوق اطلاعات زیادی مورد یک کانتینر میتوان مشاهده کرد.
docker container logs my_container
این دستور log-های یک کانتینر را نمایش میدهد.
جمعبندی دستورهای کانتینر
در برخی موارد لازم است که یک کانتینر در حال اجرا را متوقف کنیم. بدین منظور میتوانیم از دستور زیر استفاده کنیم:
docker container stop my_container
دستور فوق یک یا چند کانتینر در حال اجرا را با ملایمت متوقف میکند. یعنی به این کانتینر به صورت پیشفرض 10 ثانیه زمان میدهد تا قبل از خاموش شدن همه پروسسهای خود را پایان دهد.
اما اگر این مقدار صبور نیستید میتوانید از دستور زیر استفاده کنید:
docker container kill my_containe
دستور فوق یک یا چند کانتینر را به صورت آنی متوقف میکند. این کار مانند کشیدن سیم تلویزیون از پریز برق است. در اغلب موارد استفاده از دستور stop ترجیح بیشتری دارد.
docker container kill $(docker ps -q)
این دستور همه کانتینرهای اجرایی را از بین میبرد. برای حذف کانتینرها میتوانید از دستورهای زیر استفاده کنید:
docker container rm my_container
دستور فوق یک یا چند کانتینر را حذف میکند.
docker container rm $(docker ps -a -q)
این دستور همه کانتینرهایی که در حال اجرا نیستند را حذف میکند.
بدین ترتیب به انتهای بخش دستورهای کانتینرها میرسیم. برای جمعبندی باید اشاره کنیم که ابتدا باید یک کانتینر را اجرا کنیم و سپس کانتینر را آغاز میکنیم یا این که این مراحل را با استفاده از دستور docker run my_container با هم ترکیب میکنیم. در این زمان اپلیکیشن ما در حال اجرا است.
برای متوقف کردن کانتینر از دستور docker stop my_container استفاده میکنیم و در نهایت برای حذف کانتینر نیز میتوانیم از دستور docker rm my_container بهره بگیریم.
اینک نوبت آن رسیده که برخی دستورهای جادویی که با استفاده از آنها قالبهای تولید کانتینر یعنی ایمیجها را دستکاری میکنیم مورد بررسی قرار دهیم.
ایمیجها
در این بخش هفت دستور برای کار با ایمیجهای داکر را مورد بررسی قرار میدهیم.
توسعه ایمیجها
docker image build -t my_repo/my_image:my_tag.
این دستور یک ایمیج داکر با نام my_image از داکرفایلی که در مسیر یا URL مذکور قرار دارد ایجاد میکند. فلگ t- اختصاری برای تگ است. این فلگ به داکر اعلام میکند که این ایمیج را با عبارت ارائه شده تگگذاری کند. در این مثال از تگ my_tag استفاده شده است.
نقطه در انتهای دستور فوق به داکر اعلام میکند که ایمیج را بر مبنای داکرفایلی که در دایرکتوری کاری جاری قرار دارد بسازد.
زمانی که ایمیجی را میسازید، میتوانید آن را به یک ریپازیتوری ریموت push کنید. بدین ترتیب این ایمیج را با همه به اشتراک میگذارید و بسته به نیاز میتوانند آن را pull کنند. با فرض این که بخواهید از Docker Hub به این منظور استفاده کنید، باید به مرورگر خود بروید و یک حساب در این وبسایت بسازید. این کار رایگان است.
دستور زیر یک دستور ایمیج نیست؛ اما چون مفید است در این بخش به آن اشاره میکنیم.
docker login
دستور فوق باعث میشود بتوانید وارد یک رجیستری داکر بشوید. کافی است نام کاربری و رمز عبور خود را در زمانی که از شما سؤال میشود وارد کنید.
docker image push my_repo/my_image:my_tag
دستور فوق یک ایمیج را به یک رجیستری Push میکند. زمانی که ایمیجهایی را ساختیم لازم خواهد بود که آنها را مورد بررسی و بازبینی قرار دهیم.
بازبینی ایمیجها
docker image ls
این دستور، فهرستی از ایمیجها ارائه میکند. اندازه هر ایمیج نیز نمایش مییابد.
docker image history my_image
این دستور ایمیجهای واسط یک ایمیج را با اندازهشان و همچنین طرز ساخت نشان میدهد.
docker image inspect my_image
اطلاعات زیادی در مورد جزییات ایمیجها نمایش میدهد که شامل لایههایی است که یک ایمیج را تشکیل میدهند.
حذف ایمیجها
در برخی موارد هم لازم است که ایمیجها را پاکسازی کنیم.
docker image rm my_image
این دستور ایمیج مورد نظر را حذف میکند. اگر آن ایمیج در ریپازیتوری ریموت ذخیره شد باشد، ایمیج همچنان در آنجا موجود خواهد بود.
docker image rm $(docker images -a -q)
همه ایمیجها را حذف میکند. هنگام استفاده از این دستور مواظب باشید. دقت کنید که ایمیجهایی که به یک ریپازیتوری ریموت push شده باشند همچنان در آنجا حفظ میشوند. در واقع این یکی از مزیتهای رجیستریها محسوب میشود.
اینک شما با اغلب دستورهای ضروری مرتبط با ایمیج داکر آشنا هستید. در بخش بعدی این سری مقالهها برخی دستورهای مرتبط با داده داکر را بررسی خواهیم کرد.
دستورهای متفرقه
در این بخش برخی دستورهای متفرقه و مفید داکر را معرفی میکنیم.
docker version
این دستور اطلاعاتی در مورد کلاینت داکر و نسخههای سرور نمایش میدهد.
docker login
این دستور شما را وارد یک رجیستری داکر میکند. کافی است نام کاربری و رمز عبور خود را در زمانی که سؤال میشود وارد کنید.
docker system prune
این دستور را در مقاله بعدی بررسی خواهیم کرد؛ اما از آنجا که جزو دستورهای مفید متفرقه محسوب میشود آن را نیز در این فهرست قرار دادیم.
docker system prune
همه کانتینرهای استفاده نشده، شبکههای بیاستفاده و ایمیجهای بیمصرف را پاک میکند.
docker system prune -a --volumes
در دستور فوق a- اختصاری برای all— است. این دستور همه ایمیجهای بیاستفاده را پاک میکند. فلگ Volumes— والیومهای بیاستفاده را حذف میکند. در مورد والیومها در بخش بعدی این سری مقالات صحبت خواهیم کرد.
داکر در CLI نسخه 1.13 برخی دستورهای مدیریتی را معرفی کرده است که به طور منطقی گروهبندی شدهاند و نامگذاری یکنواختی دارند. دستورهای قدیمی همچنان کارمی کنند؛ اما دستورهای جدید آغاز کار با داکر را تسهیل ساختهاند. ما در این مقاله از این نامهای جدید استفاده کردهایم.
جمعبندی
اگر به تازگی کار با داکر را آغاز کردهاید، مهمترین دستورهای داکر شامل موارد زیر هستند:
docker container run my_image
یک کانتینر جدید ایجاد کرده و آن را آغاز میکند. البته این دستور به برخی فلگها نیاز دارد.
docker image build -t my_repo/my_image:my_tag.
این دستور یک تصویر میسازد.
docker image push my_repo/my_image:my_tag
یک ایمیج را به ریپازیتوری ریموت Push میکند. در ادامه فهرستی از دستورهای ضروری داکر را ملاحظه میکنید:
کانتینرها
ساختار دستورها به صورت docker container my_command است.
- create - یک کانتینر را از روی ایمیج میسازد.
- start - یک کانتینر موجود را آغاز میکند.
- run – یک کانتینر را ایجاد کرده و آن را اجرا میکند.
- ls - کانتینرهای در حال اجرا را فهرست میکند.
- inspect - اطلاعات زیادی در مورد یک کانتینر ارائه میکند.
- logs - log- ها را نمایش میدهد.
- stop - کانتینر در حال اجرا را با ملایمت متوقف میکند.
- kill - پروسس اصلی کانتینر را اجباراً از بین میبرد.
- rm – یک کانتینر متوقف شده را حذف میکند.
ایمیجها
از ساختار دستور زیر استفاده میکنیم:
docker image my_command
- build - یک ایمیج میسازد.
- push – یک ایمیج را به ریپازیتوری ریموت پوش میکند.
- ls – ایمیجها را فهرست میکند.
- history – اطلاعات ایمیج واسط را نمایش میدهد.
- inspect – اطلاعات زیادی در مورد یک ایمیج نمایش میدهد که شامل لایهها نیز میشود.
- rm - یک ایمیج را حذف میکند.
متفرقه
- docker version – اطلاعاتی در مورد کلاینت داکر و نسخههای سرور نمایش میدهد.
- docker login – وارد یک رجیستری داکر میشوید.
- docker system prune – همه کانتینرهای بیاستفاده، شبکههای استفاده نشده و ایمیجهای بیمصرف را حذف میکند.
برای مشاهده ارجاع CLI با استفاده از داکر کافی است دستور docker را در خط فرمان وارد کنید. مستندات داکر را میتوانید در این صفحه (+) ملاحظه کنید. اینک شما میتوانید به سادگی همه کار با داکر بکنید. در بخش بعدی این سری مقالههای آموزش جامع داکر در مورد مفاهیم مختلف داکر توضیح داده و همه این مفاهیم را جمعبندی میکنیم. بخش آخر این سری مطالب را در لینک زیر ملاحظه کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش داکر (Docker) برای توسعهدهندگان
- مجموعه آموزشهای مهندسی نرمافزار
- اکوسیستم داکر (Docker) — کامپوننتهای رایج
- راهنمای استفاده از Docker و Node.js — از صفر تا صد
- کشف سرویس و انبارههای پیکربندی توزیع یافته در اکوسیستم داکر (Docker) —راهنمای جامع
- داکر چیست ؟ | راهنمای شروع به کار با Docker — رایگان و به زبان ساده
==