ڈوکر کمپوز کے لیے ایک ابتدائی رہنما

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

ڈوکر کمپوز کے لیے ایک ابتدائی رہنما

ڈوکر کمپوز کیا ہے؟

ڈوکر کمپوز ایک ٹول ہے جو ڈوکر کے ساتھ شامل ہے۔ یہ پروجیکٹ کی تعیناتی سے متعلق مسائل کو حل کرنے کے لیے ڈیزائن کیا گیا ہے۔

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

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

ڈوکر کمپوز ٹیکنالوجی، اسے آسان طریقے سے بیان کرنے کے لیے، آپ کو ایک کمانڈ کے ساتھ بہت سی خدمات شروع کرنے کی اجازت دیتی ہے۔

ڈوکر اور ڈوکر کمپوز کے درمیان فرق

ڈوکر کا استعمال انفرادی کنٹینرز (سروسز) کو منظم کرنے کے لیے کیا جاتا ہے جو ایک درخواست بناتے ہیں۔

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

ڈوکر کمپوز کے لیے ایک ابتدائی رہنما
ڈوکر (سنگل کنٹینر) اور ڈوکر کمپوز (متعدد کنٹینرز)

ڈوکر کمپوز کے لیے عام استعمال کا کیس

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

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

آپ کا پروجیکٹ زیادہ سے زیادہ مقبول ہوتا جا رہا ہے، اور یہ پتہ چلتا ہے کہ جس سرور پر یہ چلتا ہے اس کی طاقت اب کافی نہیں ہے۔ نتیجے کے طور پر، آپ پورے پروجیکٹ کو دوسری مشین میں منتقل کرنے کا فیصلہ کرتے ہیں۔

بدقسمتی سے، آپ نے Docker Compose جیسی کوئی چیز استعمال نہیں کی۔ لہذا، آپ کو ایک وقت میں خدمات کی منتقلی اور دوبارہ ترتیب دینا ہوگی، امید ہے کہ آپ اس عمل میں کچھ نہیں بھولیں گے۔

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

ڈوکر کمپوز کا استعمال کرتے ہوئے کلائنٹ سرور ایپلیکیشن تیار کرنا

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

براہ کرم نوٹ کریں کہ ہم فرض کرتے ہیں کہ آپ کو Docker کی بنیادی سمجھ ہے اور یہ کہ آپ کے پاس پہلے سے ہی Docker پلیٹ فارم انسٹال ہے۔

آئیے پروجیکٹ پر کام شروع کریں۔

▍1۔ ایک پروجیکٹ بنانا

اپنی پہلی کلائنٹ سرور ایپلیکیشن بنانے کے لیے، میں تجویز کرتا ہوں کہ آپ پروجیکٹ فولڈر بنا کر شروع کریں۔ اس میں درج ذیل فائلوں اور فولڈرز پر مشتمل ہونا چاہئے:

  • فائل docker-compose.yml. یہ ایک ڈوکر کمپوز فائل ہے جس میں خدمات کو شروع کرنے اور ترتیب دینے کے لیے درکار ہدایات شامل ہوں گی۔
  • فولڈر server. اس میں سرور کو چلانے کے لیے ضروری فائلیں ہوں گی۔
  • فولڈر client. کلائنٹ کی درخواست کی فائلیں یہاں موجود ہوں گی۔

نتیجے کے طور پر، آپ کے پروجیکٹ کے مرکزی فولڈر کے مواد کو اس طرح نظر آنا چاہئے:

.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file

▍2۔ سرور بنانا

یہاں، سرور بنانے کے عمل میں، ہم Docker کے حوالے سے کچھ بنیادی چیزوں کو چھوئیں گے۔

2a فائلیں بنانا

فولڈر پر جائیں۔ server اور اس میں درج ذیل فائلیں بنائیں:

  • فائل server.py. اس میں سرور کوڈ ہوگا۔
  • فائل index.html. اس فائل میں متن کا ایک ٹکڑا ہوگا جسے کلائنٹ ایپلیکیشن کو آؤٹ پٹ کرنا چاہئے۔
  • فائل Dockerfile. یہ ایک ڈوکر فائل ہے جس میں سرور کا ماحول بنانے کے لیے درکار ہدایات شامل ہوں گی۔

آپ کے فولڈر کے مواد کی طرح نظر آنی چاہیے۔ server/:

.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files

2b. ازگر فائل میں ترمیم کرنا۔

فائل میں شامل کریں۔ server.py درج ذیل کوڈ:

#!/usr/bin/env python3

# Импорт системных библиотек python.
# Эти библиотеки будут использоваться для создания веб-сервера.
# Вам не нужно устанавливать что-то особенное, эти библиотеки устанавливаются вместе с Python.

import http.server
import socketserver

# Эта переменная нужна для обработки запросов клиента к серверу.

handler = http.server.SimpleHTTPRequestHandler

# Тут мы указываем, что сервер мы хотим запустить на порте 1234. 
# Постарайтесь запомнить эти сведения, так как они нам очень пригодятся в дальнейшем, при работе с docker-compose.

with socketserver.TCPServer(("", 1234), handler) as httpd:

    # Благодаря этой команде сервер будет выполняться постоянно, ожидая запросов от клиента.

   httpd.serve_forever()

یہ کوڈ آپ کو ایک سادہ ویب سرور بنانے کی اجازت دیتا ہے۔ وہ کلائنٹس کو فائل دے گا۔ index.html، جس کا مواد بعد میں ویب صفحہ پر دکھایا جائے گا۔

2c HTML فائل میں ترمیم کرنا

فائل کرنا index.html درج ذیل متن شامل کریں:

Docker-Compose is magic!

یہ متن کلائنٹ کو بھیجا جائے گا۔

2 ڈی ڈاکر فائل میں ترمیم کرنا

اب ہم ایک سادہ فائل بنائیں گے۔ Dockerfileجو Python سرور کے لیے رن ٹائم ماحول کو منظم کرنے کے لیے ذمہ دار ہو گا۔ بنائی گئی تصویر کی بنیاد کے طور پر، ہم استعمال کریں گے۔ ایک سرکاری انداز میں, Python میں لکھے گئے پروگراموں کو چلانے کے لیے ڈیزائن کیا گیا ہے۔ ڈاکر فائل کا مواد یہ ہے:

# На всякий случай напоминаю, что Dockerfile всегда должен начинаться с импорта базового образа.
# Для этого используется ключевое слово 'FROM'.
# Здесь нам нужно импортировать образ python (с DockerHub).
# В результате мы, в качестве имени образа, указываем 'python', а в качестве версии - 'latest'.

FROM python:latest

# Для того чтобы запустить в контейнере код, написанный на Python, нам нужно импортировать файлы 'server.py' и 'index.html'.
# Для того чтобы это сделать, мы используем ключевое слово 'ADD'.
# Первый параметр, 'server.py', представляет собой имя файла, хранящегося на компьютере.
# Второй параметр, '/server/', это путь, по которому нужно разместить указанный файл в образе.
# Здесь мы помещаем файл в папку образа '/server/'.

ADD server.py /server/
ADD index.html /server/

# Здесь мы воспользуемся командой 'WORKDIR', возможно, новой для вас.
# Она позволяет изменить рабочую директорию образа.
# В качестве такой директории, в которой будут выполняться все команды, мы устанавливаем '/server/'.

WORKDIR /server/

اب کلائنٹ پر کام شروع کرتے ہیں۔

▍3۔ کلائنٹ بنانا

اپنے پروجیکٹ کا کلائنٹ سائیڈ بناتے وقت، ہم راستے میں کچھ Docker کی بنیادی باتیں یاد رکھیں گے۔

3a فائلیں بنانا

اپنے پروجیکٹ فولڈر میں جائیں۔ client اور اس میں درج ذیل فائلیں بنائیں:

  • فائل client.py. کلائنٹ کوڈ یہاں موجود ہوگا۔
  • فائل Dockerfile. یہ فائل سرور فولڈر میں ایک جیسی فائل کے طور پر ایک ہی کردار ادا کرتی ہے۔ یعنی، اس میں ہدایات ہیں جو بیان کرتی ہیں کہ کلائنٹ کوڈ پر عمل کرنے کے لیے ماحول کیسے بنایا جائے۔

نتیجے کے طور پر، آپ کا فولڈر client/ کام کے اس مرحلے پر یہ اس طرح نظر آنا چاہئے:

.
├── client.py
└── Dockerfile
0 directories, 2 files

3b. ازگر کی فائل میں ترمیم کرنا

فائل میں شامل کریں۔ client.py درج ذیل کوڈ:

#!/usr/bin/env python3

# Импортируем системную библиотеку Python.
# Она используется для загрузки файла 'index.html' с сервера.
# Ничего особенного устанавливать не нужно, эта библиотека устанавливается вместе с Python.

import urllib.request

# Эта переменная содержит запрос к 'http://localhost:1234/'.
# Возможно, сейчас вы задаётесь вопросом о том, что такое 'http://localhost:1234'.
# localhost указывает на то, что программа работает с локальным сервером.
# 1234 - это номер порта, который вам предлагалось запомнить при настройке серверного кода.

fp = urllib.request.urlopen("http://localhost:1234/")

# 'encodedContent' соответствует закодированному ответу сервера ('index.html').
# 'decodedContent' соответствует раскодированному ответу сервера (тут будет то, что мы хотим вывести на экран).

encodedContent = fp.read()
decodedContent = encodedContent.decode("utf8")

# Выводим содержимое файла, полученного с сервера ('index.html').

print(decodedContent)

# Закрываем соединение с сервером.

fp.close()

اس کوڈ کی مدد سے کلائنٹ ایپلیکیشن سرور سے ڈیٹا ڈاؤن لوڈ کر کے اسے سکرین پر ڈسپلے کر سکتی ہے۔

3c ڈاکر فائل میں ترمیم کرنا

جیسا کہ سرور کے معاملے میں، ہم ایک سادہ بناتے ہیں۔ Dockerfile, وہ ماحول بنانے کے لیے ذمہ دار ہے جس میں Python کلائنٹ ایپلیکیشن چلے گی۔ یہاں کلائنٹ کوڈ ہے Dockerfile:

# То же самое, что и в серверном Dockerfile.

FROM python:latest

# Импортируем 'client.py' в папку '/client/'.

ADD client.py /client/

# Устанавливаем в качестве рабочей директории '/client/'.

WORKDIR /client/

▍4۔ ڈوکر کمپوز

جیسا کہ آپ نے دیکھا ہوگا، ہم نے دو مختلف پروجیکٹ بنائے ہیں: ایک سرور اور ایک کلائنٹ۔ ان میں سے ہر ایک کی اپنی فائل ہے۔ Dockerfile. اب تک، جو کچھ بھی ہوا ہے وہ ڈوکر کے ساتھ کام کرنے کی بنیادی باتوں سے آگے نہیں نکلا ہے۔ اب ہم ڈوکر کمپوز کے ساتھ شروع کرتے ہیں۔ ایسا کرنے کے لیے، آئیے فائل پر جائیں۔ docker-compose.yml، پروجیکٹ روٹ فولڈر میں واقع ہے۔

براہ کرم نوٹ کریں کہ یہاں ہم ان تمام کمانڈز کا احاطہ کرنے کی کوشش نہیں کر رہے ہیں جن میں استعمال کیا جا سکتا ہے۔ docker-compose.yml. ہمارا بنیادی مقصد ایک عملی مثال کے ذریعے چلنا ہے جو آپ کو ڈوکر کمپوز کا بنیادی علم فراہم کرے گی۔

فائل میں ڈالنے کا کوڈ یہ ہے۔ docker-compose.yml:

# Файл docker-compose должен начинаться с тега версии.
# Мы используем "3" так как это - самая свежая версия на момент написания этого кода.

version: "3"

# Следует учитывать, что docker-composes работает с сервисами.
# 1 сервис = 1 контейнер.
# Сервисом может быть клиент, сервер, сервер баз данных...
# Раздел, в котором будут описаны сервисы, начинается с 'services'.

services:

  # Как уже было сказано, мы собираемся создать клиентское и серверное приложения.
  # Это означает, что нам нужно два сервиса.
  # Первый сервис (контейнер): сервер.
  # Назвать его можно так, как нужно разработчику.
  # Понятное название сервиса помогает определить его роль.
  # Здесь мы, для именования соответствующего сервиса, используем ключевое слово 'server'.

  server:
 
    # Ключевое слово "build" позволяет задать
    # путь к файлу Dockerfile, который нужно использовать для создания образа,
    # который позволит запустить сервис.
    # Здесь 'server/' соответствует пути к папке сервера,
    # которая содержит соответствующий Dockerfile.

    build: server/

    # Команда, которую нужно запустить после создания образа.
    # Следующая команда означает запуск "python ./server.py".

    command: python ./server.py

    # Вспомните о том, что в качестве порта в 'server/server.py' указан порт 1234.
    # Если мы хотим обратиться к серверу с нашего компьютера (находясь за пределами контейнера),
    # мы должны организовать перенаправление этого порта на порт компьютера.
    # Сделать это нам поможет ключевое слово 'ports'.
    # При его использовании применяется следующая конструкция: [порт компьютера]:[порт контейнера]
    # В нашем случае нужно использовать порт компьютера 1234 и организовать его связь с портом
    # 1234 контейнера (так как именно на этот порт сервер 
    # ожидает поступления запросов).

    ports:
      - 1234:1234

  # Второй сервис (контейнер): клиент.
  # Этот сервис назван 'client'.

  client:
    # Здесь 'client/ соответствует пути к папке, которая содержит
    # файл Dockerfile для клиентской части системы.

    build: client/

    # Команда, которую нужно запустить после создания образа.
    # Следующая команда означает запуск "python ./client.py".
 
    command: python ./client.py

    # Ключевое слово 'network_mode' используется для описания типа сети.
    # Тут мы указываем то, что контейнер может обращаться к 'localhost' компьютера.

    network_mode: host

    # Ключевое слово 'depends_on' позволяет указывать, должен ли сервис,
    # прежде чем запуститься, ждать, когда будут готовы к работе другие сервисы.
    # Нам нужно, чтобы сервис 'client' дождался бы готовности к работе сервиса 'server'.
 
    depends_on:
      - server

▍5۔ منصوبے کی تعمیر

میں کے بعد docker-compose.yml تمام ضروری ہدایات درج کی گئی ہیں، منصوبے کو جمع کرنے کی ضرورت ہے. ہمارے کام کا یہ مرحلہ کمانڈ کے استعمال کے مترادف ہے۔ docker build، لیکن متعلقہ کمانڈ کئی خدمات سے متعلق ہے:

$ docker-compose build

▍6۔ منصوبے کا آغاز

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

$ docker-compose up

اس کمانڈ پر عمل کرنے کے بعد، کلائنٹ کی طرف سے سرور سے ڈاؤن لوڈ کردہ متن ٹرمینل میں ظاہر ہونا چاہیے: Docker-Compose is magic!.

جیسا کہ پہلے ہی ذکر کیا گیا ہے، سرور کمپیوٹر پورٹ استعمال کرتا ہے۔ 1234 کلائنٹ کی درخواستوں کی خدمت کے لیے۔ لہذا، اگر آپ اپنے براؤزر میں ایڈریس پر جاتے ہیں http://localhost:1234/، یہ متن کے ساتھ ایک صفحہ دکھائے گا۔ Docker-Compose is magic!.

مفید احکام

آئیے کچھ کمانڈز کو دیکھتے ہیں جو آپ کو Docker Compose کے ساتھ کام کرتے وقت کارآمد ثابت ہو سکتی ہیں۔

یہ کمانڈ آپ کو کمانڈ کے ذریعہ بنائے گئے کنٹینرز اور دیگر وسائل کو روکنے اور حذف کرنے کی اجازت دیتی ہے۔ docker-compose up:

$ docker-compose down

یہ کمانڈ سروس لاگز پرنٹ کرتی ہے:

$ docker-compose logs -f [service name]

مثال کے طور پر، ہمارے پروجیکٹ میں اسے اس شکل میں استعمال کیا جا سکتا ہے: $ docker-compose logs -f [service name].

اس کمانڈ کا استعمال کرتے ہوئے آپ کنٹینرز کی فہرست دکھا سکتے ہیں:

$ docker-compose ps

یہ کمانڈ آپ کو چلنے والے کنٹینر میں کمانڈ پر عمل کرنے کی اجازت دیتی ہے۔

$ docker-compose exec [service name] [command]

مثال کے طور پر، یہ اس طرح نظر آسکتا ہے: docker-compose exec server ls.

یہ کمانڈ آپ کو تصاویر کی فہرست ظاہر کرنے کی اجازت دیتا ہے:

$ docker-compose images

کے نتائج

ہم نے ڈوکر کمپوز ٹیکنالوجی کے ساتھ کام کرنے کی بنیادی باتوں کو دیکھا ہے، جس کا علم آپ کو اس ٹیکنالوجی کو استعمال کرنے کی اجازت دے گا اور اگر چاہیں تو اس کا مزید گہرائی سے مطالعہ کرنا شروع کر دیں۔ یہاں پروجیکٹ کے کوڈ کے ساتھ ایک ذخیرہ جو ہم نے یہاں دیکھا۔

پیارے قارئین! کیا آپ اپنے پروجیکٹس میں ڈوکر کمپوز استعمال کرتے ہیں؟

ڈوکر کمپوز کے لیے ایک ابتدائی رہنما

ماخذ: www.habr.com

نیا تبصرہ شامل کریں