د ډاکر کمپوز لپاره د پیل کونکي لارښود

د مقالې لیکوال ، هغه ژباړه چې موږ یې نن خپروو ، وايي چې دا د هغو پراختیا کونکو لپاره دی چې غواړي د ډاکر کمپوز زده کړي او د ډاکر په کارولو سره د دوی د لومړي پیرودونکي - سرور غوښتنلیک رامینځته کولو په لور حرکت کوي. داسې انګیرل کیږي چې د دې موادو لوستونکی د ډاکر اساساتو سره آشنا دی. که دا قضیه نه وي، تاسو کولی شئ یو نظر وګورئ دا د موادو لړۍ دا د کوبرنیټس اساساتو سره د ډاکر اساساتو پوښښ پوسټ ، او دا د پیل کونکو لپاره مقاله.

د ډاکر کمپوز لپاره د پیل کونکي لارښود

د ډاکر کمپوز څه شی دی؟

د ډاکر کمپوز یوه وسیله ده چې د ډاکر سره شامله ده. دا د پروژې پلي کولو پورې اړوند ستونزو حل کولو لپاره ډیزاین شوی.

د ډاکر اساساتو زده کولو پرمهال ، تاسو ممکن د ساده غوښتنلیکونو رامینځته کولو سره مخ شوي یاست چې په خپلواکه توګه کار کوي او تکیه نه کوي ، د مثال په توګه ، د بهرني ډیټا سرچینو یا ځینې خدماتو باندې. په عمل کې، دا ډول غوښتنلیکونه نادر دي. ریښتیني پروژې معمولا د غوښتنلیکونو بشپړ سیټ په ګډه کار کوي.

تاسو څنګه پوهیږئ که تاسو د پروژې پلي کولو پرمهال د ډاکر کمپوز کارولو ته اړتیا لرئ؟ دا واقعیا خورا ساده ده. که تاسو د دې پروژې کار کولو لپاره ډیری خدمات وکاروئ ، نو د ډاکر کمپوز ممکن په کار وي. د مثال په توګه، په داسې حالت کې چې دوی یو ویب پاڼه جوړوي چې د کاروونکو تصدیق کولو لپاره د ډیټابیس سره نښلولو ته اړتیا لري. دا ډول پروژه کیدای شي دوه خدمتونه ولري - یو هغه چې د سایټ عملیات تضمینوي، او هغه چې د ډیټابیس ساتلو مسولیت لري.

د ډاکر کمپوز ټیکنالوژي ، د دې لپاره په ساده ډول تشریح کولو لپاره ، تاسو ته اجازه درکوي د یوې کمانډ سره ډیری خدمات پیل کړئ.

د ډاکر او ډاکر کمپوز ترمنځ توپیر

ډاکر د انفرادي کانټینرونو (خدمتونو) اداره کولو لپاره کارول کیږي چې غوښتنلیک رامینځته کوي.

د ډاکر کمپوز په ورته وخت کې د ډیری کانټینرونو اداره کولو لپاره کارول کیږي چې غوښتنلیک رامینځته کوي. دا وسیله د ډاکر په څیر ورته وړتیاوې وړاندې کوي، مګر تاسو ته اجازه درکوي د ډیرو پیچلو غوښتنلیکونو سره کار وکړئ.

د ډاکر کمپوز لپاره د پیل کونکي لارښود
ډاکر (واحد کانتینر) او ډاکر کمپوز (څو کانټینرونه)

د ډاکر کمپوز لپاره د عادي کارونې قضیه

د ډاکر کمپوز په ښي لاسونو کې یو خورا پیاوړی وسیله ده چې تاسو ته اجازه درکوي په چټکۍ سره د پیچلي جوړښتونو سره غوښتنلیکونه ځای په ځای کړئ. اوس به موږ د ډاکر کمپوز د عملي کارونې مثال وګورو ، د کوم تحلیل به تاسو ته اجازه درکړي د هغه ګټو ارزونه وکړئ چې د ډاکر کمپوز کارول به تاسو ته درکړي.

تصور وکړئ چې تاسو د ویب پروژې پراختیا کونکی یاست. پدې پروژه کې دوه ویب پاڼې شاملې دي. لومړی د سوداګرۍ خلکو ته اجازه ورکوي چې یوازې د څو کلیکونو سره آنلاین پلورنځي رامینځته کړي. دوهم هدف د پیرودونکي ملاتړ دی. دا دوه سایټونه د ورته ډیټابیس سره اړیکه لري.

ستاسو پروژه ورځ تر بلې مشهور کیږي، او دا معلومه شوه چې د سرور ځواک چې دا پرمخ ځي نور کافي ندي. د پایلې په توګه، تاسو پریکړه وکړئ چې ټوله پروژه بل ماشین ته انتقال کړئ.

له بده مرغه، تاسو د ډاکر کمپوز په څیر یو څه نه دي کارولي. له همدې امله ، تاسو باید په یو وخت کې یوځل خدمات لیږد او تنظیم کړئ ، پدې هیله چې تاسو به په پروسه کې هیڅ شی هیر نکړئ.

که تاسو د ډاکر کمپوز کاروئ ، نو بیا ستاسو پروژه نوي سرور ته لیږدول یوه مسله ده چې د څو کمانډونو په چلولو سره حل کیدی شي. نوي ځای ته د پروژې لیږد بشپړولو لپاره ، تاسو اړتیا لرئ یوازې ځینې تنظیمات وکړئ او نوي سرور ته د ډیټابیس بیک اپ کاپي اپلوډ کړئ.

د ډاکر کمپوز په کارولو سره د پیرودونکي - سرور غوښتنلیک رامینځته کول

اوس چې تاسو پوهیږئ چې موږ د څه لپاره د ډاکر کمپوز وکاروو ، دا وخت دی چې د دې وسیلې په کارولو سره ستاسو لومړی پیرودونکي - سرور غوښتنلیک رامینځته کړئ. د مثال په توګه، موږ په Python کې د یوې کوچنۍ ویب پاڼې (سرور) د جوړولو په اړه خبرې کوو چې کولی شي د متن د یوې برخې سره فایل تولید کړي. دا فایل د سرور څخه د یو پروګرام (پیرودونکي) لخوا غوښتل شوی، چې په Python کې هم لیکل شوی. د سرور څخه د فایل ترلاسه کولو وروسته ، برنامه په سکرین کې ذخیره شوي متن ښیې.

مهرباني وکړئ په یاد ولرئ چې موږ فرض کوو چې تاسو د ډاکر لومړني پوهه لرئ او دا چې تاسو دمخه د ډاکر پلیټ فارم نصب کړی.

راځئ چې په پروژه کار پیل کړو.

▍1. د پروژې جوړول

ستاسو د لومړي پیرودونکي / سرور غوښتنلیک رامینځته کولو لپاره ، زه وړاندیز کوم چې تاسو د پروژې فولډر رامینځته کولو سره پیل کړئ. دا باید لاندې فایلونه او فولډرې ولري:

  • د دوتنې docker-compose.yml. دا د ډاکر کمپوز فایل دی چې د خدماتو پیل او تنظیم کولو لپاره به اړین لارښوونې ولري.
  • پوښۍ server. دا به د سرور چلولو لپاره اړین فایلونه ولري.
  • پوښۍ client. د پیرودونکي غوښتنلیک فایلونه به دلته موقعیت ولري.

د پایلې په توګه، ستاسو د پروژې اصلي فولډر مینځپانګې باید داسې ښکاري:

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

▍2. د سرور جوړول

دلته ، د سرور رامینځته کولو په پروسه کې ، موږ به د ډاکر په اړه ځینې لومړني شیانو ته لاس ورکړو.

2a. د فایلونو جوړول

فولډر ته لاړشئ server او په دې کې لاندې فایلونه جوړ کړئ:

  • د دوتنې server.py. دا به د سرور کوډ ولري.
  • د دوتنې index.html. دا فایل به د متن یوه ټوټه ولري چې د پیرودونکي غوښتنلیک باید تولید کړي.
  • د دوتنې Dockerfile. دا د ډاکر فایل دی چې د سرور چاپیریال رامینځته کولو لپاره اړین لارښوونې لري.

دا هغه څه دي چې ستاسو د فولډر مینځپانګه باید ورته ښکاري server/:

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

2 ب. د 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!

دا متن به پیرودونکي ته واستول شي.

2d. د ډاکر فایل ترمیم کول

اوس موږ یو ساده فایل جوړوو 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. د پیرودونکي جوړول

زموږ د پروژې د پیرودونکي اړخ رامینځته کولو پرمهال ، موږ به د لارې په اوږدو کې ځینې ډاکر اساسات په یاد ولرو.

3a. د فایلونو جوړول

خپل د پروژې فولډر ته لاړ شئ client او په دې کې لاندې فایلونه جوړ کړئ:

  • د دوتنې client.py. د پیرودونکي کوډ به دلته موقعیت ولري.
  • د دوتنې Dockerfile. دا فایل د سرور فولډر کې د ورته فایل په څیر ورته رول لوبوي. د مثال په توګه، دا لارښوونې لري چې تشریح کوي چې څنګه د پیرودونکي کوډ اجرا کولو لپاره چاپیریال رامینځته کړي.

د پایلې په توګه، ستاسو فولډر client/ د کار په دې مرحله کې باید داسې ښکاري:

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

3ب. د Python فایل ترمیم کول

فایل ته اضافه کړئ 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 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

Add a comment