Docker، پلتفرمی است که به شما اجازه ایجاد، اجرا، آزمایش و استقرار برنامهها را بصورت مستقل و قابل انتقال میدهد؛ بطوری که آن برنامهها تقریباً در هر کجا قابل اجرا باشند.
دستور docker run، یک Container از روی یک image مشخص ایجاد کرده و آن را با استفاده از یک دستور معین راهاندازی مینماید. این دستور، یکی از اولین دستوراتی است که هنگام شروع کار با Docker باید با آن آشنا شوید.
در این مقاله، بهمنظور نشان دادن انواع روشها برای اجرای یک Container Docker، از Nginx image رسمی استفاده شده است.
این مطلب نیز ممکن است برای شما مفید باشد: نحوه نمایش containerها درDocker
ساختار دستور Docker run
ساختار دستور docker run، به صورت زیر است:
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
نام imageای که Container باید از آن ساخته شود، تنها آرگومان مورد نیاز برای دستور run docker است.
دقت کنید که اگر Container روی سیستم محلی موجود نباشد، از رجیستری دریافت میشود.
در صورت عدم تعیین دستور، دستور مشخص شده در دستورالعملهای CMD یا ENTRYPOINT مربوط به Dockerfile، هنگام اجرای Container اجرا میشود.
از نسخه 1.13 به بالا، Docker CLI به گونهای بازسازی شده است که همه دستورات براساس شی مرتبط، گروهبندی شدهاند.
از آنجایی که دستور run با containerها تعامل دارد، زیرمجموعهای از Container docker است. بنابراین، ساختار دستور جدید، به شرح زیر است:
$ docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
ساختار اول که هم اکنون نیز در نسخههای پیش از 1.13 پشتیبانی میشود، یک نام مستعار از docker container run است.
چنانچه میخواهید با تمام گزینههای دستور docker container run آشنا شوید، به این سایت مراجعه نمایید.
این مطلب نیز ممکن است برای شما مفید باشد: نحوه اتصال به Docker Container
اجرای Container در پیش زمینه
بهطور پیش فرض، هنگامیکه هیچ گزینهای به دستور docker run ارائه نشود، روند اصلی در پیش زمینه اجرا میشود. این بدان معنی است که ورودی، خروجی و خطای استاندارد از فرآیند اصلی به نشست ترمینال وصل میشوند.
$ docker container run nginx
خروجی فرآیند nginx باید در ترمینال شما نمایش داده شود. در اینجا، به دلیل عدم وجود اتصال به وب سرور، ترمینال خالی است.
برای متوقف کردن Container، اجرای فرایند Nginx را با فشار دادن کلید ترکیبی CTRL+C خاتمه دهید.
اجرای Container در حالت جدا
بهمنظور عدم توقف اجرای Container، هنگام خروج از نشست ترمینال، آن را در یک حالت جداگانه راهاندازی کنید. این، مشابه اجرای یک فرآیند لینوکس در پس زمینه است.
برای راهاندازی یک Container مستقل میتوانید از گزینه d- استفاده نمایید:
$ docker container run -d nginx
output:
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa
در این صورت، Container مستقل، تنها با خاتمه یافتن فرآیند اصلی متوقف میشود.
برای اطمینان، شما میتوانید Containerهای در حال اجرا را با استفاده از دستور docker konten ls لیست کنید.
به منظور اتصال ترمینال خود به فرآیند ریشه Container مستقل، از دستور docker container attach استفاده نمایید.
این مطلب نیز ممکن است برای شما مفید باشد: رفع خطای "Permission Denied" پس از نصب Docker در اوبونتو
حذف Container بعد از خارج شدن
بهطور پیش فرض، هنگامیکه Container از سیستم میزبان خارج میشود، سیستم فایل آن همچنان بر روی سیستم میزبان ادامه مییابد.
گزینههای rm-- بههمراه دستور docker run منجر به حذف خودکار Container، در هنگام خروج آن از سیستم میزبان میشود:
$ docker container run --rm nginx
در این صورت ممکن است، Nginx image بهترین نمونه برای پاک کردن سیستم فایل Container پس از خروج Container نباشد. این گزینه، معمولاً در containerهای پیش زمینه استفاده میشود که وظایف کوتاه مدت، مانند آزمایشها یا پشتیبانگیری از پایگاهداده را انجام میدهند.
تنظیم نام Container
در Docker، هر Container با UUID و یک نام مشخص میشود. اگر این نام، بهطور پیش فرض تنظیم نشده باشد، نام Container بهطور خودکار توسط Daemon Demoner تولید میشود.
از گزینه name-- میتوانید، برای اختصاص یک نام دلخواه به Container استفاده نمایید:
$ docker container run -d --name my_nginx nginx
دقت کنید که نام Container باید یکتا باشد. بنابراین، اگر سعی کنید یک Container دیگر با همین نام راهاندازی کنید، خطایی مشابه با خطای زیر دریافت خواهید کرد:
output:
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.
درنتیجه بهتر است قبل از تعیین نام، دستور Container docker ls –a را برای مشاهده نام تمام containerها اجرا نمایید:
$ docker container ls
output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d695c1f5ef4 nginx "nginx -g 'daemon of…" 36 seconds ago Up 35 seconds 80/tcp my_nginx
نامهای معنیدار برای ارجاع Container از طریق یک شبکه Docker یا هنگام اجرای دستورات docker CLI کاربردی هستند.
این مطلب نیز ممکن است برای شما مفید باشد: ایجاد و اجرای Docker Image با استفاده از Dockerfile
تعیین پورتهای Container
بهطور پیش فرض، در صورت عدم تعیین پورت، اجرای فرآیند در Container تنها از داخل Container قابل دسترسی است.
تعیین پورتها، به معنی نگاشت پورتهای Container به پورتهای دستگاه میزبان است به گونهای که این پورتها در خارج از سرویسهای Docker نیز قابل دسترسی باشند.
برای تعیین یک پورت، میتوانید از گزینه p- به صورت زیر استفاده کنید:
-p host_ip:host_port:container_port/protocol
اگر در دستور بالا، هیچ host_ip مشخص نشده باشد، به صورت پیش فرض 0.0.0.0 تنظیم خواهد شد.
اگر protocol مشخص نشده باشد، به صورت پیش فرض TCP تعیین خواهد شد.
برای تعیین پورتهای مختلف، باید از چندین گزینه p- استفاده نمایید.
بهمنظور نگاشت پورت TCP 80 (nginx) در Container به پورت 8080 در رابط localhost میزبان، باید دستور زیر را کنید:
$ docker container run --name web_server -d -p 8080:80 nginx
با باز کردن آدرس http://localhost:8080 در مرورگر خود؛ یا اجرای دستور curl بصورت زیر، برروی میزبان Docker میتوانید؛ تأیید کنید که این پورت تعیین شده است:
$ curl -I http://localhost:8080
در این صورت، خروجی چیزی شبیه به این خواهد بود:
output:
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
به اشتراک گذاری دادهها
هنگامیکه یک Container متوقف شود، تمام دادههای تولید شده توسط آن Container حذف میشوند. Docker Volumeها روش ممتازی برای نگهداری دادهها و به اشتراک گذاری آنها در Containerهای مختلف هستند.
برای ایجاد و مدیریت volumeها، از گزینههای p- به صورت زیر استفاده کنید:
-v host_src:container_dest:options
host_src میتواند، مسیری مطلق برای یک volume نامگذاری شده یا یک فایل یا دایرکتوری در میزبان باشد.
container_dest، یک مسیر مطلق برای یک فایل یا دایرکتوری موجود در Container است.
در این دستور، Optionها میتوانند، rw (خواندن-نوشتن) و ro (فقط خواندن) باشند. اگر هیچ گزینه ای مشخص نشده باشد، rw به صورت پیش فرض انتخاب میشود.
بهمنظور شرح نحوه عملکرد، در ادامه یک مثال اجرا مینماییم.
بدین منظور، ابتدا یک دایرکتوری در هاست ایجاد کرده و یک فایل index.html در آن قرار دهید:
$ mkdir public_html
$ echo "Testing Docker Volumes" > public_html/index.html
سپس، دایرکتوری public_html را در مسیر usr/share/nginx/html/ در Container بصورت mount قرار دهید:
$ docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx
بهجای مشخص کردن مسیر مطلق برای دایرکتوری public_html، در اینجا از دستور (pwd)$ استفاده میکنیم که دایرکتوری کنونی را چاپ میکند.
اکنون، اگر در مرورگر خود آدرس http://localhost: 8080 را تایپ کنید، باید محتوای فایل index.html را مشاهده نمایید. بدین منظور میتوانید از دستور curl نیز استفاده کنید:
$ curl http://localhost:8080
output:
Testing Docker Volumes
اجرای Container به صورت تعاملی
هنگام برخورد با فرآیندهای تعاملی مانند bash، از گزینههای i- و t- برای راهاندازی Container استفاده نمایید.
گزینه it- به Docker میگوید که ورودی استاندارد را به ترمینال متصل کرده و یک pseudo-tty تعیین نماید:
$ docker container run -it nginx /bin/bash
پوسته Bash مربوط به Container به ترمینال وصل میشود و خط فرمان به صورت زیر تغییر مییابد:
output:
root@1da70f1937f5:/#
اکنون میتوانید، با پوسته Container تعامل برقرار کرده و هر دستوری را درون آن اجرا نمایید.
در این مثال، یک دستور (bin/bash/) بهعنوان آرگومان به دستور docker run ارائه شده است.
منبع:
linuxize
0 دیدگاه
نوشتن دیدگاه