د مقالې لیکوال ، هغه ژباړه چې موږ یې نن خپروو ، وايي چې دا د هغو پراختیا کونکو لپاره دی چې غواړي د ډاکر کمپوز زده کړي او د ډاکر په کارولو سره د دوی د لومړي پیرودونکي - سرور غوښتنلیک رامینځته کولو په لور حرکت کوي. داسې انګیرل کیږي چې د دې موادو لوستونکی د ډاکر اساساتو سره آشنا دی. که دا قضیه نه وي، تاسو کولی شئ یو نظر وګورئ
د ډاکر کمپوز څه شی دی؟
د ډاکر کمپوز یوه وسیله ده چې د ډاکر سره شامله ده. دا د پروژې پلي کولو پورې اړوند ستونزو حل کولو لپاره ډیزاین شوی.
د ډاکر اساساتو زده کولو پرمهال ، تاسو ممکن د ساده غوښتنلیکونو رامینځته کولو سره مخ شوي یاست چې په خپلواکه توګه کار کوي او تکیه نه کوي ، د مثال په توګه ، د بهرني ډیټا سرچینو یا ځینې خدماتو باندې. په عمل کې، دا ډول غوښتنلیکونه نادر دي. ریښتیني پروژې معمولا د غوښتنلیکونو بشپړ سیټ په ګډه کار کوي.
تاسو څنګه پوهیږئ که تاسو د پروژې پلي کولو پرمهال د ډاکر کمپوز کارولو ته اړتیا لرئ؟ دا واقعیا خورا ساده ده. که تاسو د دې پروژې کار کولو لپاره ډیری خدمات وکاروئ ، نو د ډاکر کمپوز ممکن په کار وي. د مثال په توګه، په داسې حالت کې چې دوی یو ویب پاڼه جوړوي چې د کاروونکو تصدیق کولو لپاره د ډیټابیس سره نښلولو ته اړتیا لري. دا ډول پروژه کیدای شي دوه خدمتونه ولري - یو هغه چې د سایټ عملیات تضمینوي، او هغه چې د ډیټابیس ساتلو مسولیت لري.
د ډاکر کمپوز ټیکنالوژي ، د دې لپاره په ساده ډول تشریح کولو لپاره ، تاسو ته اجازه درکوي د یوې کمانډ سره ډیری خدمات پیل کړئ.
د ډاکر او ډاکر کمپوز ترمنځ توپیر
ډاکر د انفرادي کانټینرونو (خدمتونو) اداره کولو لپاره کارول کیږي چې غوښتنلیک رامینځته کوي.
د ډاکر کمپوز په ورته وخت کې د ډیری کانټینرونو اداره کولو لپاره کارول کیږي چې غوښتنلیک رامینځته کوي. دا وسیله د ډاکر په څیر ورته وړتیاوې وړاندې کوي، مګر تاسو ته اجازه درکوي د ډیرو پیچلو غوښتنلیکونو سره کار وکړئ.
ډاکر (واحد کانتینر) او ډاکر کمپوز (څو کانټینرونه)
د ډاکر کمپوز لپاره د عادي کارونې قضیه
د ډاکر کمپوز په ښي لاسونو کې یو خورا پیاوړی وسیله ده چې تاسو ته اجازه درکوي په چټکۍ سره د پیچلي جوړښتونو سره غوښتنلیکونه ځای په ځای کړئ. اوس به موږ د ډاکر کمپوز د عملي کارونې مثال وګورو ، د کوم تحلیل به تاسو ته اجازه درکړي د هغه ګټو ارزونه وکړئ چې د ډاکر کمپوز کارول به تاسو ته درکړي.
تصور وکړئ چې تاسو د ویب پروژې پراختیا کونکی یاست. پدې پروژه کې دوه ویب پاڼې شاملې دي. لومړی د سوداګرۍ خلکو ته اجازه ورکوي چې یوازې د څو کلیکونو سره آنلاین پلورنځي رامینځته کړي. دوهم هدف د پیرودونکي ملاتړ دی. دا دوه سایټونه د ورته ډیټابیس سره اړیکه لري.
ستاسو پروژه ورځ تر بلې مشهور کیږي، او دا معلومه شوه چې د سرور ځواک چې دا پرمخ ځي نور کافي ندي. د پایلې په توګه، تاسو پریکړه وکړئ چې ټوله پروژه بل ماشین ته انتقال کړئ.
له بده مرغه، تاسو د ډاکر کمپوز په څیر یو څه نه دي کارولي. له همدې امله ، تاسو باید په یو وخت کې یوځل خدمات لیږد او تنظیم کړئ ، پدې هیله چې تاسو به په پروسه کې هیڅ شی هیر نکړئ.
که تاسو د ډاکر کمپوز کاروئ ، نو بیا ستاسو پروژه نوي سرور ته لیږدول یوه مسله ده چې د څو کمانډونو په چلولو سره حل کیدی شي. نوي ځای ته د پروژې لیږد بشپړولو لپاره ، تاسو اړتیا لرئ یوازې ځینې تنظیمات وکړئ او نوي سرور ته د ډیټابیس بیک اپ کاپي اپلوډ کړئ.
د ډاکر کمپوز په کارولو سره د پیرودونکي - سرور غوښتنلیک رامینځته کول
اوس چې تاسو پوهیږئ چې موږ د څه لپاره د ډاکر کمپوز وکاروو ، دا وخت دی چې د دې وسیلې په کارولو سره ستاسو لومړی پیرودونکي - سرور غوښتنلیک رامینځته کړئ. د مثال په توګه، موږ په 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 سرور لپاره د چلولو چاپیریال تنظیم کولو مسؤل وي. د رامینځته شوي عکس اساس په توګه ، موږ به وکاروو
# На всякий случай напоминаю, что 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
د پیرودونکو غوښتنو ته خدمت کول. له همدې امله، که تاسو په خپل براوزر کې پتې ته لاړ شئ 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