ڊاڪر ڪمپوز لاءِ هڪ شروعاتي گائيڊ

مضمون جو مصنف، جنهن جو ترجمو اڄ اسان شايع ڪري رهيا آهيون، چوي ٿو ته اهو انهن ڊولپرز لاءِ آهي جيڪي سکڻ چاهين ٿا Docker Compose ۽ Docker استعمال ڪندي پنهنجي پهرين ڪلائنٽ-سرور ايپليڪيشن ٺاهڻ جي طرف وڌي رهيا آهن. اهو فرض ڪيو ويو آهي ته هن مواد جو پڙهندڙ Docker جي بنيادي ڳالهين کان واقف آهي. جيڪڏهن اهو معاملو نه آهي، توهان هڪ نظر وٺي سگهو ٿا هي مواد جو سلسلو جاري هي ڪبرنيٽس بنياديات سان گڏ ڊاڪر بنياديات کي ڍڪيندي پوسٽ، ۽ هي شروعاتي لاء مضمون.

ڊاڪر ڪمپوز لاءِ هڪ شروعاتي گائيڊ

Docker Compose ڇا آهي؟

Docker Compose ھڪڙو اوزار آھي جيڪو Docker سان شامل آھي. اهو ٺهيل آهي منصوبي جي ترتيب سان لاڳاپيل مسئلن کي حل ڪرڻ لاء.

Docker جي بنيادي ڳالھين کي سکڻ دوران، توھان کي شايد سادو ايپليڪيشنن جي ٺاھڻ جو سامھون ٿيو آھي جيڪي خودمختيار طور ڪم ڪن ٿيون ۽ انحصار نه ٿيون ڪن، مثال طور، خارجي ڊيٽا ذريعن تي يا خاص خدمتن تي. عملي طور تي، اهڙيون ايپليڪيشنون نادر آهن. حقيقي منصوبن ۾ عام طور تي گڏ ڪم ڪندڙ ايپليڪيشنن جو هڪ مڪمل سيٽ شامل آهي.

توهان ڪيئن ڄاڻو ٿا ته توهان کي ڊاکر ڪمپوز استعمال ڪرڻ جي ضرورت آهي جڏهن هڪ پروجيڪٽ کي ترتيب ڏيو؟ اهو اصل ۾ تمام سادو آهي. جيڪڏهن توهان هن منصوبي کي ڪم ڪرڻ لاءِ ڪيترن ئي خدمتن کي استعمال ڪندا آهيو، ته پوءِ ڊڪر ڪمپوز ڪم ۾ اچي سگهي ٿو. مثال طور، هڪ صورتحال ۾ جتي اهي هڪ ويب سائيٽ ٺاهي رهيا آهن جيڪي صارفين جي تصديق ڪرڻ لاء ڊيٽابيس سان ڳنڍڻ جي ضرورت آهي. اهڙو منصوبو ٻن خدمتن تي مشتمل ٿي سگھي ٿو - ھڪڙو جيڪو سائيٽ جي آپريشن کي يقيني بڻائي ٿو، ۽ ھڪڙو جيڪو ڊيٽابيس کي برقرار رکڻ لاء ذميوار آھي.

Docker Compose ٽيڪنالاجي، ان کي آسان طريقي سان بيان ڪرڻ لاءِ، توهان کي هڪ حڪم سان ڪيتريون ئي خدمتون شروع ڪرڻ جي اجازت ڏئي ٿي.

Docker ۽ Docker Compose جي وچ ۾ فرق

ڊڪر انفرادي ڪنٽينرز (سروسز) کي منظم ڪرڻ لاءِ استعمال ڪيو ويندو آهي جيڪي ايپليڪيشن ٺاهيندا آهن.

ڊاکر ڪمپوز استعمال ڪيو ويندو آهي هڪ ئي وقت ڪيترن ئي ڪنٽينرز کي منظم ڪرڻ لاءِ جيڪي هڪ ايپليڪيشن ٺاهيندا آهن. هي اوزار Docker وانگر ساڳيون صلاحيتون پيش ڪري ٿو، پر توهان کي وڌيڪ پيچيده ايپليڪيشنن سان ڪم ڪرڻ جي اجازت ڏئي ٿي.

ڊاڪر ڪمپوز لاءِ هڪ شروعاتي گائيڊ
Docker (سنگل ڪنٽينر) ۽ Docker Compose (گهڻن ڪنٽينر)

Docker Compose لاءِ عام استعمال وارو ڪيس

Docker Compose آهي، ساڄي هٿن ۾، هڪ تمام طاقتور اوزار جيڪو توهان کي تمام جلدي ايپليڪيشنن کي ترتيب ڏيڻ جي اجازت ڏئي ٿو پيچيده فن تعمير سان. هاڻي اسان Docker Compose جي عملي استعمال جو هڪ مثال ڏينداسين، جنهن جو تجزيو توهان کي انهن فائدن جو اندازو لڳائڻ جي اجازت ڏيندو جيڪي Docker Compose استعمال ڪرڻ سان توهان کي ملندا.

تصور ڪريو ته توهان ويب پروجيڪٽ جو ڊولپر آهيو. ھن منصوبي ۾ ٻه ويب سائيٽون شامل آھن. پهريون ڪاروباري ماڻهن کي صرف چند ڪلڪن سان آن لائن اسٽور ٺاهڻ جي اجازت ڏئي ٿو. ٻيو مقصد آهي ڪسٽمر سپورٽ. اهي ٻئي سائيٽون ساڳئي ڊيٽابيس سان لهه وچڙ ۾ آهن.

توهان جو پروجيڪٽ وڌيڪ ۽ وڌيڪ مشهور ٿي رهيو آهي، ۽ اهو ظاهر ٿئي ٿو ته سرور جي طاقت جنهن تي اهو هلندو آهي هاڻي ڪافي ناهي. نتيجي طور، توهان سڄي منصوبي کي ٻي مشين ڏانهن منتقل ڪرڻ جو فيصلو ڪيو.

بدقسمتي سان، توهان Docker Compose وانگر ڪجھ استعمال نه ڪيو. تنهن ڪري، توهان کي هڪ وقت ۾ خدمتن کي منتقلي ۽ ٻيهر ترتيب ڏيڻو پوندو، اميد آهي ته توهان پروسيس ۾ ڪجهه به نه وساريندا.

جيڪڏهن توهان Docker Compose استعمال ڪريو ٿا، ته پوءِ توهان جي پروجيڪٽ کي نئين سرور ڏانهن منتقل ڪرڻ هڪ معاملو آهي جيڪو ڪجھ حڪمن کي هلائڻ سان حل ڪري سگهجي ٿو. منصوبي جي منتقلي کي نئين جڳهه تي مڪمل ڪرڻ لاء، توهان کي صرف ڪجهه سيٽنگون ٺاهڻ ۽ نئين سرور تي ڊيٽابيس جي بيڪ اپ ڪاپي اپ لوڊ ڪرڻ جي ضرورت آهي.

ڊڪر ڪمپوز استعمال ڪندي ڪلائنٽ-سرور ايپليڪيشن ٺاهڻ

هاڻي ته توهان کي خبر آهي ته اسان ڇا استعمال ڪرڻ وارا آهيون Docker Compose لاءِ، اهو وقت آهي توهان جي پهرين ڪلائنٽ-سرور ايپليڪيشن ٺاهڻ جو هي اوزار استعمال ڪندي. يعني، اسان Python ۾ هڪ ننڍڙي ويب سائيٽ (سرور) ٺاهڻ جي باري ۾ ڳالهائي رهيا آهيون جيڪا ٽيڪسٽ جي هڪ ٽڪڙي سان فائل آئوٽ ڪري سگهي ٿي. هي فائل سرور کان هڪ پروگرام (ڪلائنٽ) طرفان درخواست ڪئي وئي آهي، پڻ پٿون ۾ لکيل آهي. سرور کان فائل حاصل ڪرڻ کان پوء، پروگرام اسڪرين تي ان ۾ محفوظ ڪيل متن ڏيکاري ٿو.

مهرباني ڪري نوٽ ڪريو ته اسان فرض ڪريون ٿا ته توهان وٽ Docker جي بنيادي سمجھ آهي ۽ توهان وٽ اڳ ۾ ئي Docker پليٽ فارم نصب آهي.

اچو ته منصوبي تي ڪم شروع ڪريون.

▍1. پروجيڪٽ ٺاهڻ

توهان جي پهرين ڪلائنٽ-سرور ايپليڪيشن ٺاهڻ لاءِ، مان مشورو ڏيان ٿو ته توهان شروع ڪريو پروجيڪٽ فولڊر ٺاهي. ان ۾ ھيٺيون فائلون ۽ فولڊر شامل ھجن:

  • فائيل docker-compose.yml. هي هڪ Docker Compose فائل آهي جنهن ۾ خدمتون شروع ڪرڻ ۽ ترتيب ڏيڻ لاءِ گهربل هدايتون شامل هونديون.
  • فولڊر server. اهو سرور کي هلائڻ لاء ضروري فائلن تي مشتمل هوندو.
  • فولڊر client. ڪلائنٽ ايپليڪيشن فائلون هتي موجود هونديون.

نتيجي طور، توھان جي پروجيڪٽ جي مکيه فولڊر جو مواد ھن طرح ڏسڻ گھرجي:

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

▍2. سرور ٺاهڻ

هتي، سرور ٺاهڻ جي عمل ۾، اسان Docker جي حوالي سان ڪجهه بنيادي شين تي رابطو ڪنداسين.

2a. فائلون ٺاهڻ

فولڊر ڏانھن وو server ۽ ان ۾ ھيٺيون فائلون ٺاھيو:

  • فائيل server.py. اهو سرور ڪوڊ تي مشتمل هوندو.
  • فائيل index.html. ھن فائل ۾ متن جو ھڪڙو ٽڪرو ھوندو جيڪو ڪلائنٽ ايپليڪيشن کي ٻاھر ڪڍڻ گھرجي.
  • فائيل Dockerfile. هي هڪ Docker فائل آهي جنهن ۾ سرور ماحول ٺاهڻ لاءِ گهربل هدايتون شامل هونديون.

اھو اھو آھي جيڪو توھان جي فولڊر جو مواد ڏسڻ گھرجي server/:

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

2b. Python فائل کي تبديل ڪندي.

فائل ۾ شامل ڪريو 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 کي تبديل ڪندي

هاڻي اسان هڪ سادي فائل ٺاهينداسين Dockerfile، جيڪو Python سرور لاءِ رن ٽائم ماحول کي ترتيب ڏيڻ جو ذميوار هوندو. جيئن ٺهيل تصوير جي بنياد تي، اسان استعمال ڪنداسين سرڪاري انداز ۾Python ۾ لکيل پروگرامن کي هلائڻ لاءِ ٺهيل. هتي Dockerfile جو مواد آهي:

# На всякий случай напоминаю, что 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 کي تبديل ڪندي

جيئن سرور جي صورت ۾، اسان هڪ سادي ٺاهي 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 جي بنيادي ڄاڻ ڏيندو.

هتي فائل ۾ رکڻ لاء ڪوڊ آهي 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 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

نتيجو

اسان ڊاکر ڪمپوز ٽيڪنالاجي سان ڪم ڪرڻ جي بنيادي ڳالهين تي غور ڪيو آهي، جنهن جي ڄاڻ توهان کي هن ٽيڪنالاجي کي استعمال ڪرڻ جي اجازت ڏيندو ۽، جيڪڏهن گهربل هجي، ان کي وڌيڪ کوٽائي ۾ مطالعو ڪرڻ شروع ڪيو. هتي پروجيڪٽ لاءِ ڪوڊ سان گڏ هڪ مخزن جنهن کي اسان هتي ڏٺو.

پيارا پڙهندڙن! ڇا توھان پنھنجي منصوبن ۾ Docker Compose استعمال ڪندا آھيو؟

ڊاڪر ڪمپوز لاءِ هڪ شروعاتي گائيڊ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو