Dariush Tasdighi - داریوش تصدیقی
Dariush Tasdighi - داریوش تصدیقی
خواندن ۱۱ دقیقه·۴ سال پیش

مرجعی برای دستورات Docker، به همراه آموزش عملی!

این مجموعه حاصل بیش از یک سال تجربه و تدریس می‌باشد!
این مجموعه حاصل بیش از یک سال تجربه و تدریس می‌باشد!
توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.
با کمال تشکر
داریوش تصدیقی
کانال تلگرام: IranianExperts@
شماره تلفن همراه: ۰۹۱۲۱۰۸۷۴۶۱
نشانی پست الکترونیکی: DariushT@GMail.com
فیلم‌های آموزشی https://www.aparat.com/DariushT
آدرس سایت‌ها: https://WebsiteAnalytics.ir - http://IranianExperts.ir - http://Date2Date.ir
نسخه مقاله: ۱.۷ - تاریخ بروزرسانی: ۱۳۹۹/۰۳/۱۴

اصطلاحا به سیستمی که Docker بر روی آن نصب شده است، Host گفته می‌شود.

برای نمایش کلیه دستورات Docker از دستور ذیل استفاده می‌کنیم:

docker

برای نمایش نسخه Docker، یکی از دستورات ذیل را استفاده می‌کنیم:

docker --version docker -v
Docker version 19.03.8, build afacb8b

برای نمایش اطلاعات کامل‌تری از Docker نصب شده، یکی از دستورات ذیل را استفاده می‌کنیم. دقت کنید که دستور دوم، نسبت به دستور اول، اطلاعات کامل‌تری را نمایش می‌دهد:

docker version docker info

برای Login و Logout کردن به سایت Docker Hub می‌توانیم از دستورات ذیل در Host استفاده نماییم:

docker login docker logout

نمایش راهنما در خصوص دستورات

نمایش کلیه دستورات مربوط به Docker Image:

docker image

نمایش کلیه دستورات مربوط به Docker Container:

docker container

به طور کلی، در مقابل هر بخش یا مجموعه‌ای از دستورات، می‌توانیم از پارامتر help-- استفاده کرده و راهنمای مناسبی دریافت نماییم:

docker --help docker image --help docker image ls --help

و یا به طور خلاصه از h- استفاده نماییم:

docker -h docker image -h docker image ls -h

نمایش Images

نمایش Image های Download یا Pull شده:

docker images docker image ls

نمایش Containers

نمایش تمام Container های Start شده:

docker container ls docker ps

نمایش تمام Container های موجود (اعم از این‌که Start بوده و یا Stop باشند):

docker container ls --all docker container ls -a docker ps --all docker ps -a

در صورتی که بخواهیم علاوه بر اطلاعات نمایش داده شده توسط دستورات فوق، ستون سایز (حجم) Container ها را نیز مشاهده نماییم، از دستور ذیل استفاده می‌کنیم:

docker ps -as

دریافت یک Image از Docker Hub

در مثال ذیل، یک Image به نام hello-world دانلود یا Pull می‌شود:

docker image pull hello-world

و یا به طور خلاصه می‌توانیم از دستور ذیل استفاده نماییم:

docker pull hello-world

در صورتی که در هنگام pull یا run، تگ (Tag) مربوطه مشخص نشود، به طور پیش‌فرض، Image ای با تگ latest دانلود می‌شود.

در مثال ذیل، Image ای به نام hello-world و با تگی (Tag) به نام latest دانلود می‌شود:

docker pull hello-world:latest

نمایش اطلاعاتی در خصوص Image ها

هر Image به صورت یکپارچه نبوده! و از تکه‌های (لایه‌های) مختلفی (Layers) تشکیل شده است. Image فوق، یک Image تستی بوده و صرفا دو لایه دارد. برای این‌که فهرستی از لایه‌های یک Image را مشاهده نماییم، از دستور ذیل استفاده می‌کنیم:

docker image history hello-world:latest

و یا می‌توانیم به طور خلاصه از دستور ذیل استفاده نماییم:

docker history hello-world

شاید بد نباشد که یک Image مناسب‌تری برای این منظور Download = Pull کرده و سپس دستور فوق را برای آن Image اجرا نماییم:

docker pull ubuntu:latest docker history ubuntu

نکته:‌ باید دقت داشته باشیم که در هر مرحله، سعی می‌کنیم که دستورات را خلاصه‌تر بکار برده تا برای رسیدن به اهداف خود در Docker، زمان کمتری صرف کنیم. لذا مگر در مواردی خیلی خاص، که ممکن است خطای نگارشی صورت گرفته باشد، در این‌که بخشی از دستور را نمی‌نویسیم، عمدی وجود دارد!

برای مشاهده اطلاعات کامل‌تری از Image، می‌توانیم از دستور ذیل استفاده نماییم:

docker image inspect hello-world docker image inspect ubuntu

و یا به طور خلاصه از دستور ذیل استفاده نماییم:

docker inspect hello-world docker inspect ubuntu

ایجاد یک Container

با استفاده از دستور Docker container run و یا به طور خلاصه Docker run، در صورتی که Image مورد نظر وجود داشته باشد، یک Container‌ با یک نام بامزه! ایجاد می‌شود و در صورتی که Image مربوطه وجود نداشته باشد، ابتدا Image مربوطه، دانلود (Pull) شده و سپس یک Container جدید ایجاد می‌شود:

docker container run hello-world

یا به طور خلاصه

docker run hello-world docker run hello-world:latest

با استفاده از Attribute ای به نام name، می‌توانیم برای Container‌ ای که می‌خواهیم ایجاد شود، نام دلخواهی مشخص نماییم:

docker run --name something hello-world

نمایش اطلاعاتی در خصوص Image ها

برای نمایش اطلاعاتی در خصوص یک Container می‌توانیم یکی از دستورات ذیل را استفاده نماییم. دستور اول پیغام‌ها و خطاهایی که در زمان راه‌اندازی Container ایجاد شده است نمایش داده و دستور دوم اطلاعات از Container نمایش می‌دهد:

docker container logs something docker container inspect something

تغییر نام یک Container

برای تغییر نام یک Container‌، می‌توانیم از دستور ذیل استفاده نماییم:

docker container rename something somename

و یا به طور خلاصه

docker rename something somename

حذف یک Image

برای حذف یک Image، از دستوری ذیل استفاده می‌کنیم:

docker image rm hello-world

و یا به طور خلاصه از دستور ذیل استفاده می‌کنیم:

docker rmi hello-world

نکته: در صورتی که از این Image، حتی یک Container (به هر شکل!) وجود داشته باشد، دستور مذکور خطا خواهد داد.

در صورتی که بخواهیم یک Image‌ را (حتی اگر از آن Container ای وجود داشته باشد) حذف نماییم، از Attribute‌ ای به نام force استفاده می‌کنیم.

docker rmi hello-world --force docker rmi hello-world -f

حذف یک Container

برای حذف یک Container، می‌توانیم از دستور Docker container rm و یا به طور خلاصه از دستور Docker rm‌ استفاده نماییم.

نکته: در صورتی که بخواهیم با استفاده از نام (Name) عمل حذف را انجام دهیم، باید نام را به طور کامل بنویسیم، ولی در صورتی که بخواهیم بر اساس ID، آن‌را حذف نماییم، می‌توانیم دو تا چند کاراکتر از ID را نوشته و نیازی به نوشتن کل ID‌ وجود ندارد.

docker container rm something

و یا

docker rm something

حذف یک Container با استفاده از بخشی از ID آن:

docker container rm [Some Part of ID]

و یا

docker rm [Some Part of ID]

نکته: در صورتی که بخواهیم چند Container را هم‌زمان حذف نماییم، می‌توانیم نام آن‌ها و یا ID های آن‌ها را با یک Space‌ در ادامه دستور Docker rm بنویسیم.

نکته: در صورتی که بخواهیم چند Image را هم‌زمان حذف نماییم، می‌توانیم نام آن‌ها را با یک Space در ادامه دستور Docker rmi بنویسیم.

نکته: در صورتی که Container، در حالت Start باشد، در صورتی که بخواهیم آن را حذف نماییم، دستور با خطا مواجه خواهد شد! لذا برای حذف یک Container ابتدا آن‌را Stop کرده و سپس آن‌را حذف می‌کنیم.

Docker stop

برای Stop کردن یک Container که Start شده باشد، از دستور ذیل استفاده می‌کنیم:

docker container stop u2

و یا به طور خلاصه از دستور ذیل استفاده می‌کنیم:

docker stop u2

Workshop

docker pull ubuntu:latest

دستور ذیل، یک Container به نام u1‌ ایجاد کرده و به طور پیش‌فرض Command یا دستور bin/bash/ را در داخل آن اجرا می‌کند، و سپس از Container خارج شده و Container را Stop = Exited می‌کند.

docker run --name u1 ubuntu:latest docker ps -a

دستور ذیل، یک Container به نام u2‌ ایجاد کرده و Command ای به نام ls را به همراه پارامترهای lha، در داخل آن اجرا می‌کند و سپس از Container خارج شده و Container را Stop = Exited می‌کند.

docker run --name u2 ubuntu:latest ls –lha docker ps –a

دستور ذیل، یک Container به نام u3‌ ایجاد کرده و به طور پیش‌فرض Command یا دستور bin/bash/ را در داخل آن اجرا می‌کند و ما در داخل محیط Container‌ قرار خواهیم گرفت و از Container خارج نمی‌شویم:

docker run --name u3 -it ubuntu:latest

برای خروج از Container، می‌توانیم از دکمه‌های ترکیبی CTRL+D استفاده کرده، و یا دستور exit را تایپ و اجرا نماییم:

exit
docker ps -a

دستور ذیل، یک Container به نام u4‌ ایجاد کرده و به طور پیش‌فرض Command یا دستور bin/bash/ را در داخل آن اجرا می‌کند و ما در داخل محیط Container‌ قرار خواهیم گرفت و از Container خارج نمی‌شویم:

docker run --name u4 -it ubuntu:latest

در صورتی که از دکمه‌های ترکیبی CTRL+P+Q استفاده نماییم، از داخل Container خارج شده،‌ ولی Container در حالت Start‌ باقی می‌ماند!

docker ps -a

نکته: Attribute ای به نام interactive و یا معادل آن i وجود داشته، و Attribute‌ ای به نام tty و یا معادل آن t وجود دارد که به جای استفاده از آن‌ها به صورت ذیل:

docker container run --interactive --tty …

می‌توانیم به صورت خلاصه و به صورت ذیل نوشته:

docker run -i -t …

و یا به طور خیلی خلاصه‌تر و به شکل ذیل بنویسیم:

docker run -it …

در صورتی که کانتینر Stop شده باشد و بخواهیم آن‌را Start نماییم، می‌توانیم از دستور ذیل استفاده کنیم:

docker container start u1 docker ps -a

و یا به طور خلاصه از دستور ذیل استفاده کنیم:

docker start u1 docker ps -a

بعد از دستور فوق، در صورتی که از دستور docker ps –a استفاده نماییم، خواهیم دید که Container، کماکان Stop = Exited می‌باشد! دقیقا چه اتفاقاتی رخ داده است؟ با اجرای دستور فوق، ابتدا Container اجرا (Start) شده، دستور (Command) پیش‌فرض آن یعنی bin/bash/ را اجرا می‌کند و سپس از Container خارج شده و به طور خودکار Stop می‌شود!

در صورتی که بخواهیم یک کانتینر Stop شده را اجرا (Start) نموده و داخل آن شده و داخل آن بمانیم و در داخل آن از دستورات Linux، استفاده نماییم، از دستور ذیل استفاده می‌کنیم:

docker container start –ia u1

و یا به طور خلاصه از دستور ذیل استفاده می‌کنیم:

docker start –ia u1

نکته بسیار مهم!

نمی‌دانم که این مساله جزء ویژگی‌های Docker بوده و یا یک Bug محسوب می‌شود!

نکته آن است که اگر بار اول Container را بدون پارامترهای it، اصطلاحا Run کنیم! در صورتی که آن Container را Start کنیم، Container ابتدا Start شده، Command پیش‌فرض‌اش را اجرا کرده و سپس Stop می‌شود! و در ضمن امکان استفاده از پارامترهای ia در زمان Start وجود ندارد! و ما نمی‌توانیم به صورت Interactive داخل Container برویم!

ولی اگر بار اول Container را با پارامترهای it، اصطلاحا Run نماییم! در صورتی که Container را Start کنیم، Container ابتدا Command پیش‌فرض خود را اجرا کرده و Start باقی می‌ماند! و اگر با استفاده از پارامترهای ia، بخواهیم Container را Start نماییم، می‌توانیم به صورت Interactive داخل Container وارد شویم!

این نکته در خصوص داکری که بر روی ویندوز و یا لینوکس نصب شده باشد صدق می‌کند!


Docker exec

در صورتی که بخواهیم دستوری را در داخل یک کانتینر (Start شده!) اجرا نماییم،‌ از دستور ذیل استفاده می‌کنیم:

docker container exec u1 ls

و یا به طور خلاصه از دستور ذیل استفاده می‌کنیم:

docker exec u1 ls

نکته: دستور فوق،‌ در صورتی اجرا می‌شود که Container مورد نظر (u1)، قبلا Start شده باشد! در صورتی که این کانتینر Stop = Exited باشد، اجرای دستور فوق با خطا مواجه می‌شود.

نکته: در صورتی که Container مورد نظر (u1)، قبلا Start شده باشد، با اجرای دستور فوق، دستور ls (نمایش فهرست) در داخل Container اجرا شده و در صورتی که خروجی داشته باشد (که در این مثال دارد!)، نمایش داده خواهد شد.

در صورتی که بخواهیم وارد یک Container از قبل Start شده بشویم، می‌توانیم از دستور ذیل استفاده نماییم:

docker exec –i u4 ls

نکته: گاهی ممکن است که دستور فوق عمل نکند! (در ویندوز عمل نمی‌کند ولی در لینوکس عمل می‌کند!) یعنی دستور ls در داخل Container اجرا شده،‌ ولی در داخل Container قرار نمی‌گیریم!

Docker attach

بهترین دستور برای این‌که وارد یک Container شده و داخل آن بمانیم، دستور ذیل می‌باشد:

docker container attach u4

و یا به طور خلاصه، می‌توانیم از دستور ذیل استفاده نماییم:

docker attach u4

نکته: مشابه دستور Docker exec، دستور فوق (docker attach)، نیز در صورتی اجرا می‌شود که Container مورد نظر Start شده باشد.

Docker image prune

برای حذف تمام Image هایی که از آن‌ها هیچ Container ای وجود ندارد، از دستور ذیل استفاده نماییم:

docker image prune

Docker container prune

برای حذف تمام Container هایی که Stop = Exited می‌باشند، از دستور ذیل استفاده می‌کنیم:

docker container prune

Docker run --rm

این دستور بیشتر برای تست استفاده می‌شود!

فرض کنید که می‌خواهیم از یک Image، یک Container‌ ایجاد کرده، وارد آن شده، یک سری عملیاتی تستی انجام داده و بعد از خروج از Container، به طور خودکار حذف شود، برای این منظور از دستور ذیل استفاده می‌کنیم:

docker run -it --rm ubuntu:latest docker ps -a

Run Container in background (Detach)

این دستور (پارامتر) در کارهای جدی خیلی استفاده می‌شود!

معمولا دستور Docker run، به صورت Foreground، اجرا می‌شود. در صورتی که بخواهیم دستور Docker run به صورت Background اجرا شود از پارامتر d استفاده می‌کنیم:

docker run -it -d ubuntu:latest docker ps -a

Docker Shortcuts = میانبرهای داکر

برای این‌که صرفا ID های Container ها را بدست آوریم، می‌توانیم از دستور ذیل استفاده نماییم:

docker ps –a –q

و یا به طور خلاصه از دستور ذیل استفاده نماییم:

docker ps -aq

نکته: برای اجرای دستورات ذیل، باید در محیط PowerShell باشیم!

برای Stop کردن همه Container‌ ها می‌توانیم از دستور ذیل استفاده نماییم:

docker stop $(docker ps -aq) docker ps -a

برای حذف کردن تمام Container ها می‌توانیم از دستور ذیل استفاده نماییم:

docker rm $(docker ps –aq) docker ps –a

برای این‌که صرفا ID های Image ها را بدست آوریم، می‌توانیم از دستور ذیل استفاده نماییم:

docker images –a –q

و یا به طور خلاصه از دستور ذیل استفاده نماییم:

docker images -aq

برای حذف کردن تمام Image ها می‌توانیم از دستور ذیل استفاده نماییم:

docker rmi $(docker images -aq)
docker images

Workshop

یک کار هیجان‌انگیز! بنابر سلیقه و نیاز خود یک Image ایجاد کنیم

فرض کنید که یک Image، دانلود (Pull) کرده‌ایم و از این Image، یک Container ایجاد کرده، وارد آن شده و تغییراتی در آن Container ایجاد می‌کنیم. به عنوان مثال آن‌را Update می‌کنیم، نرم‌افزاری را Install‌ می‌کنیم و یا تنظیماتی را تغییر می‌دهیم.

نکته: این یکی از راحت‌ترین روش‌های ایجاد Image می‌باشد، انشاءالله در آموزش‌های بعدی روش دیگری (ایجاد یک Image که با استفاده از فایل Dockerfile) آموزش داده خواهد شد.

docker run -it --name my-ubuntu ubuntu:latest apt-get update -y apt-get upgrade -y apt-get install -y nano exit

برای این‌که تغییراتی که در نسخه Original ایجاد کرده‌ایم (شده است) را مشاهده نماییم، می‌توانیم از دستور ذیل استفاده نماییم:

docker container diff my-ubuntu

و یا به طور خلاصه از دستور ذیل استفاده می‌کنیم:

docker diff my-ubuntu

حال برای این‌که از این Container که با توجه به نیاز و سلیقه خود آن را تغییر داده‌ایم، یک Image ایجاد نماییم، از دستور ذیل استفاده می‌کنیم:

docker container commit my-ubuntu

و یا به طور خلاصه از دستور ذیل استفاده می‌کنیم:

docker commit my-ubuntu

حال اگر از دستور docker images استفاده نماییم، خواهیم دید که یک Image ولی با نام و تگ <none> ایجاد شده است!

برای این‌که به Image خود یک نام و تگ مناسب اختصاص دهیم، از دستور ذیل استفاده می‌کنیم:

docker image tag [IMAGE_ID] my-ubuntu-image:latest

نکته: به جای [IMAGE_ID]، نیازی نیست که ID مربوط به Image را به طور کامل تایپ نماییم! دو یا چند حرف اول آن کفایت می‌کند!

نکته: در صورتی که به جای my-ubuntu-image:latest، صرفا my-ubuntu-image بنویسیم، به طور خودکار تگی به نام latest به آن تخصیص داده می‌شود!

حال از این پس، به جای آن‌که هر بار از Image اصلی ubuntu:latest، یک Container ایجاد کرده و تغییرات مورد نیازمان را اعمال نماییم، می‌توانیم به راحتی از Image خودمان به هر تعداد Container ایجاد نماییم!

docker run -it --name my-new-ubuntu my-ubuntu-image:latest

منابع

https://hub.docker.com

حتما در سایت فوق، ثبت‌نام می‌کنیم!

https://docs.docker.com

https://docs.docker.com/reference

https://docs.docker.com/get-docker

https://docs.docker.com/engine/reference/commandline/docker

https://hub.docker.com/editions/community/docker-ce-desktop-windows

سایت‌هایی آموزشی و سایت‌هایی که می‌توانیم به صورت آنلاین و تستی با دستورات داکر کار کنیم:

https://labs.play-with-docker.com

https://training.play-with-docker.com

https://www.katacoda.com/courses/docker

https://learndocker.online

https://docker-curriculum.com

https://github.com/docker/labs/tree/master/beginner

داکر و دات نت کور

https://docs.microsoft.com/en-us/dotnet/core/docker/build-container?tabs=windows

داکر و شبکه

https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/

سایت‌های ایرانی

https://dockerme.ir

پایان

مرجعدستوراتداکرdockerآموزش
محقق، معمار، مشاور، مدرس و برنامه‌نویس حوزه فن‌آوری اطلاعات - تحلیل‌گر و فعال بازار بورس و سرمایه
شاید از این پست‌ها خوشتان بیاید