Docker، ابزاری است که به شما امکان می‌دهد، یک container برای اجرای برنامه‌ها ایجاد کنید. یک Docker container، یک ماشین مجازی کاملاً مجزا است.

در این راهنما، سه روش برای برقراری اتصال SSH با یک Docker container و اجرای دستورات در آن آموزش داده شده است.

 

به منظور دنبال کردن این آموزش، به موارد زیر نیاز خواهید داشت:

  • سیستم لینوکسی که Docker برروی آن اجرا است.
  • container از پیش تنظیم شده‌ای که در حال اجرا است.
  • دسترسی به پنجره ترمینال یا خط فرمان (با فشردن Ctrl+Alt+T یا Ctrl+Alt+F2).
  • یک حساب کاربری با امتیازات sudo

 

این مطلب نیز ممکن است برای شما مفید باشد: نصب Docker در CentOS 8

 

روش 1: استفاده از docker exec برای اجرای دستورات در Docker Container

دستور docker exec، یک دستور مشخص را درون یک container فعال اجرا می‌کند. شما می‌توانید با ایجاد یک bash shell (پوسته‌ای که در آن می‌توانید دستورات را تایپ کنید) از آن برای SSH زدن به یک Docker container استفاده نمایید.

ساختار اصلی دستور docker exec برای اجرای فرمان در containerها به شرح زیر است:

docker exec [options] [container] [command]

اگر قبلاً این کار را نکرده‌اید، با دریافت یک Docker image شروع کنید. به عنوان مثال، شما می‌توانید Nginx را به صورت زیر بارگیری نمایید:

sudo docker pull nginx

 

 

سپس image را اجرا کنید:

sudo docker run ––name nginx–test –d nginx

 

به منظور تأیید، دستور زیر همه containerهای در حال اجرا را لیست می‌کند:

sudo docker ps

در خروجی باید image مربوط به nginx-test خود را مشاهده نمایید.

 

برای دسترسی و اجرای دستورات در آن Docker container، موارد زیر را تایپ کنید:

sudo docker exec –it nginx-test /bin/bash

اکنون، شما به container مربوط به nginx-test وارد شده‌اید. بنابراین، هر دستوری که وارد می‌نمایید، در آن container انجام می‌شود. گزینه i- تعاملی بودن را مشخص می‌کند و t- رابط تایپ ترمینال را فعال می‌نماید.

 

روش 2: استفاده از دستور docker attach برای اتصال به یک container در حال اجرا

دستور docker attach، ورودی، خروجی و جریان خطای محلی را به یک container پیوند می‌دهد و به طور پیش فرض، در یک پوسته bash راه‌اندازی می‌شود. برای اتصال به یک container در حال اجرا، دستور زیر را وارد کنید:

sudo docker attach container_Name

در مثال زیر، سیستم به container مربوط به nginx-test متصل می‌شود:

sudo docker attach nginx-test

 

پس از اجرای دستور، شما در container کار خواهید کرد. بدین معنی که هر دستوری که اجرا می‌نمایید، بر محیط Docker مجازی تأثیر می‌گذارد.

 

این مطلب نیز ممکن است برای شما مفید باشد: اجرای Docker Container در پس زمینه (حالت Detached)

 

روش 3: استفاده از SSH برای اتصال به Docker Container

شما می‌توانید با استفاده از SSH (Secure Shell) به یک Docker container متصل شوید. به طور معمول، SSH به منظور برقراری اتصال از راه دور از طریق شبکه به سرور استفاده می‌شود. این فناوری هنگام اتصال به یک Docker container مجازی در سیستم شما بطور یکسان عمل می‌کند.

نکته: ما این روش را توصیه نمی‌کنیم؛ زیرا image را بیش از محدوده معمولی حجیم می‌کند. به همین دلیل برای این کار، شما باید یک image با SSH قبلاً پیکربندی شده داشته باشید؛ در واقع کانتینر شما می باید دارای سرور SSH (به عنوان مثال OpenSSH) باشد.

 

مرحله 1: فعال‌سازی SSH برروی سیستم

با نصب و فعال کردن سرویس SSH شروع نمایید:

فعال سازی SSH در اوبونتو 18.04:

sudo apt-get install ssh

sudo systemctl ssh start

sudo systemctl ssh enable

service ssh status

فعال سازی SSH در CentOS 7:

yum –y install openssh-server openssh-clients

service sshd start

service sshd enable

service sshd status

 

مرحله 2: بدست آوردن آدرس IP مربوط به container

با استفاده از دستور docker inspect و فیلتر کردن نتایج، آدرس IP مربوط به container را دریافت کنید.

برای موتورهای Docker مدرن، از دستور زیر استفاده نمایید:

sudo docker inspect -f "{{ .NetworkSettings.IPAddress }}" container_name

برای موتورهای Docker قدیمی، دستور زیر را اجرا کنید:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name

 

سیستم، آدرس IP را همانطور که در تصویر بالا مشاهده می‌شود، نشان می‌دهد.

توجه: Docker container موردنظر باید در حال اجرا باشد، تا بتوان آدرس IP آن را دریافت کرد. اگر نیاز به راه اندازی یک docker container موجود دارید، از دستور زیر استفاده نمایید.

sudo docker start container_name

 

مرحله 3: اتصال SSH به Docker container

با دستور زیر، آدرس IP بدست آمده را ping کنید تا مطمئن شوید در دسترس است:

ping –c 3 172.17.0.2

 

از ابزار SSH به صورت زیر برای اتصال به image استفاده نمایید:

ssh root@172.17.0.2

سیستم باید رمز عبور کاربر root را برای آن container درخواست کند. اگر در خروجی بگوید که اتصال رد شد، احتمالاً container برای SSH تهیه نشده است. اما، چنانچه ترمینال تغییر نماید، اکنون از طریق SSH متصل شده‌اید و می‌توانید دستورات را در container اجرا کنید.

 

 

 

منبع:

phoenixnap