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

ڈوکر میں 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 مثال سے منسلک کرنے کے لیے، ہمیں پہلے نیٹ ورک برج قائم کرنے کی ضرورت ہے۔ حکم docker network create --driver bridge hostnetwork ایک ہی نیٹ ورک پر کنٹینرز کے درمیان مواصلت کو فعال کرتے ہوئے یہ کسٹم نیٹ ورک بناتا ہے۔ اس کے بعد ہم اس نیٹ ورک پر MySQL اور Nginx کنٹینرز کا استعمال کرتے ہوئے شروع کرتے ہیں۔ docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest اور docker run --name nginx-container --network hostnetwork -d nginx:latestبالترتیب یہ سیٹ اپ کنٹینرز کو ایک دوسرے کے ساتھ دریافت اور بات چیت کرنے کی اجازت دیتا ہے۔ Nginx سے MySQL سے جڑنے کے لیے، ہمیں میزبان کا IP پتہ درکار ہے، جو اس کے ساتھ حاصل کیا جا سکتا ہے۔ host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). یہ کمانڈ میزبان پر docker0 انٹرفیس کا IP ایڈریس حاصل کرتی ہے۔

اگلا، ہم استعمال کرتے ہیں docker exec -it nginx-container bash Nginx کنٹینر میں ایک انٹرایکٹو شیل کھولنے کے لیے۔ یہاں سے، ہم استعمال کرتے ہوئے ایک MySQL کنکشن شروع کر سکتے ہیں۔ mysql -h $host_ip -u root -p، کہاں $host_ip میزبان کا IP پتہ ہے۔ متبادل طور پر، Docker Compose کا استعمال YAML فائل میں خدمات اور نیٹ ورکس کی وضاحت کرکے عمل کو آسان بناتا ہے۔ دی networks: hostnetwork: external: true کنفیگریشن اس بات کو یقینی بناتی ہے کہ سروسز بیرونی طور پر بنائے گئے نیٹ ورک کا استعمال کرتی ہیں۔ آخر میں، Nginx کو پراکسی MySQL درخواستوں میں ترتیب دینے کے لیے، ہم اس کی کنفیگریشن فائل کو اس کے ساتھ اپ ڈیٹ کرتے ہیں۔ echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf اور استعمال کرتے ہوئے Nginx کو دوبارہ لوڈ کریں۔ nginx -s reload. یہ سیٹ اپ 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

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

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

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

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

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

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

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