جدول محتوایی
آموزش اتصال SSH به کانتینر های داکر | SSH در docker containers
ssh داکر بخشی جدایی ناپذیر از زیرساخت برنامه برای بسیاری از سازمان ها است.
تیمهای DevOps اغلب Docker را برای استقرار حیاتی انتخاب میکنند. این امر به علت سادگی و ماهیت محدود کانتینرهای آن است.
کانتینرهای Docker یک منظوره، مقیاس عملیات و مدیریت ناوگان های بزرگ را آسان و کارآمد می کند. شما همچنین می توانید تغییراتی را در یک کانتینر و برنامه بدون هیچ گونه شانسی برای تأثیر مستقیم روی سایرین اعمال کنید.
اما این طبیعت با محدودیت هایی همراه است. اگر نیاز به دسترسی کنسول به کانتینر Docker خود دارید، متوجه خواهید شد که در واقع یک سرور کاملاً پیشرفته با سیستم عامل کامل نیست. معمولاً OpenSSH به صورت دیفالت نصب نشده است.
در این مقاله، روشی را برای اجرای دستورات کنسول در کانتینرهای Docker پوشش میدهیم که به شما امکان میدهد فرآیند استفاده از SSH را برای همان هدف تقلید کنید.
پیش از ادامه ی مقاله ، در صورت نیاز به خرید سرور مجازی ایران به سایت ایرانیکاسرور مراجعه کرده و از پلن های فوق العاده با قیمت های عالی دیدن کنید.
پیش نیاز ها
- دستگاه میزبان شما داکر را با یک یا چند کانتینر راهاندازی و اجرا کند
- دسترسی شما به خط فرمان در ماشین میزبان
اجرای خط فرمان با داکر
بهترین روش برای انجام عملیات کنسول روی کانتینر داکر استفاده از ابزارهایی است که داکر ارائه می دهد. میتوانید از عملکرد خط فرمان Docker برای اجرای دستورات درون کانتینر استفاده کنید. بیاید یک نگاهی بیندازیم!
ابتدا، باید از طریق ترمینال خود به دستگاه میزبان (یا اگر Docker را به صورت محلی اجرا می کنید، دستگاه محلی خود) دسترسی داشته باشید و نام کانتینر را برای اجرا داشته باشید. در این مثال، کانتینر به عنوان ubuntu_test نامیده می شود.
اجرای داکر
دستور docker run چند کار را انجام می دهد. ابتدا، با استفاده از تصویری که می خواهید از آن استفاده کند، یک کانتینر برای شما ایجاد می کند.
اگر قبلاً تصویر را به صورت محلی دانلود کرده باشید، از آن استفاده می شود، و در غیر این صورت، Docker آن را به طور خودکار تشخیص می دهد و قبل از شروع کانتینر جدید آن را برای شما دانلود می کند.
در این حالت از تصویر اوبونتو استفاده می کنیم. شما میتوانید از پرچمهای –it استفاده کنید (که یک جلسه را باز میکند و آن را شبه tty میکند، که اساساً ترمینال شما را قادر میسازد تا بهگونهای عمل کند که گویی پایانهای برای کانتینر داکر است):
sudo docker run --name ubuntu_test -it ubuntu
این دستور به سرعت کانتینر را ایجاد می کند (اگر قبلاً تصویر را دانلود کرده اید در عرض چند ثانیه) و شما را به عنوان کاربر اصلی به جلسه ترمینال داخل کانتینر منتقل می کند.
اگر با این بخش ناآشنا هستید، میتوانید با بررسی بالا برای فرآیندهای در حال اجرا، میزان پراکندگی اشیاء در کانتینر Docker را مشاهده کنید – تعداد زیادی از آنها وجود نخواهد داشت. اکنون راهی برای اجرای دستورات در کانتینر Docker خود در اختیار دارید. توجه داشته باشید، همانطور که گفته شد، از نظر عملکرد محدودتر از یک ترمینال و سرور کامل خواهد بود.
دستور docker exec
اگر بعداً می خواهید برای اجرای دستورات بیشتر به یک کانتینر در حال اجرا برگردید، می توانید از docker exec استفاده کنید. آن را با همان پرچم های -it ارسال کنید و نام کانتینر و دستوری را که می خواهید اجرا کنید (در این مورد، bash) ارائه دهید:
docker exec -it ubuntu_test bash
اتصال مستقیم از طریق ssh
شما می توانید این دستورات داخلی Docker را دور بزنید و به سادگی یک سرور OpenSSH را از طریق dockerfile یا از طریق Package Manager روی کانتینر خود نصب کنید (توجه داشته باشید که بسته های نصب شده با Package Manager شما زمانی که کانتینر شما متوقف می شود باقی نمی مانند). پس از انجام این کار، می توانید پس از بازیابی IP کانتینر خود، یک دستور معمولی ssh user@address ارسال کنید.
با این حال ، دو دلیل برای انجام ندادن این کار وجود دارد:
- اولین مورد این است که قابلیت داشتن یک تجربه پوسته bash مانند SSH از قبل از طریق docker run و docker exec وجود دارد. اضافه کردن مراحل و سربار منابع برای ایجاد یک روش جدید برای اجرای همان دستورات، در بیشتر موارد، غیر ضروری است.
- ثانیاً، ردپای و محدوده کانتینر(های) Docker شما را گسترش می دهد تا یک سرور OpenSSH به آنها اضافه کند و آن را اجرا کند. تمام هدف Docker این است که حداقل مجموعه ای از عملکردها را در کانتینر داشته باشد و به راحتی مستقر و پیکربندی شود.
اگر با وجود این، به طور خاص نیاز به استفاده از SSH دارید، میتوانید با ویرایش dockerfile خود و ضمیمه کردن دستورات زیر، این کار را به روشی پایدارتر انجام دهید:
RUN apt install openssh-server && systemctl ssh start && systemctl ssh enable
همچنین باید آدرس IP برنامه داکر خود را به دست آورید تا به درستی از طریق SSH به آن متصل شوید. با اجرای دستور زیر می توانید این کار را انجام دهید:
docker inspect ubuntu_test | grep "IPAddress"
خروجی باید چیزی به این صورت باشد:
"SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2",
اکنون، ssh داکر پس از چرخش روی این کانتینر نصب و اجرا میشود، و میتوانید به سادگی با استفاده از آدرس IP کانتینر به آن متصل شوید و دستورات را اجرا کنید.
امیدواریم این مقاله به شما در درک دستورات اساسی مورد نیاز برای اجرای دستورات در کانتینر داکر کمک کرده باشد! در بیشتر موارد، نیازهای شما را میتوان با عملکرد داخلی Docker با docker run و docker exec پوشش داد، و در غیر این صورت، همیشه میتوانید به افزودن یک سرور SSH به کانتینر خود متوسل شوید.