نحوه اجرای یک کانتینر در داکر #
داکر برنامهها را درون کانتینرها اجرا میکند؛ محیطهای سبک و ایزولهای که نرمافزار را به همراه وابستگیها و پیکربندیهایش بستهبندی میکنند. برخلاف ماشینهای مجازی، کانتینرها به یک سیستم عامل مهمان کامل نیاز ندارند و در عوض هسته میزبان را به اشتراک میگذارند. این امر باعث میشود کانتینرها سریعتر شروع به کار کنند و از نظر منابع کارآمدتر باشند. این docker container runدستور روش اصلی برای شروع کانتینرها از تصاویر، اعمال گزینههای زمان اجرا و ایجاد فرآیندهای ایزوله است.
این مقاله نحوه استفاده از آن docker container runبرای راهاندازی کانتینرها با تنظیمات سفارشی را توضیح میدهد. شما یاد خواهید گرفت که چگونه کانتینرها را نامگذاری کنید، آنها را در حالت جدا اجرا کنید، پورتها را منتشر کنید، حجمها را نصب کنید و پاکسازی خودکار را با آن فعال کنید --rm. همچنین شامل جداول مرجعی است که پرچمهای مهم اجرای داکر را برای مدیریت منابع، شبکهها، ذخیرهسازی و سلامت کانتینر شرح میدهد.
نسخه پاسخ کوتاه #
# Run a container interactively from an image
$ docker container run -it ubuntu
# Run a container in the background
$ docker container run -d nginx
# Run and name the container
$ docker container run --name myapp alpine
# Run and publish container port 80 to host port 8080
$ docker container run -p 8080:80 nginx
# Mount a volume into the container
$ docker container run -v $(pwd):/data alpine
# Run and remove container after it exits
$ docker container run --rm busybox echo "done"هر دستور، کاربرد اصلی docker container run، از جمله نامگذاری، شبکه، حجمها، حالت تعاملی و پاکسازی را نشان میدهد.
گزینههای عمومی اجرای داکر #
| گزینه | توضیحات | مثال |
|---|---|---|
-d،--detach | کانتینر را در پسزمینه (حالت جدا) اجرا کنید. | -d |
--name | یک نام دلخواه به کانتینر اختصاص دهید. | --name my-nginx |
--rm | پس از خروج، ظرف را به طور خودکار بردارید. | --rm |
-e،--env | یک متغیر محیطی در کانتینر تنظیم کنید. | -e NODE_ENV=production |
--env-file | بارگذاری متغیرهای محیطی از یک فایل | --env-file ./env.list |
--entrypoint | نقطه ورودی پیشفرض تصویر را نادیده بگیرید. | --entrypoint /bin/sh |
-t،--tty | یک شبه TTY برای ورودی تعاملی اختصاص دهید (که معمولاً با استفاده میشود -i). | -it |
-i،--interactive | STDIN را حتی اگر متصل نیست، باز نگه دارید (برای حالت تعاملی استفاده میشود). | -it |
--workdir،-w | دایرکتوری کاری را درون کانتینر تنظیم کنید. | --workdir /usr/src/app |
گزینههای شبکهبندی Docker Run #
| گزینه | توضیحات | مثال |
|---|---|---|
-p،--publish | برای نمایش یک سرویس، یک پورت کانتینر را به یک پورت میزبان نگاشت کنید. | -p 8080:80 |
-P،--publish-all | به طور خودکار تمام پورتهای کانتینر را در معرض پورتهای میزبان تصادفی قرار دهید. | -P |
--network | کانتینر را به یک شبکه داکر تعریف شده توسط کاربر متصل کنید. | --network backend-net |
--add-host | یک ورودی DNS سفارشی به فایل کانتینر اضافه کنید /etc/hosts. | --add-host db.local:10.0.0.5 |
--dns | سرورهای DNS سفارشی را برای تبدیل نام درون کانتینر مشخص کنید. | --dns 1.1.1.1 |
گزینههای ذخیرهسازی Docker Run #
| گزینه | توضیحات | مثال |
|---|---|---|
-v،--volume | یک مسیر میزبان یا یک والیوم نامگذاری شده را به مسیر یک کانتینر متصل (mount) میکند. | -v /data:/app/data |
--mount | با استفاده از یک سینتکس ساختاریافته برای انواع bind، volume یا tmpfs، فضای ذخیرهسازی را مونت کنید. | --mount type=bind,src=/data,dst=/app |
--tmpfs | یک سیستم فایل موقت در حافظه درون کانتینر ایجاد کنید. | --tmpfs /app/cache |
--read-only | برای امنیت بیشتر، کل سیستم فایل کانتینر را روی حالت فقط خواندنی تنظیم کنید. | --read-only |
گزینههای مدیریت منابع Docker Run #
| گزینه | توضیحات | مثال |
|---|---|---|
--cpus | کانتینر را محدود کنید تا فقط از تعداد مشخصی هسته CPU استفاده کند. | --cpus 2 |
--memory،-m | یک محدودیت سخت برای استفاده از حافظه تعیین کنید (مثلاً، 512m، 2g). | -m 512m |
--memory-swap | محدودیت ترکیبی حافظه + فضای ذخیرهسازی را تنظیم کنید. باید با استفاده شود --memory. -۱برای مجاز کردن فضای ذخیرهسازی نامحدود استفاده کنید. | --memory-swap 1g |
--oom-kill-disable | از بسته شدن کانتینر در صورت پر شدن از حد حافظه جلوگیری کنید (توصیه نمیشود). | --oom-kill-disable |
--pids-limit | حداکثر تعداد فرآیندهای داخل کانتینر را محدود کنید. | --pids-limit 100 |
گزینههای امنیتی Docker Run #
| گزینه | توضیحات | مثال |
|---|---|---|
--user | کانتینر را به عنوان یک کاربر خاص (UID و GID اختیاری) اجرا کنید. | --user 1000:1000 |
--cap-add/--cap-drop | قابلیتهای هسته لینوکس را برای کانتینر اضافه یا حذف کنید. | --cap-drop NET_RAW |
--security-opt | پروفایلهای امنیتی کانتینر (مثلاً seccomp، AppArmor، SELinux) را تنظیم کنید. | --security-opt seccomp=./profile.json |
--privileged | دسترسی کامل میزبان به کانتینر را اعطا کنید. فقط در مواقع ضروری (مثلاً برای دسترسی به سختافزار) استفاده کنید. | --privileged |
گزینههای سلامت کانتینر Docker Run #
| گزینه | توضیحات | مثال |
|---|---|---|
--health-cmd | دستوری که درون کانتینر اجرا میشود تا مشخص شود که آیا سالم است یا خیر. | --health-cmd "curl -f http://127.0.0.1/" |
--health-interval | زمان انتظار بین بررسیهای سلامت (مثلاً، 30s، 1m). | --health-interval 30s |
--health-retries | تعداد خرابیهای متوالی مورد نیاز برای علامتگذاری کانتینر به عنوان ناسالم. | --health-retries 3 |
--no-healthcheck | هرگونه بررسی سلامت تعریفشده در تصویر را غیرفعال کنید. | --no-healthcheck |
گزینههای اضافی اجرای داکر #
| گزینه | توضیحات | مثال |
|---|---|---|
--restart | سیاست راهاندازی مجدد کانتینر را پیکربندی میکند. مقادیر رایج: no، on-failure، always، unless-stopped. | --restart always |
--log-driver | بخش مدیریت ثبت وقایع (logging backend) را مشخص میکند (مثلاً، json-file، syslog، none). | --log-driver json-file |
--pull | کنترل میکند که داکر چه زمانی تصویر را دریافت میکند ( always، missing، یا never). | --pull always |
اجرای کانتینر تحت نام خاص #
--nameاز پرچم with برای اختصاص یک نام دلخواه به کانتینر خود استفاده کنید docker container run. این به ثبت وقایع، مدیریت و اتوماسیون کمک میکند. بدون این پرچم، داکر یک نام تصادفی مانند frosty_morse. تولید میکند.
نام کانتینرها باید با یک کاراکتر الفبایی-عددی شروع شود و فقط میتواند شامل حروف، اعداد، زیرخط ( _)، نقطه ( .) و خط فاصله ( -) باشد.
سینتکس دستور #
docker container run --name <container-name> [IMAGE]--name <container-name>: یک نام خاص را به کانتینر اختصاص میدهد.[IMAGE]: ایمیج داکر مورد استفاده (مثلاً،nginx،ubuntu،busybox).
نمایش فرمان #
- یک کانتینر BusyBox با نام ایجاد کنید
busybox_test.کنسول$ docker container run --name busybox_test busybox - یک کانتینر Nginx با نام ایجاد کنید
web-server.کنسول$ docker container run --name web-server nginx - یک کانتینر اوبونتو با نام ایجاد کنید
linux.کنسول$ docker container run --name linux ubuntu - یک کانتینر نامگذاری شده ایجاد کنید
my-nginxو آن را در پسزمینه اجرا کنید.کنسول$ docker container run --name my-nginx -d nginx - تأیید کنید که کانتینر در حال اجرا است.کنسول
$ docker container ls - نمایش لاگهای مربوط به
my-nginxکانتینر.کنسول$ docker container logs my-nginx - تغییر نام
my-nginxبهmy-nginx-2.کنسول$ docker container rename my-nginx my-nginx-2 - برای تأیید تغییر نام، کانتینرها را فهرست کنید.کنسول
docker container ls
خروجی:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dbbe80f32d93 nginx "/docker-entrypoint.…" ۲۰ seconds ago Up 20 seconds 80/tcp my-nginx-2
اجرای کانتینر در پسزمینه (حالت جدا) #
به طور پیشفرض، داکر کانتینرها را در پیشزمینه اجرا میکند و خروجی آنها را در ترمینال شما نمایش میدهد. برای اجرای کانتینرها در پسزمینه، از -dپرچم (detached) استفاده کنید. این امر به ویژه برای سرویسهایی که باید به طور مداوم اجرا شوند، مانند سرورهای وب و کارگران پسزمینه، مفید است.
سینتکس دستور #
docker container run -d [IMAGE]-d: کانتینر را در حالت جدا اجرا میکند.[IMAGE]: تصویری که برای کانتینر استفاده میشود (مثلاً،nginx،busybox).
نمایش فرمان #
- یک کانتینر Nginx را در حالت پسزمینه اجرا کنید.کنسول
docker container run --name nginx-bg -d nginx
- مشاهده لاگها به صورت بلادرنگ.کنسول
$ docker container logs -f nginx-bg - یک جلسه پوسته (shell session) درون کانتینر باز کنید.کنسول
$ docker container exec -it nginx-bg bash
- یک دستور را درون کانتینر اجرا کنید.کنسول
# dateخروجی:
Fri Jun 27 11:22:47 UTC 2025 - از پوسته خارج شوید.کنسول
# exit
اجرای کانتینر و انتشار پورتهای کانتینر #
از علامت -pیا برای دسترسی به پورتهای داخلی یک کانتینر از میزبان استفاده کنید . انتشار پورت به کلاینتهای خارجی این امکان را میدهد که به برنامههای کانتینر شده مانند سرورهای وب یا APIها دسترسی پیدا کنند.--publishdocker container run
انتشار پورت فقط برای اتصالات ورودی مورد نیاز است . کانتینرها میتوانند اتصالات خروجی را بدون هیچ گونه انتشاری برقرار کنند.
سینتکس دستور #
docker container run -p [IP:]<host_port>:<container_port> [IMAGE]-p: یک پورت کانتینر را به سیستم میزبان منتشر میکند.[IP:]: (اختیاری) پورت را به یک رابط خاص مانند متصل میکند۱۲۷.۰.۰.۱.<host_port>: پورتی که روی دستگاه میزبان نمایش داده میشود.<container_port>: پورت داخلی در کانتینر.[IMAGE]: ایمیج داکر برای اجرا.
نمایش فرمان #
- پورت کانتینر را
۸۰به پورت میزبان نگاشت کنید۸۰۸۰.کنسول$ docker container run -p ۸۰۸۰:۸۰ nginx
- پورت میزبان را برای ترافیک UDP
۸۰۸۰به پورت کانتینر نگاشت کنید.۱۲۳۴کنسول$ docker container run -p ۸۰۸۰:۱۲۳۴/udp busybox
- دسترسی را فقط به localhost محدود کنید.کنسول
$ docker container run -p ۱۲۷.۰.۰.۱:۸۰۸۰:۸۰ nginx
- پورت کانتینر را
۸۰به همان پورت میزبان نگاشت کنید.کنسول$ docker container run -p ۸۰:۸۰ nginx
- چندین پورت (HTTP و HTTPS) را در معرض نمایش قرار دهید.کنسول
$ docker container run -p ۸۰:۸۰ -p ۴۴۳:۴۴۳ nginx
کاربرد دستوری #
مثالهای زیر نحوهی عملکرد انتشار پورت، از جمله دسترسی محلی و از راه دور، را در عمل نشان میدهند.
- یک کانتینر Nginx اجرا کنید و پورت ۸۰۸۰ را در معرض دید عموم قرار دهید.کنسول
$ docker container run -d -p ۸۰۸۰:۸۰ nginx
- از یک سیستم خارجی به کانتینر دسترسی پیدا کنید (با IP نمونه خود جایگزین کنید).کنسول
$ curl http://<SERVER-IP>:8080
- یک کانتینر را که فقط به دسترسی localhost محدود شده است، اجرا کنید.کنسول
$ docker container run -d -p ۱۲۷.۰.۰.۱:۸۰۸۱:۸۰ nginx
- تأیید کنید که دسترسی به localhost کار میکند.کنسول
حلقه $ http://127.0.0.1:8081
- تأیید کنید که دسترسی از راه دور مسدود شده است (انتظار میرود که وقفه زمانی یا خطا رخ دهد).کنسول
$ curl http://<SERVER-IP>:8081
اجرای کانتینر با هاست ولوم مونت شده #
به طور پیشفرض، کانتینرهای داکر به صورت ایزوله از سیستم فایل میزبان اجرا میشوند. برای اشتراکگذاری فایلها بین میزبان و کانتینر، مانند پیکربندی برنامه، محتوای وبسایت یا دادههای پایگاه داده، از -vflag برای mount کردن یک دایرکتوری میزبان در کانتینر استفاده کنید.
سینتکس دستور #
docker container run -v <host_path>:<container_path>[:options] [IMAGE]-v: یک دایرکتوری را از سیستم میزبان mount میکند.<host_path>: مسیر مطلق به یک دایرکتوری روی میزبان.<container_path>: دایرکتوری هدف درون کانتینر.[:options]: تنظیمات اختیاری مانندro(فقط خواندنی).[IMAGE]: تصویر داکر برای اجرا، مانندnginxیاbusybox.
نمایش فرمان #
- یک دایرکتوری میزبان را با دسترسی خواندن و نوشتن در یک کانتینر BusyBox مانت کنید.کنسول
$ docker container run -v /home/linuxuser/data:/data busybox - همان دایرکتوری را به صورت فقط خواندنی mount کنید.کنسول
$ docker container run -v /home/linuxuser/data:/data:ro busybox
کاربرد دستوری #
از این مثال برای ساخت یک وب سرور کانتینری شده در دنیای واقعی با ارائه فایلهای استاتیک از سیستم میزبان با استفاده از Nginx استفاده کنید. این نشان میدهد که چگونه نصب ولوم، اشتراکگذاری مداوم محتوا بین میزبان و کانتینر را امکانپذیر میکند.
- برای وبسایت استاتیک خود، یک دایرکتوری روی هاست ایجاد کنید.کنسول
$ mkdir /home/linuxuser/webdata
- به دایرکتوری بروید.کنسول
$ cd /home/linuxuser/webdata
- یک صفحه HTML ایجاد کنید.کنسول
$ cat <<EOF > index.html <!DOCTYPE html> <html> <head><title>Negarnovin Greeting</title></head> <body><h1>Greetings from NegarNovin</h1></body> </html> EOF
- یک کانتینر Nginx اجرا کنید که دایرکتوری وبسایت را نصب کرده و آن را سرویس میدهد.کنسول
$ docker container run -d -p ۸۰۸۲:۸۰ -v /home/linuxuser/webdata:/usr/share/nginx/html:ro nginx
-d: حالت جدا.-p 8082:80پورت میزبان ۸۰۸۲ را به پورت ۸۰ کانتینر نگاشت میکند.-v ...:ro: دایرکتوری میزبان را به صورت فقط خواندنی درون کانتینر mount میکند.
- تأیید کنید که کانتینر، صفحه HTML را ارائه میدهد.کنسول
$ curl http://127.0.0.1:8082خروجی:
<!DOCTYPE html> <html> <head><title>negarnovin Greeting</title></head> <body><h1>Greetings from negarnovin</h1></body> </html>
دایرکتوریهای mount شده حتی پس از حذف کانتینر نیز باقی میمانند. تغییرات ایجاد شده در فایلهای موجود در کانتینر، در میزبان /usr/share/nginx/htmlنیز منعکس میشوند ./home/linuxuser/webdata
اجرای کانتینر داکر و حذف خودکار آن پس از خروج #
به طور پیشفرض، کانتینرهای متوقفشده در یک وضعیت روی سیستم باقی میمانند exited. از --rmپرچم با docker container runبرای حذف خودکار کانتینر پس از اتمام آن استفاده کنید. این برای کانتینرهای کوتاهمدت مانند اسکریپتها، تستها یا وظایف یکبارمصرف ایدهآل است.
سینتکس دستور #
docker container run --rm [IMAGE] [COMMAND]--rm: بلافاصله پس از خروج، کانتینر را خارج میکند.[IMAGE]: ایمیج داکر برای اجرا.[COMMAND]: دستوری که قرار است درون کانتینر اجرا شود.
نمایش فرمان #
- یک کانتینر اجرا کنید که چاپ میکند
Hello, worldو خودش حذف میشود.کنسول$ docker container run --rm busybox echo "Hello, world"
- یک کانتینر را اجرا کنید که به مدت ۵ ثانیه به حالت خواب میرود، سپس خارج میشود و خودش را حذف میکند.کنسول
$ docker container run --rm busybox sleep ۵
- یک کانتینر اوبونتو اجرا کنید که تاریخ فعلی را چاپ کند و خودش را حذف کند.کنسول
$ docker container run --rm ubuntu bash -c "echo Done && date"
کاربرد دستوری #
این نمایش نشان میدهد که چگونه --rmپرچم از تجمع کانتینرهای خارج شده جلوگیری میکند.
- یک کانتینر موقت BusyBox را با اجرا کنید
--rm.کنسول$ docker container run --name busybox --rm busybox echo "Temporary container"
- تأیید کنید که دیگر وجود ندارد.کنسول
$ docker container ls -aکانتینر در لیست نمایش داده نمیشود. داکر پس از اجرا آن را حذف کرد.
- همان کانتینر را بدون موارد زیر
--rmاجرا کنید :کنسول$ docker container run --name busybox busybox echo "Persistent container"
- دوباره همه کانتینرها را فهرست کنید.کنسول
$ docker container ls -aخروجی:
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES 9f5d3cc7bb3e busybox "echo 'Persistent co…" ۵ seconds ago Exited (0) 5 seconds ago busyboxاین کانتینر در حالت فعلی روی سیستم باقی میماند
Exitedو باید با استفاده از به صورت دستی حذف شودdocker container rm.
نتیجهگیری #
در این مقاله، نحوه اجرای کانتینرها با استفاده از دستور را آموختید docker container run. کانتینرها را نامگذاری کردید، آنها را در حالت جدا شده راه اندازی کردید، پورت ها را نگاشت کردید، دایرکتوری های میزبان را نصب کردید و پاکسازی خودکار را با … پیکربندی کردید --rm. همچنین پرچم های کلیدی برای مدیریت شبکه کانتینر، محدودیت منابع، گزینه های امنیتی و بررسی های سلامت را بررسی کردید.
این قابلیتها، پایه و اساس ساخت گردشهای کاری کانتینر قابل حمل و قابل تکرار را تشکیل میدهند. برای گزینههای بیشتر و پیکربندیهای پیشرفته، به مستندات رسمی داکر مراجعه کنید .