1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5 (1 votes, average: 5٫00 out of 5)
You need to be a registered member to rate this.

دستورات داکر Docker

Docker یک پلتفرم نرم افزاری است که به شما امکان می دهد برنامه های کاربردی را به عنوان کانتینر قابل حمل توسعه، تست و اجرا کنین ، و تقریبا این کانتینر ها در هر کجا بصورت مجازی اجرا می شوند. دستور docker run یک کانتینر را از یک image مشخص ایجاد می کند و کانتینر را با استفاده از یک دستور معین شروع می کند. این دستور از اولین دستوراتی است که هنگام شروع کار با داکر باید با آنها آشنا شوید. در این مقاله ، ما از image رسمی Nginx استفاده خواهیم کرد تا روشهای مختلف اجرای یک کانتینر داکر را نشان دهیم.

 

اجرای دستورات Docker

فرم دستور docker run به شکل زیر است.

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

نام image که باید از آن کانتینر ساخته شود تنها آرگومان مورد نیاز برای دستور docker run است. اگر image  روی سیستم لوکال موجود نباشد ، از رجیستری خارج می شود. اگر دستوری تعریف نشه ، فرمان مشخص شده در Dockerfile’s ها CMD یا ENTRYPOINT هنگام اجرای کانتینر اجرا می شود. با شروع از نسخه 1.13 ، Docker CLI بازسازی شده است. همه دستورات تحت object که با آنها ارتباط برقرار کرده اند ، گروه بندی شده اند. از آنجا که فرمان run با کانتینر تعامل دارد، آن یک دستور فرعی docker container است. syntax فرمان جدید به شرح زیر است

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

syntax قبل از نسخه 1.13 همچنان پشتیبانی می شود. Under the hood ، دستور docker run یک نام مستعار برای docker container run است تا کاربران تشویق می شوند که از دستور جدید استفاده کنند. لیستی از تمام گزینه های docker container run را می توانید در صفحه اسناد داکر مشاهده کنید.

 

اجرای داکر در Foreground

به طور پیش فرض ، هنگامی که هیچ گزینه ای به دستور docker run ارائه نمی شود ، پروسس های root در پیش زمینه شروع می شود. این بدان معنی است که ورودی ، خروجی و خطا از پروسس های root به session ترمینال وصل می شود.

docker container run nginx

خروجی پروسس nginx در ترمینال شما نمایش داده می شود. از آنجا که هیچ اتصالی به وب سرور وجود ندارد ، ترمینال خالی است. برای متوقف کردن کانتینر، اجرای Nginx را با فشار دادن CTRL+C خاتمه دهید.

 

اجرای کانتیر داکر در حالت Detached Mode 

برای نگه داشتن کانتینر هنگام خروج از session ترمینال ، آن را در حالت جداگانه شروع کنید. این مشابه اجرای یک پروسس لینوکس در پس زمینه است. برای شروع یک کانتینر جداشده از گزینه -d استفاده کنید:

docker container run -d nginx

خروجی :

050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

کانتینر Detached Mode با پایان یافتن پروسس root متوقف می شود. می توانید کانتینردر حال اجرا را با استفاده از فرمان docker container ls لیست کنید. برای وصل کردن ترمینال خود به پروسس root  کانتینر جداشده ، از دستور docker container attach استفاده کنید.

 

حذف کانتینر داکر بعد از خروج

به طور پیش فرض ، هنگامی که کانتینر خارج می شود ، file system آن بر روی سیستم میزبان ادامه می یابد. دستور --rm به docker run اعلام میکند که کانتینر را بصورت خودکار بعد از خروج حذف کند

docker container run --rm nginx

ممکن است image Nginx بهترین نمونه برای تمیز کردن file system کانتینر پس از خروج از کانتینر باشد. این ویژگی معمولا در کانتینرپیش زمینه استفاده می شود که وظایف کوتاه مدت مانند آزمایش ها یا پشتیبان گیری از پایگاه داده را انجام می دهند.

 

تنظیم اسم کانتینر

در داکر ، هر کانتینربا UUID و نام آن مشخص می شود. به طور پیش فرض ، اگر صریحا تنظیم نشده باشد ، نام کانتینر به طور خودکار توسط Daemon Demoner تولید می شود. از گزینه --name برای اختصاص یک نام دلخواه به کانتینر استفاده کنید

docker container run -d --name my_nginx nginx

نام کانتینر باید یونیک unique و غیرتکراری باشد. اگر سعی می کنید یک uniqueدیگر با همین نام راه اندازی کنید ، خطایی مشابه با این دریافت خواهید کرد:

docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9...c". You have to remove (or rename) that container to be able to reuse that name.

دستورات داکر Docker

دستور docker container ls -a برای اجرای تمام کانتینرهای لیست شده اجرا کنین و اسمشون رو مشاهده کنین

docker container ls

خروجی :

CONTAINER ID  IMAGE  COMMAND                 CREATED         STATUS         PORTS   NAMES
9d695c1f5ef4  nginx  "nginx -g 'daemon of…"  36 seconds ago  Up 35 seconds  80/tcp  my_nginx

 

نامهای معنی دار برای ارجاع کانتینر در یک شبکه داکر یا هنگام اجرای دستورات docker CLI مفید هستند.

 

انتشار پورت کانتیر داکر

به طور پیش فرض ، در صورت عدم انتشار پورت ، پروسس اجرا شده در کانتینر فقط از داخل کانتینر قابل دسترسی است. انتشار پورت ها به معنی mapping container از پورت های کانتینر به پورت های دستگاه میزبان است به گونه ای که این پورت ها در خارج از داکر قابل دسترسی باشند. برای انتشار پورت از ویژگی -p زیر استفاده کنید

-p host_ip:host_port:container_port/protocol

اگر host_ip مشخص نشده باشد ، به صورت پیش فرض 0.0.0.0 است.

اگر protocol مشخص نشده باشد ، به صورت پیش فرض TCP است.

برای انتشار پورت های مختلف ، از گزینه -p استفاده کنید.

 

برای map پورت TCP 80 (nginx) در کانتینر و برای پورت 8080 در رابط localhost میزبان ، دستور زیر اجرا می کنید

docker container run --name web_server -d -p 8080:80 nginx

با باز کردن http://localhost:8080 در مرورگر خود یا اجرای دستور curl در سرور Docker می توانید مشاهده کنید که این پورت فعال شده است

curl -I http://localhost:8080

خروجی باید به شکل زیر باشه

HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Tue, 26 Nov 2019 22:55:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
Connection: keep-alive
ETag: "5dd3e500-264"
Accept-Ranges: bytes

 

به اشتراک گذاری داده ها (Mounting Volumes)

هنگامی که یک کانتینر متوقف شود ، تمام داده های تولید شده توسط کانتینر حذف می شوند. Docker Volume روش ممتازی برای تداوم داده ها و به اشتراک گذاری آن در کانتینر های مختلف است. برای ایجاد و مدیریت volumes ، از گزینه -p  استفاده کنید

-v host_src:container_dest:options

host_src می تواند آدرس path کامل برای فایل یا پوشه در میزبان یا یک volume نامگذاری شده باشد.

container_dest یک آدرسpath  کامل برای پفایل یا پوشه موجود در کانتینر است.

گزینه های Options میتوانند  rw (خواندن-نوشتن) و ro(فقط خواندن) باشند. اگر هیچ گزینه ای مشخص نشده باشد ، rw را پیش فرض می کند. برای توضیح نحوه عملکرد ، بیایید یک دایرکتوری در هاست ایجاد کنیم و یک فایل index.html را در آن قرار دهیم

mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html

بعد ، پوشه دایرکتوریpublic_html را در /usr/share/nginx/html در کانتینر mount کنید:

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

به جای مشخص کردن آدرس path به پوشه public_html  ، ما از دستور $(pwd) استفاده می کنیم ، که پوشه فعلی را prints می کند. حال اگر در مرورگر خود http://localhost:8080 را تایپ کنید ، باید محتوای فایل index.html را مشاهده کنید. همچنین می توانید از curl استفاده کنید

curl http://localhost:8080

خروجی به شکل زیر است

Testing Docker Volumes

 

اجرای Container Interactively

هنگام برخورد با interactive processes مانند bash، از گزینه های -i و  -t برای شروع کانتینر استفاده کنید. گزینه های -it به Docker می گوید که ورودی استاندارد را به ترمینال متصل کرده و یک شبه نوع را اختصاص دهد

docker container run -it nginx /bin/bash

پوسته Bash کانتینر به ترمینال وصل می شود و سریعا فرمان تغییر میابد، خروجی :

root@1da70f1937f5:/#

اکنون می توانید با پوسته کانتینر تعامل برقرار کرده و هر فرمانی را درون آن اجرا کنید. در این مثال ، ما یک فرمان (/bin/bash) را به عنوان آرگومان برای دستور docker run ارائه کردیم که به جای آن که در Dockerfile مشخص شده بود ، اجرا شد.