دستور docker attach دستور استاندارد اتصال به یک کانتینر در حال اجرا و دسترسی به primary process است. این دستور به entrypoint کانتینر و primary process متصل می شود:
1- از دستور docker run برای start یک instance سیستم عامل اوبونتو استفاده کنید، به جای نسخه ی آن عبارت latest را بنویسید، این مسئله منجر به دانلود و استفاده از آخرین نسخه میشود:
این کانتینر را در حال interactive یا تعاملی( -i ) با TTY session مشخص( -t ) و در حالت پردازش background (-d) فعال کنید. ما نام این کانتینر را attach-e103 قرار دادیم:
docker run -itd --name attach-e103 ubuntu:latest
2- بررسی کنید که این کانتینر در حال اجرا هست یا نه؟
docker ps
در خروجی خواهیم داشت:
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
90722712ae93 ubuntu:latest '/bin/bash' 18 seconds ago
Up 16 seconds attach-e103
دقت کنید که primary process این کانتینر Bash shell (/bin/bash) است.
3- با دستور docker attach به primary process کانتینر متصل شوید. این دستور را میتوان به 2 شکل زیر نوشت(با نام و با ID) یکی را بنویسید(ID ما باهم فرق دارد!)
docker attach attach-e103
# یا
docker attach 90722712ae93
بعد از اجرای این دستور به primary process منتقل میشوید که در اینجا Bash shell session کانتینر است:
root@90722712ae93:/#
حواستان باشد که بکاربردن دستور exit باعث terminate شدن shell session می شود و از آنجایی که shell session پردازش اصلی کانتینر ماست، باعث stop شدن کانتینر می شوید. برای این که از این shell session خارج شویم به ترتیب از Ctrl + P و سپس از Ctrl + Q تا از session ای که به آن attach شده ایم، detach شویم.
4- با استفاده از Ctrl + P و سپس از Ctrl + Q از session ای که به آن attach شده ایم، detach شوید. در خروجی پیغام read escape sequence مشاهده میکنید که به معنی این است که detach شده اید:
root@90722712ae93:/# read escape sequence
چند لحظه بعد به ترمینال اصلی برمیگردید.
5- بررسی کنید که کانتینر هنوز در حال اجرا هست یانه :
docker ps
در خروجی داریم:
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
90722712ae93 ubuntu:latest '/bin/bash' 10 minutes ago
Up 10 minutes attach-e103
6- دوباره به کانتینر متصل شوید:
docker attach attach-e103
# یا
docker attach 90722712ae93
7- دستور ممنوعه ی exit را بنویسید:
root@90722712ae93:/# exit
ناگهان از ترمینال کانتینر خارجی می شوید و به ترمینال اصلی برمیگردید!
8- وضعیت کانتینر های فعال را بررسی کنید:
docker ps
در خروجی هیچ کانتینری مشاهده نمی شود:
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
9- وضعیت تمام کانتینر ها را مشاهده کنید:
docker ps -a
در خروجی میبینید:
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS NAMES
90722712ae93 ubuntu:latest '/bin/bash'
20 minutes ago Exited (0) 3 minutes ago attach-e103
همانطور که میبینید، کانتینر در وضعیت gracefully terminated یعنی Exited (0) قرار دارد.
10- کارمان تمام شد! محیط خود را تمیز کنید:
docker system prune -fa
در خروجی میبینید:
Deleted Containers:
ry6v87v9a545hjn7535jk2kv9x8cv09wnkjnscas98v7a762nvnw7938798vnand
Deleted Images:
untagged: attach-e103
نتیجه:
دستور docker exec یک process جدید داخل یک کانتینر فعال ایجاد می کند و docker attach مستقیما به process اصلی کانتینر متصل میشود.
در تمرین های بعدی با دانشی که تا به اینجا کسب کردید و داکیومنت های ساده ی داکرهاب دیتابیس PostgreSQL را در کانتینر داکر اجرا میکنید. هردو تمرین در ابتدا سخت به نظر میرسند ولی تمام چیزی که برای انجام آنها نیاز دارید را در اختیار دارید.