دستور 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 را در کانتینر داکر اجرا میکنید. هردو تمرین در ابتدا سخت به نظر میرسند ولی تمام چیزی که برای انجام آنها نیاز دارید را در اختیار دارید.