دستورات داکر Docker
دستورات داکر 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 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 مشخص شده بود ، اجرا شد.