ڈوکر میں Nginx کو میزبان مشین پر Localhost MySQL سے جوڑنا

Shell

ڈوکر کنٹینرز سے لوکل ہوسٹ سروسز تک رسائی حاصل کرنا

میزبان مشین پر MySQL مثال سے منسلک ہونے کی ضرورت کے دوران ایک Docker کنٹینر کے اندر Nginx چلانا مشکل ہو سکتا ہے، خاص طور پر جب MySQL صرف لوکل ہوسٹ کا پابند ہو۔ یہ سیٹ اپ کنٹینر کو معیاری نیٹ ورکنگ طریقوں کا استعمال کرتے ہوئے MySQL سروس تک براہ راست رسائی سے روکتا ہے۔

یہ مضمون اس خلا کو پُر کرنے کے لیے مختلف حل تلاش کرتا ہے، جس سے ڈوکر کنٹینرز اور میزبان کے لوکل ہوسٹ پر چلنے والی خدمات کے درمیان ہموار رابطے کی اجازت ملتی ہے۔ ہم اس بات پر تبادلہ خیال کریں گے کہ عام طریقے کیوں کم پڑ سکتے ہیں اور مطلوبہ رابطہ حاصل کرنے کے لیے عملی اقدامات فراہم کرتے ہیں۔

کمانڈ تفصیل
docker network create --driver bridge hostnetwork ایک برج ڈرائیور کے ساتھ ایک حسب ضرورت ڈوکر نیٹ ورک بناتا ہے، جس سے کنٹینرز کو ایک ہی نیٹ ورک میں بات چیت کرنے کی اجازت ملتی ہے۔
host_ip=$(ip -4 addr show docker0 | grep -oP '(? میزبان کے docker0 انٹرفیس کا IP ایڈریس نکالتا ہے، جو کنٹینر سے میزبان خدمات سے جڑنے کے لیے استعمال ہوتا ہے۔
docker exec -it nginx-container bash براہ راست کمانڈ لائن تک رسائی کے لیے چل رہے Nginx کنٹینر کے اندر ایک انٹرایکٹو باش شیل کو چلاتا ہے۔
mysql -h $host_ip -u root -p Nginx کنٹینر کے اندر استعمال ہونے والی کمانڈ کو نکالے گئے IP ایڈریس کا استعمال کرتے ہوئے میزبان مشین پر چلنے والے MySQL سرور سے منسلک کرنے کے لیے استعمال کیا جاتا ہے۔
networks: hostnetwork: external: true بیرونی طور پر بنائے گئے ڈوکر نیٹ ورک کو استعمال کرنے کے لیے ڈوکر کمپوز میں کنفیگریشن۔
echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" >echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf میزبان مشین کو MySQL کی درخواستوں کو پراکسی کرنے کے لیے ایک نئی Nginx کنفیگریشن لکھتا ہے۔
nginx -s reload نئی کنفیگریشن تبدیلیاں لاگو کرنے کے لیے Nginx سروس کو دوبارہ لوڈ کرتا ہے۔

ہوسٹ سروسز تک رسائی کے لیے Docker اور Nginx کو ترتیب دینا

ایک Nginx کنٹینر کو میزبان پر چلنے والے MySQL مثال سے منسلک کرنے کے لیے، ہمیں پہلے نیٹ ورک برج قائم کرنے کی ضرورت ہے۔ حکم ایک ہی نیٹ ورک پر کنٹینرز کے درمیان مواصلت کو فعال کرتے ہوئے یہ کسٹم نیٹ ورک بناتا ہے۔ اس کے بعد ہم اس نیٹ ورک پر MySQL اور Nginx کنٹینرز کا استعمال کرتے ہوئے شروع کرتے ہیں۔ اور بالترتیب یہ سیٹ اپ کنٹینرز کو ایک دوسرے کے ساتھ دریافت اور بات چیت کرنے کی اجازت دیتا ہے۔ Nginx سے MySQL سے جڑنے کے لیے، ہمیں میزبان کا IP پتہ درکار ہے، جو اس کے ساتھ حاصل کیا جا سکتا ہے۔ host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). یہ کمانڈ میزبان پر docker0 انٹرفیس کا IP ایڈریس حاصل کرتی ہے۔

اگلا، ہم استعمال کرتے ہیں Nginx کنٹینر میں ایک انٹرایکٹو شیل کھولنے کے لیے۔ یہاں سے، ہم استعمال کرتے ہوئے ایک MySQL کنکشن شروع کر سکتے ہیں۔ ، کہاں میزبان کا IP پتہ ہے۔ متبادل طور پر، Docker Compose کا استعمال YAML فائل میں خدمات اور نیٹ ورکس کی وضاحت کرکے عمل کو آسان بناتا ہے۔ دی networks: hostnetwork: external: true کنفیگریشن اس بات کو یقینی بناتی ہے کہ سروسز بیرونی طور پر بنائے گئے نیٹ ورک کا استعمال کرتی ہیں۔ آخر میں، Nginx کو پراکسی MySQL درخواستوں میں ترتیب دینے کے لیے، ہم اس کی کنفیگریشن فائل کو اس کے ساتھ اپ ڈیٹ کرتے ہیں۔ اور استعمال کرتے ہوئے Nginx کو دوبارہ لوڈ کریں۔ . یہ سیٹ اپ Nginx کو میزبان پر چلنے والے MySQL مثال کے لیے درخواستیں بھیجنے کی اجازت دیتا ہے۔

ڈوکر کنٹینر کو نیٹ ورک برج کے ذریعے MySQL کی میزبانی سے جوڑنا

ڈوکر نیٹ ورک سیٹ اپ کے لیے شیل اسکرپٹ

# Create a Docker network
docker network create --driver bridge hostnetwork

# Run MySQL container with the created network
docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

# Run Nginx container with the created network
docker run --name nginx-container --network hostnetwork -d nginx:latest

# Get the host machine's IP address
host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')

# Connect to MySQL from within the Nginx container
docker exec -it nginx-container bash
mysql -h $host_ip -u root -p

Nginx اور میزبان کے MySQL کو لنک کرنے کے لیے Docker Compose کا استعمال

ڈوکر کمپوز YAML کنفیگریشن

version: '3.8'

services:
  nginx:
    image: nginx:latest
    container_name: nginx-container
    networks:
      - hostnetwork

  mysql:
    image: mysql:latest
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: root
    networks:
      - hostnetwork

networks:
  hostnetwork:
    external: true

ڈوکر نیٹ ورک کا استعمال کرتے ہوئے میزبان MySQL سے جڑنے کے لیے Nginx کو ترتیب دینا

Nginx کنفیگریشن اور ڈوکر نیٹ ورک کمانڈ

# Create a bridge network
docker network create bridge-network

# Run Nginx container with bridge network
docker run --name nginx-container --network bridge-network -d nginx:latest

# Run MySQL container on the host network
docker run --name mysql-container --network host -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

# Update Nginx configuration to point to MySQL host
docker exec -it nginx-container bash
echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf
nginx -s reload

ڈوکر کنٹینرز کو میزبان لوکل سروسز سے جوڑنا

جب ڈوکر کنٹینرز میں ایپلی کیشنز چلا رہے ہوں تو، نیٹ ورک آئسولیشن کی وجہ سے میزبان کے لوکل ہوسٹ کے ساتھ منسلک خدمات تک رسائی مشکل ہو سکتی ہے۔ ایک مؤثر طریقہ ڈاکر کے میزبان نیٹ ورکنگ موڈ کو استعمال کرنا ہے۔ کے ساتھ ایک کنٹینر شروع کرکے آپشن، کنٹینر میزبان کے نیٹ ورک اسٹیک کو شیئر کرتا ہے، جس سے اسے لوکل ہوسٹ سے منسلک خدمات تک براہ راست رسائی حاصل ہوتی ہے۔ تاہم، یہ موڈ کم پورٹیبل ہے اور ہو سکتا ہے کہ تمام ماحول، جیسے Docker Swarm یا Kubernetes میں اچھی طرح کام نہ کرے۔

دوسرا نقطہ نظر یہ ہے کہ ڈوکر کا بلٹ ان DNS حل کرنے والا استعمال کیا جائے، . یہ خاص DNS نام میزبان کے IP ایڈریس کو حل کرتا ہے، کنٹینرز کو میزبان پر خدمات کے ساتھ بات چیت کرنے کے قابل بناتا ہے۔ یہ طریقہ سیدھا ہے اور نیٹ ورک مینجمنٹ کی پیچیدگیوں سے بچتا ہے۔ تاہم، یہ صرف ڈوکر برائے ونڈوز اور میک پر دستیاب ہے، لینکس پر نہیں۔ لینکس کے صارفین کے لیے، ایک حسب ضرورت برج نیٹ ورک بنانا اور روٹنگ کے قوانین کو دستی طور پر ترتیب دینا ایک قابل عمل حل ہے۔ اس میں استعمال کرنا شامل ہے۔ اور کنٹینر نیٹ ورک سے ہوسٹ کے لوکل ہوسٹ انٹرفیس تک ٹریفک کو روٹ کرنے کا حکم دیتا ہے۔

ڈوکر کنٹینرز کو میزبان خدمات سے مربوط کرنے کے بارے میں عام سوالات

  1. میں کس طرح استعمال کروں؟ Docker میں آپشن؟
  2. اپنے کنٹینر کے ساتھ چلائیں۔ میزبان کے نیٹ ورک اسٹیک کو شیئر کرنے کے لیے۔
  3. کیا ?
  4. یہ ایک خاص DNS نام ہے جو میزبان کے IP ایڈریس کو حل کرتا ہے، جو ڈوکر برائے ونڈوز اور میک پر دستیاب ہے۔
  5. کیا میں استعمال کر سکتا ہوں لینکس پر؟
  6. نہیں، یہ خصوصیت Docker for Linux پر دستیاب نہیں ہے۔
  7. میں اپنی مرضی کے مطابق برج نیٹ ورک کیسے بنا سکتا ہوں؟
  8. استعمال کریں۔ اپنی مرضی کے مطابق پل نیٹ ورک بنانے کے لیے۔
  9. کا مقصد کیا ہے کمانڈ؟
  10. یہ لینکس سسٹمز پر نیٹ ورک پیکٹ فلٹرنگ اور روٹنگ کے قوانین کا انتظام کرتا ہے۔
  11. میں ڈوکر کنٹینر سے میزبان پر MySQL مثال سے کیسے جڑ سکتا ہوں؟
  12. استعمال کریں۔ ونڈوز/میک پر ڈوکر کے لیے یا لینکس کے لیے روٹنگ ترتیب دیں۔
  13. استعمال کرنے کی کیا حدود ہیں۔ ?
  14. یہ پورٹیبلٹی کو کم کر سکتا ہے اور یہ کچھ آرکیسٹریٹرز جیسے Kubernetes کے ساتھ مطابقت نہیں رکھتا ہے۔
  15. کیا میں MySQL کے علاوہ میزبان پر دیگر خدمات تک رسائی حاصل کر سکتا ہوں؟
  16. جی ہاں، انہی طریقوں کا استعمال کرتے ہوئے، آپ میزبان پر چلنے والی کسی بھی سروس سے منسلک ہو سکتے ہیں۔

ڈوکر سے میزبان خدمات تک رسائی کے بارے میں حتمی خیالات

Nginx کنٹینر سے میزبان پر MySQL مثال سے منسلک ہونے میں مختلف طریقے شامل ہیں، ہر ایک کے اپنے فوائد اور حدود ہیں۔ میزبان نیٹ ورکنگ، خصوصی DNS ناموں، یا حسب ضرورت نیٹ ورک پلوں کا استعمال مؤثر طریقے سے فرق کو پُر کر سکتا ہے، ڈوکر کنٹینرز اور میزبان خدمات کے درمیان ہموار رابطے کو یقینی بناتا ہے۔ ان حکمت عملیوں کو سمجھ کر اور ان پر عمل درآمد کرکے، آپ نیٹ ورک کی تنہائی کے چیلنجوں پر قابو پا سکتے ہیں اور اپنے ڈاکرائزڈ ماحول میں مضبوط روابط برقرار رکھ سکتے ہیں۔