Hagaha Bilowga ah ee Samaynta Qorista

Qoraaga maqaalka, tarjumaadda aan maanta daabacayno, ayaa sheegaysa in loogu talagalay kuwa horumariya ee raba inay bartaan Docker Compose oo u dhaqaaqaya abuuritaanka codsigooda macmiilka-server-ka ugu horreeya iyagoo isticmaalaya Docker. Waxaa loo maleynayaa in akhristaha maaddadan uu yaqaanno aasaaska Docker. Haddii tani aysan ahayn xaaladdu, waad arki kartaa tan qalab taxane ah oo saaran tan Ku dhajinta daboolida aasaasiga ah ee Docker oo ay weheliso aasaaska Kubernetes, iyo tan maqaalka bilowga ah.

Hagaha Bilowga ah ee Samaynta Qorista

Waa maxay Docker Compose?

Docker Compose waa qalab ay ku jiraan Docker. Waxaa loogu talagalay in lagu xalliyo dhibaatooyinka la xiriira geynta mashruuca.

Markaad baranayso aasaaska Docker, waxaa laga yaabaa inaad la kulantay abuurista codsiyo fudud oo si madaxbanaan u shaqeeya oo aan ku xidhnayn, tusaale ahaan, ilaha xogta dibadda ama adeegyada qaarkood. Ficil ahaan, codsiyada noocan oo kale ah waa dhif. Mashaariicda dhabta ahi waxay inta badan ku lug leeyihiin codsiyo dhan oo wada shaqaynaya.

Sidee ku ogaan kartaa haddii aad u baahan tahay inaad isticmaasho Docker Compose marka aad daynayso mashruuc? Runtii aad ayay u fududahay. Haddii aad isticmaasho adeegyo badan si aad mashruucani u shaqeyso, markaas Docker Compose waxaa laga yaabaa inuu ku anfacaado. Tusaale ahaan, xaalad ay ku abuuraan degel u baahan in lagu xidho kaydka xogta si loo xaqiijiyo isticmaalayaasha. Mashruucan oo kale wuxuu ka koobnaan karaa laba adeeg - mid hubiya shaqada goobta, iyo mid ka mas'uul ah ilaalinta xogta xogta.

Docker Compose technology, si aad u sharaxdo hab la fududeeyay, waxay kuu ogolaanaysaa inaad bilowdo adeegyo badan oo leh hal amar.

Farqiga u dhexeeya Docker iyo Docker Compose

Docker waxa loo isticmaalaa in lagu maareeyo weelasha gaarka ah (adeegyada) ee ka samaysan codsiga.

Docker Compose waxaa loo isticmaalaa in si isku mar ah loo maareeyo weelasha badan oo ka samaysan codsi. Qalabkani wuxuu bixiyaa awood la mid ah kan Docker, laakiin wuxuu kuu ogolaanayaa inaad la shaqeyso codsiyo kakan.

Hagaha Bilowga ah ee Samaynta Qorista
Docker (hal weel) iyo Docker Compose ( weelal badan)

Kiis isticmaalka caadiga ah ee Docker Compose

Docker Compose waa, gacmaha midig, qalab aad u xoog badan oo kuu ogolaanaya inaad si degdeg ah u geyso codsiyada leh naqshado adag. Hadda waxaan eegi doonaa tusaale ahaan isticmaalka dhabta ah ee Docker Compose, falanqaynta taas oo kuu ogolaan doonta inaad qiimeyso faa'iidooyinka isticmaalka Docker Compose ay ku siin doonto.

Ka soo qaad inaad tahay horumariye mashruuc shabakadeed. Mashruucan wuxuu ka kooban yahay laba shabakadood. Midka ugu horreeya wuxuu u oggolaanayaa dadka ganacsiga inay abuuraan dukaamo khadka tooska ah oo leh dhowr dhagsi. Midda labaad waxaa loogu talagalay taageerada macaamiisha. Labadan goobood waxay la falgalaan xog isku mid ah.

Mashruucaagu wuxuu noqonayaa mid caan ah oo aad u caan ah, waxaana soo baxday in awoodda server-ka uu ku shaqeeyo aysan ku filneyn. Natiijo ahaan, waxaad go'aansatey inaad mashruuca oo dhan u wareejiso mashiin kale.

Nasiib darro, ma aadan isticmaalin wax sida Docker Compose. Sidaa darteed, waa inaad beddeshaa oo aad dib u habayn ku samaysaa adeegyada midba mar, adiga oo rajaynaya inaadan ilaawi doonin wax kasta oo hawsha ku jira.

Haddii aad isticmaasho Docker Compose, ka dib u wareejinta mashruucaaga server cusub waa arrin lagu xallin karo iyada oo la adeegsanayo dhowr amarro. Si aad u dhamaystirto wareejinta mashruuca meel cusub, waxa kaliya oo aad u baahan tahay in aad samaysato qaar ka mid ah goobaha oo aad koobi kayd ah ugu shubto kaydka xogta serverka cusub.

Samaynta codsiga macmiilka-server adoo isticmaalaya Docker Compose

Hadda oo aad ogtahay waxa aan u isticmaaleyno Docker Compose, waa waqtigii aad abuuri lahayd codsigaaga macmiilka-server ee ugu horreeya adiga oo isticmaalaya qalabkan. Magac ahaan, waxaan ka hadlaynaa horumarinta degel yar (server) oo Python ah oo soo saari kara fayl leh jajab qoraal ah. Faylkan waxa server-ka ka codsaday barnaamij (macmiil), oo sidoo kale ku qoran Python. Ka dib markii faylka laga helo server-ka, barnaamijku wuxuu soo bandhigayaa qoraalka ku kaydsan shaashadda.

Fadlan la soco inaan u qaadanayno inaad leedahay faham aasaasi ah oo ku saabsan Docker iyo inaad horey u haysatey madal Docker ah.

Aynu bilowno ka shaqaynta mashruuca.

▍1. Abuuritaanka Mashruuc

Si aad u dhisto codsigaagii ugu horeeyay ee macmiilka-server, waxaan kuu soo jeedinayaa inaad bilowdo adigoo abuuraya galka mashruuca. Waa inay ka kooban tahay faylasha iyo faylalka soo socda:

  • file docker-compose.yml. Kani waa faylka Docker Compose ka kooban yahay tilmaamaha loo baahan yahay si loo bilaabo loona habeeyo adeegyada.
  • folder server. Waxay ka koobnaan doontaa faylalka lagama maarmaanka u ah in serverku sii socdo.
  • folder client. Faylasha codsiga macmiilka ayaa halkan ku yaal.

Natiijo ahaan, waxa ku jira faylka ugu weyn ee mashruucaagu waa inuu u ekaado sidan:

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

▍2. Abuuritaanka server

Halkan, habka abuurista server, waxaan taaban doonaa qaar ka mid ah waxyaabaha aasaasiga ah ee ku saabsan Docker.

2a. Samaynta faylasha

Tag gal server oo ku dhex samee faylasha soo socda:

  • file server.py. Waxay ka koobnaan doontaa koodka serverka.
  • file index.html. Faylkani waxa uu ka koobnaan doonaa qayb qoraal ah oo codsiga macmiilku soo saari doono.
  • file Dockerfile. Kani waa faylka Docker oo ka koobnaan doona tilmaamaha loo baahan yahay si loo abuuro deegaanka serverka.

Tani waa waxa ku jira galkaaga waa inuu u ekaado server/:

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

2b. Tafatirka faylka Python

Kudar faylka server.py koodka soo socda:

#!/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()

Koodhkani wuxuu kuu ogolaanayaa inaad abuurto server web fudud. Wuxuu siin doonaa macaamiisha faylka index.html, waxa ku jira oo hadhow lagu soo bandhigi doono bogga shabakadda.

2c. Tafatirka faylka HTML

In la xareeyo index.html ku dar qoraalkan soo socda:

Docker-Compose is magic!

Qoraalkan waxa loo diri doona macmiilka.

2d Tafatirka Dockerfile

Hadda waxaan abuuri doonaa fayl fudud Dockerfile, yaa mas'uul ka noqon doona abaabulka jawiga runtime ee server-ka Python. Sida saldhigga sawirka la abuuray, waxaan isticmaali doonaa si rasmi ah, loogu talagalay in lagu socodsiiyo barnaamijyada ku qoran Python. Waa kan waxa ku jira 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/

Hadda aan bilowno shaqada macmiilka.

▍3. Abuurista macmiil

Marka la abuurayo dhinaca macmiilka ee mashruucayaga, waxaan xasuusan doonaa qaar ka mid ah aasaaska Docker ee jidka.

3a. Samaynta faylasha

Tag galka mashruucaaga client oo ku dhex samee faylasha soo socda:

  • file client.py. Koodhka macmiilka ayaa halkan ku yaal.
  • file Dockerfile. Faylkani waxa uu ciyaaraa door la mid ah kan fayl la mid ah oo ku jira gal server-ka. Magac ahaan, waxa ay ka kooban tahay tilmaamo qeexaya sida loo abuuro jawi lagu fulinayo koodka macmiilka.

Natiijo ahaan, galkaaga client/ Marxaladdan shaqadu waa inay u ekaataa sidan:

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

3b. Tafatirka faylka Python

Kudar faylka client.py koodka soo socda:

#!/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()

Koodhkan, codsiga macmiilku wuxuu ka soo dejisan karaa xogta server-ka oo uu ku soo bandhigi karaa shaashadda.

3c. Tafatirka Dockerfile

Sida kiiska server-ka, waxaan abuurnaa fudud Dockerfile, mas'uul ka ah abuurista jawiga uu codsiga macmiilka Python ku socon doono. Waa kan koodka macmiilka Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Sida laga yaabo inaad dareentay, waxaan abuurnay laba mashruuc oo kala duwan: server iyo macmiil. Mid kasta oo iyaga ka mid ah wuxuu leeyahay faylal u gaar ah Dockerfile. Ilaa hadda, wax kasta oo dhacay kama aysan dhaafin aasaaska la shaqeynta Docker. Hadda waxaan ku bilownay Docker Compose. Si tan loo sameeyo, aan tagno faylka docker-compose.yml, oo ku yaal galka xididka mashruuca.

Fadlan la soco in aan halkan isku dayeyno in aan ku daboolno gabi ahaanba dhammaan amarrada loo isticmaali karo docker-compose.yml. Hadafkayaga ugu weyn waa inaan ku dhex marno tusaale wax ku ool ah oo ku siin doona aqoonta aasaasiga ah ee Docker Compose.

Waa kan koodka lagu ridayo faylka 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. Dhismaha mashruuca

Ka dib gudaha docker-compose.yml Dhammaan tilmaamaha lagama maarmaanka ah ayaa la geliyey, mashruuca wuxuu u baahan yahay in la isku keeno. Tallaabadan shaqadeennu waxay la mid tahay adeegsiga amarka docker build, laakiin amarka u dhigma ayaa khuseeya dhowr adeegyo:

$ docker-compose build

▍6. Daahfurka mashruuca

Hadda oo mashruucii la soo ururiyey, waa waqtigii la bilaabi lahaa. Tallaabadan shaqadeennu waxay u dhigantaa tallaabada, marka la shaqeynayo weelasha shakhsi ahaaneed, amarka waa la fuliyay docker run:

$ docker-compose up

Kadib fulinta amarkan, qoraalka uu macmiilku ka soo dejiyey server-ka waa inuu ka soo muuqdaa terminalka: Docker-Compose is magic!.

Sida hore loo soo sheegay, server-ku wuxuu isticmaalaa dekedda kombiyuutarka 1234 u adeega codsiyada macmiilka. Sidaa darteed, haddii aad tagto ciwaanka browserkaaga http://localhost:1234/, waxay soo bandhigi doontaa bog qoraal ah Docker-Compose is magic!.

Awaamiirta waxtarka leh

Aynu eegno qaar ka mid ah amarada laga yaabo inaad faa'iido u yeelato markaad la shaqaynayso Docker Compose.

Amarkani wuxuu kuu ogolaanayaa inaad joojiso oo aad tirtirto weelasha iyo agabyada kale ee uu sameeyay talisku docker-compose up:

$ docker-compose down

Amarkani wuxuu daabacaa diiwaannada adeegga:

$ docker-compose logs -f [service name]

Tusaale ahaan, mashruucayaga waxa loo isticmaali karaa qaabkan: $ docker-compose logs -f [service name].

Adeegsiga amarkan waxaad soo bandhigi kartaa liiska weelasha:

$ docker-compose ps

Amarka wuxuu kuu ogolaanayaa inaad ku fuliso amarka weelka socda:

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

Tusaale ahaan, waxay u ekaan kartaa sidan: docker-compose exec server ls.

Amarkaan wuxuu kuu ogolaanayaa inaad muujiso liiska sawirada:

$ docker-compose images

Natiijooyinka

Waxaan eegnay aasaaska la shaqeynta Docker Compose technology, aqoonta taas oo kuu ogolaaneysa inaad isticmaasho tignoolajiyadan, haddii la rabo, si qoto dheer u darso. halkan meel kayd ah oo leh koodka mashruuca ee aanu halkan ku eegnay.

Akhristayaasha sharafta leh! Ma u isticmaashaa Docker Compose mashaariicdaada?

Hagaha Bilowga ah ee Samaynta Qorista

Source: www.habr.com

Add a comment