$lang['tuto'] = "سبق"; ?> ڈوکر اور ورچوئل مشینوں کے درمیان

ڈوکر اور ورچوئل مشینوں کے درمیان فرق کو سمجھنا

ڈوکر اور ورچوئل مشینوں کے درمیان فرق کو سمجھنا
ڈوکر اور ورچوئل مشینوں کے درمیان فرق کو سمجھنا

ڈوکر اور ورچوئل مشینوں کا تعارف

ڈوکر اور ورچوئل مشینیں (VMs) دونوں ایپلی کیشنز کی تعیناتی کے لیے مقبول ٹولز ہیں، لیکن وہ بنیادی طور پر مختلف طریقوں سے کام کرتے ہیں۔ بہت سے ڈویلپرز اپنے آپ کو حیرانی میں مبتلا پاتے ہیں کہ ڈوکر کس طرح ایک مکمل فائل سسٹم، الگ تھلگ نیٹ ورکنگ، اور دیگر فیچرز فراہم کر سکتا ہے بغیر اوور ہیڈ کے عام طور پر VMs کے ساتھ۔

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

کمانڈ تفصیل
FROM ڈوکر کنٹینر بنانے کے لیے استعمال کرنے کے لیے بنیادی تصویر کی وضاحت کرتا ہے۔
WORKDIR ڈوکر کنٹینر کے اندر ورکنگ ڈائرکٹری سیٹ کرتا ہے۔
COPY میزبان مشین سے فائلوں یا ڈائریکٹریوں کو ڈاکر کنٹینر میں کاپی کرتا ہے۔
RUN تعمیر کے عمل کے دوران ڈوکر کنٹینر میں کمانڈ پر عمل درآمد کرتا ہے۔
EXPOSE ڈوکر کو مطلع کرتا ہے کہ کنٹینر رن ٹائم پر مخصوص نیٹ ورک پورٹس پر سنتا ہے۔
CMD ڈوکر کنٹینر کے شروع ہونے پر چلانے کے لیے کمانڈ کی وضاحت کرتا ہے۔
config.vm.box Vagrant ورچوئل مشین کے لیے استعمال کرنے کے لیے بیس باکس کی وضاحت کرتا ہے۔
config.vm.network نیٹ ورک سیٹنگز کو کنفیگر کرتا ہے، جیسے کہ پورٹس کو میزبان سے VM پر فارورڈ کرنا۔
config.vm.provision ورچوئل مشین کی فراہمی کا طریقہ بتاتا ہے، جیسے سیٹ اپ کے دوران شیل اسکرپٹ چلانا۔

Dockerfile اور Vagrantfile کی تلاش

فراہم کردہ مثالوں میں، ہم نے سب سے پہلے یہ ظاہر کیا کہ Node.js ایپلیکیشن کی تعیناتی کے لیے Dockerfile کیسے بنایا جائے۔ ڈاکر فائل بیس امیج کی وضاحت کے ساتھ شروع ہوتی ہے۔ FROM کمانڈ، اس معاملے میں، ایک سرکاری Node.js رن ٹائم کا استعمال کرتے ہوئے. کنٹینر کے اندر ورکنگ ڈائرکٹری سیٹ کرنا کے ساتھ حاصل کیا جاتا ہے۔ WORKDIR کمانڈ، جو اس بات کو یقینی بناتا ہے کہ بعد کے کمانڈز کو مخصوص ڈائرکٹری میں عمل میں لایا جائے۔ دی COPY کمانڈ کا استعمال package.json فائلوں اور ایپلیکیشن کوڈ کو کنٹینر میں منتقل کرنے کے لیے کیا جاتا ہے۔ دی RUN کمانڈ پھر کنٹینر کے اندر ضروری انحصار کو انسٹال کرتا ہے۔ ہم اس پورٹ کو بے نقاب کرتے ہیں جس پر ایپلیکیشن چلتی ہے۔ EXPOSE کمانڈ، اور آخر میں، CMD کمانڈ کنٹینر شروع ہونے پر ایپلیکیشن کو چلانے کے لیے کمانڈ کی وضاحت کرتی ہے۔

Vagrantfile مثال کے لیے، کنفیگریشن کا آغاز بیس باکس کو کے ساتھ کر کے ہوتا ہے۔ config.vm.box کمانڈ، یہاں Ubuntu 20.04 کا استعمال کرتے ہوئے. نیٹ ورک کی ترتیبات کا استعمال کرتے ہوئے ترتیب دی گئی ہیں۔ config.vm.network کمانڈ، جو میزبان پر پورٹ 8080 کو گیسٹ VM پر پورٹ 80 پر بھیجتی ہے، VM پر چلنے والی خدمات تک بیرونی رسائی کی اجازت دیتی ہے۔ دی config.vm.provision کمانڈ کا استعمال شیل اسکرپٹ کو چلانے کے لیے کیا جاتا ہے جو پیکج کی فہرست کو اپ ڈیٹ کرتا ہے اور Apache2 کو انسٹال کرتا ہے، VM کو ضروری سافٹ ویئر کے ساتھ فراہم کرتا ہے۔ یہ کمانڈز VM ماحول قائم کرنے کے بنیادی اقدامات کو ظاہر کرتی ہیں، جو Docker کے فراہم کردہ کنٹینرائزڈ ماحول کے مقابلے میں زیادہ روایتی انداز پیش کرتی ہے۔

Node.js ایپلیکیشن کی تعیناتی کے لیے ایک ڈاکر فائل بنانا

یہ مثال ظاہر کرتی ہے کہ Node.js ایپلیکیشن کے لیے Dockerfile کیسے بنایا جائے، جس میں ایک Docker کنٹینر کے اندر ایپ کو بنانے اور چلانے کے اقدامات کی نمائش کی گئی ہے۔

# Use an official Node.js runtime as a parent image
FROM node:14

# Set the working directory inside the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json to the container
COPY package*.json ./

# Install the application dependencies inside the container
RUN npm install

# Copy the rest of the application code to the container
COPY . .

# Expose the port the app runs on
EXPOSE 8080

# Define the command to run the app
CMD ["node", "app.js"]

ویگرنٹ کا استعمال کرتے ہوئے ایک ورچوئل مشین ترتیب دینا

یہ مثال دکھاتی ہے کہ ایک سادہ Vagrantfile کے ساتھ Vagrant کا استعمال کرتے ہوئے ایک ورچوئل مشین کیسے ترتیب دی جائے، VM ماحول کی وضاحت اور تشکیل کے عمل کو ظاہر کرتی ہے۔

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # Use Ubuntu 20.04 as the base box
  config.vm.box = "ubuntu/focal64"

  # Forward port 8080 on the host to port 80 on the guest
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Provision the VM with a shell script
  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install -y apache2
  SHELL
end

ڈوکر اور ورچوئل مشینوں کو سمجھنا

ڈوکر اور ورچوئل مشینوں (VMs) کے درمیان ایک اہم فرق یہ ہے کہ وہ سسٹم کے وسائل کو کس طرح استعمال کرتے ہیں۔ VMs ایک ہائپر وائزر پر چلتا ہے، جو ہارڈ ویئر کی تقلید کرتا ہے اور ایک سے زیادہ آپریٹنگ سسٹم کو میزبان مشین پر بیک وقت چلانے کی اجازت دیتا ہے۔ اس کے لیے ہر VM کو ایک مکمل گیسٹ آپریٹنگ سسٹم، لائبریریوں کا اپنا سیٹ، اور بائنریز شامل کرنے کی ضرورت ہوتی ہے۔ اس سے نہ صرف سسٹم کے اہم وسائل استعمال ہوتے ہیں بلکہ تعیناتی اور دیکھ بھال کے مجموعی سائز اور پیچیدگی میں بھی اضافہ ہوتا ہے۔

اس کے برعکس، ڈوکر کنٹینرائزیشن ٹیکنالوجی کا فائدہ اٹھاتا ہے، جو ایک سے زیادہ کنٹینرز کو ایک ہی آپریٹنگ سسٹم کے کرنل کو شیئر کرنے کی اجازت دیتا ہے۔ ہر کنٹینر صارف کی جگہ میں الگ تھلگ عمل کے طور پر چلتا ہے۔ اس کا مطلب ہے کہ کنٹینرز VMs کے مقابلے شروع کرنے کے لیے بہت ہلکے اور تیز ہوتے ہیں، کیونکہ انہیں پورے OS کو بوٹ کرنے کی ضرورت نہیں ہوتی ہے۔ ڈوکر ایک پرتوں والے فائل سسٹم کے ذریعے فائل سسٹم کی تنہائی کو حاصل کرتا ہے، جہاں ہر کنٹینر کی اپنی فائل سسٹم کی پرت بیس امیج کے اوپر ہوتی ہے۔ نیٹ ورک کی تنہائی کو نام کی جگہوں کا استعمال کرتے ہوئے سنبھالا جاتا ہے، جس سے Docker کو VMs سے وابستہ اوور ہیڈ کے بغیر ہر کنٹینر کے لیے الگ تھلگ نیٹ ورکنگ ماحول فراہم کرنے کی اجازت ملتی ہے۔

Docker اور ورچوئل مشینوں کے بارے میں اکثر پوچھے گئے سوالات

  1. Docker اور VMs کے درمیان بنیادی فرق کیا ہے؟
  2. ڈوکر میزبان OS کرنل کو شیئر کرنے کے لیے کنٹینرائزیشن کا استعمال کرتا ہے، اسے ہلکا اور تیز تر بناتا ہے، جبکہ VMs کو ایک مکمل مہمان OS اور ایک ہائپر وائزر کی ضرورت ہوتی ہے۔
  3. ڈوکر کنٹینرز کو زیادہ موثر کیوں سمجھا جاتا ہے؟
  4. کنٹینرز میزبان OS کرنل کو شیئر کرتے ہیں اور ان کا اوور ہیڈ کم سے کم ہوتا ہے، جس سے شروع ہونے کے تیز اوقات اور وسائل کے موثر استعمال کی اجازت ہوتی ہے۔
  5. ڈوکر فائل سسٹم کی تنہائی کو کیسے حاصل کرتا ہے؟
  6. ڈوکر ایک پرتوں والا فائل سسٹم استعمال کرتا ہے، جہاں ہر کنٹینر کی اپنی فائل سسٹم کی پرت بیس امیج کے اوپر ہوتی ہے۔
  7. VMs کے تناظر میں ہائپر وائزر کیا ہے؟
  8. ہائپر وائزر ایک ایسا سافٹ ویئر ہے جو ہارڈ ویئر کی تقلید کرتا ہے، جس سے متعدد آپریٹنگ سسٹمز کو ایک ہی میزبان مشین پر بیک وقت چلانے کی اجازت ملتی ہے۔
  9. ڈوکر نیٹ ورکنگ تنہائی کو کیسے ہینڈل کرتا ہے؟
  10. Docker ہر کنٹینر کے لیے الگ تھلگ نیٹ ورکنگ ماحول فراہم کرنے کے لیے نام کی جگہوں کا استعمال کرتا ہے۔
  11. ڈوکر امیج پر سافٹ ویئر کی تعیناتی VM سے آسان کیوں ہے؟
  12. ڈوکر امیجز تمام انحصار اور کنفیگریشنز کو سمیٹتی ہیں، مختلف ماحول میں مستقل مزاجی کو یقینی بناتی ہیں۔
  13. Docker کے استعمال کے کچھ عام معاملات کیا ہیں؟
  14. ڈوکر عام طور پر مائیکرو سروسز فن تعمیر، مسلسل انضمام/مسلسل تعیناتی (CI/CD)، اور الگ تھلگ ترقیاتی ماحول کے لیے استعمال ہوتا ہے۔
  15. کیا ڈوکر کنٹینرز کسی بھی OS پر چل سکتے ہیں؟
  16. ڈوکر کنٹینرز کسی بھی OS پر چل سکتے ہیں جو Docker کو سپورٹ کرتا ہے، لیکن وہ میزبان OS کرنل کا اشتراک کرتے ہیں۔
  17. ڈوکر میں بیس امیج کیا ہے؟
  18. بیس امیج ڈوکر کنٹینرز بنانے کا نقطہ آغاز ہے، جس میں اکثر OS اور بنیادی انحصار شامل ہوتے ہیں۔

ڈوکر بمقابلہ ورچوئل مشینوں کا خلاصہ

ڈوکر اور ورچوئل مشینوں کا موازنہ کرنے میں، بنیادی فرق ان کے وسائل کے استعمال اور تعیناتی کی کارکردگی میں ہے۔ ورچوئل مشینیں ایک مکمل گیسٹ آپریٹنگ سسٹم اور ہائپر وائزر کے ساتھ کام کرتی ہیں، جس سے وسائل کی زیادہ کھپت ہوتی ہے۔ اس کے برعکس، ڈوکر کنٹینرز میزبان OS کرنل کو شیئر کرتے ہیں، جس کے نتیجے میں زیادہ ہلکا پھلکا اور چست حل ہوتا ہے۔ ڈوکر ایک پرتوں والے فائل سسٹم اور نیٹ ورکنگ نام کی جگہوں کے ذریعے الگ تھلگ ماحول حاصل کرتا ہے، جس سے یہ VMs کو متعلقہ اوور ہیڈ کے بغیر اسی طرح کی فعالیت فراہم کرتا ہے۔ یہ ڈوکر امیجز پر سافٹ ویئر کی تعیناتی کو زیادہ موثر، مستقل اور مختلف پروڈکشن ماحول میں منظم کرنے میں آسان بناتا ہے۔

ڈوکر اور ورچوئل مشینوں کے بارے میں حتمی خیالات

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