Isikhokelo sabaQalayo kwiDocker Compose

Umbhali wenqaku, inguqulelo esiyipapashayo namhlanje, ithi yenzelwe abo baphuhlisi abafuna ukufunda iDocker Compose kwaye baqhubela phambili ekwenzeni isicelo sabo sokuqala somncedisi womthengi usebenzisa iDocker. Kucingelwa ukuba umfundi wesi sixhobo uqhelene neziseko zeDocker. Ukuba oku akunjalo, unokujonga oku uthotho lwemathiriyeli kwi oku isithuba esigubungela iziseko zeDocker kunye neziseko zeKubernetes, kunye oku inqaku labaqalayo.

Isikhokelo sabaQalayo kwiDocker Compose

Yintoni iDocker Compose?

IDocker Compose sisixhobo esibandakanyiweyo neDocker. Yenzelwe ukusombulula iingxaki ezinxulumene nokusasazwa kweprojekthi.

Ngelixa ufunda iziseko zeDocker, usenokuba udibene nokudalwa kwezicelo ezilula ezisebenza ngokuzimeleyo kwaye azixhomekekanga, umzekelo, kwimithombo yedatha yangaphandle okanye kwiinkonzo ezithile. Enyanisweni, izicelo ezinjalo zinqabile. Iiprojekthi zokwenyani zihlala zibandakanya iseti epheleleyo yezicelo ezisebenza kunye.

Wazi njani ukuba ufuna ukusebenzisa iDocker Compose xa uhambisa iprojekthi? Ngokwenene ilula kakhulu. Ukuba usebenzisa iinkonzo ezininzi ukwenza le projekthi isebenze, ke iDocker Compose inokuza luncedo. Ngokomzekelo, kwimeko apho benza i-website efuna ukudibanisa kwi-database ukuze baqinisekise abasebenzisi. Iprojekthi enjalo inokubandakanya iinkonzo ezimbini - enye eqinisekisa ukusebenza kwendawo, kunye neyona nto inoxanduva lokugcina isiseko sedatha.

I-Docker Qamba itekhnoloji, ukuyichaza ngendlela elula, ikuvumela ukuba uqalise iinkonzo ezininzi ngomyalelo omnye.

Umahluko phakathi kweDocker kunye neDocker Compose

Idokhi isetyenziselwa ukulawula izikhongozeli (iinkonzo) ezenza isicelo.

I-Docker Compose isetyenziselwa ukulawula ngaxeshanye izikhongozeli ezininzi ezenza isicelo. Esi sixhobo sibonelela ngezakhono ezifanayo njenge-Docker, kodwa ikuvumela ukuba usebenze ngezicelo ezinzima ngakumbi.

Isikhokelo sabaQalayo kwiDocker Compose
Idokhi (isikhongozeli esinye) kunye neDocker Compose (izikhongozeli ezininzi)

Imeko yokusetyenziswa eqhelekileyo yeDocker Compose

I-Docker Compose, kwizandla ezichanekileyo, sisixhobo esinamandla kakhulu esikuvumela ukuba uthumele ngokukhawuleza usetyenziso olunolwakhiwo oluntsonkothileyo. Ngoku siza kujonga umzekelo wokusetyenziswa okusebenzayo kweDocker Compose, uhlalutyo oluya kukuvumela ukuba uvavanye izibonelelo oza kukunika zona usebenzisa iDocker Compose.

Khawufane ucinge ukuba ungumphuhlisi weprojekthi yewebhu. Le projekthi ibandakanya iiwebhusayithi ezimbini. Eyokuqala ivumela abantu bezoshishino ukuba benze iivenkile ze-intanethi ngokucofa nje okumbalwa. Okwesibini kujoliswe kwinkxaso yabathengi. Ezi ndawo zimbini zisebenzisana nedatha efanayo.

Iprojekthi yakho iya ithandwa ngakumbi, kwaye kuvela ukuba amandla omncedisi osebenza kuwo awasekho ngokwaneleyo. Ngenxa yoko, uthatha isigqibo sokususa yonke iprojekthi komnye umatshini.

Ngelishwa, awuzange usebenzise into efana neDocker Compose. Ke ngoko, kuya kufuneka udlulise kwaye uhlengahlengise iinkonzo enye ngexesha, ngethemba lokuba awuyi kulibala nantoni na kwinkqubo.

Ukuba usebenzisa iDocker Compose, emva koko ukuhambisa iprojekthi yakho kwiseva entsha ngumcimbi onokusonjululwa ngokuqhuba imiyalelo embalwa. Ukuze ugqibezele ukuhanjiswa kweprojekthi kwindawo entsha, kufuneka wenze kuphela izicwangciso ezithile kwaye ulayishe ikopi yokugcina yedatha kwiseva entsha.

Ukuphuhlisa usetyenziso lweseva yomxhasi usebenzisa iDocker Compose

Ngoku uyayazi into esiza kuyisebenzisela iDocker Compose, lixesha lokuba wenze isicelo sakho sokuqala somncedisi womthengi usebenzisa esi sixhobo. Ngokucacileyo, sithetha ngokuphuhlisa iwebhusayithi encinci (iseva) kwiPython enokuthi ikhuphe ifayile kunye neqhekeza lokubhaliweyo. Le fayile icelwa kumncedisi yinkqubo (umxhasi), ebhalwe kwakhona kwiPython. Emva kokufumana ifayile kumncedisi, inkqubo ibonisa umbhalo ogcinwe kuyo kwisikrini.

Nceda uqaphele ukuba sicinga ukuba unokuqonda okusisiseko kweDocker kwaye sele unayo iqonga leDocker efakiweyo.

Masiqale ukusebenza kwiprojekthi.

▍1. Ukudala iProjekthi

Ukwakha isicelo sakho sokuqala somncedisi, ndicebisa ukuba uqale ngokwenza ifolda yeprojekthi. Kufuneka iqulathe ezi fayile zilandelayo kunye neefolda:

  • Ifayile docker-compose.yml. Le yiDocker Qamba ifayile eya kuba nemiyalelo efunekayo ukuqalisa kunye nokuqwalasela iinkonzo.
  • Ifolda server. Iza kuqulatha iifayile eziyimfuneko ukugcina umncedisi esebenza.
  • Ifolda client. Iifayile zesicelo somthengi ziya kufumaneka apha.

Ngenxa yoko, imixholo yolawulo oluphambili lweprojekthi yakho kufuneka ijongeke ngolu hlobo:

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

▍2. Ukwenza iseva

Apha, kwinkqubo yokwenza iseva, siya kuchukumisa ezinye izinto ezisisiseko malunga neDocker.

2a. Ukwenza iifayile

Yiya kwifolda server kwaye wenze ezi fayile zilandelayo kuyo:

  • Ifayile server.py. Iza kuqulatha ikhowudi yomncedisi.
  • Ifayile index.html. Le fayile izakuqulatha iqhekeza lokubhaliweyo ekufuneka isicelo somxhasi sikhuphe.
  • Ifayile Dockerfile. Le yifayile yeDocker eya kuba nemiyalelo efunekayo ukwenza imeko-bume yomncedisi.

Le yindlela imixholo yolawulo lwakho ekufuneka ijongeke ngayo server/:

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

2b. Ukuhlela ifayile yePython.

Yongeza kwifayile server.py le khowudi ilandelayo:

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

Le khowudi ikuvumela ukuba wenze iseva yewebhu elula. Uya kunika abathengi ifayile index.html, imixholo eya kuthi kamva iboniswe kwiphepha lewebhu.

2c. Ukuhlela iFayile yeHTML

Ukufayilisha index.html yongeza isicatshulwa esilandelayo:

Docker-Compose is magic!

Lo mbhalo uza kuthunyelwa kumxhasi.

2d. Ukuhlela iDockerfile

Ngoku siza kudala ifayile elula Dockerfile, ngubani oya kuba noxanduva lokuququzelela indawo yokusebenza kwiseva yePython. Njengesiseko somfanekiso owenziweyo, siya kusebenzisa ngendlela esemthethweni, eyenzelwe ukuqhuba iinkqubo ezibhalwe kwiPython. Nanku umxholo weDockerfile:

# На всякий случай напоминаю, что 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/

Ngoku makhe siqale ukusebenza kumxhasi.

▍3. Ukudala umxhasi

Ngelixa sisenza icala labathengi beprojekthi yethu, siya kukhumbula iziseko zeDocker endleleni.

3a. Ukwenza iifayile

Yiya kwifolda yeprojekthi yakho client kwaye wenze ezi fayile zilandelayo kuyo:

  • Ifayile client.py. Ikhowudi yomxhasi izakubekwa apha.
  • Ifayile Dockerfile. Le fayile idlala indima efanayo njengefayile efanayo kwifolda yomncedisi. Oko kukuthi, iqulethe imiyalelo echaza indlela yokudala imeko-bume yokwenza ikhowudi yomxhasi.

Ngenxa yoko, ifolda yakho client/ kweli nqanaba lomsebenzi kufuneka libukeke ngolu hlobo:

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

3b. Ukuhlela iFayile yePython

Yongeza kwifayile client.py le khowudi ilandelayo:

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

Ngale khowudi, isicelo somthengi sinokukhuphela idatha kwiseva kwaye siyibonise kwisikrini.

3c. Ukuhlela iDockerfile

Njengoko kwimeko yomncedisi, senza elula Dockerfile, uxanduva lokudala indawo apho isicelo somthengi wePython siya kuqhuba. Nantsi ikhowudi yomxhasi Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Qamba

Njengoko usenokuba uqaphele, senze iiprojekthi ezimbini ezahlukeneyo: iseva kunye nomxhasi. Ngamnye wabo unefayile yakhe Dockerfile. Ukuza kuthi ga ngoku, yonke into eyenzekileyo ayigqithanga ngaphaya kweziseko zokusebenza neDocker. Ngoku siqala ngeDocker Compose. Ukwenza oku, masiye kwifayile docker-compose.yml, ibekwe kwisiqulathi seengcambu zeprojekthi.

Nceda uqaphele ukuba apha asizami ukugubungela ngokupheleleyo yonke imiyalelo enokusetyenziswa kuyo docker-compose.yml. Injongo yethu ephambili kukuhamba ngomzekelo osebenzayo oya kukunika ulwazi olusisiseko lweDocker Compose.

Nantsi ikhowudi yokufaka kwifayile 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. Ukwakha iprojekthi

Emva kokungena docker-compose.yml Yonke imiyalelo eyimfuneko ifakiwe, iprojekthi kufuneka ihlanganiswe. Eli nyathelo lomsebenzi wethu liyafana nokusebenzisa umyalelo docker build, kodwa umyalelo ohambelanayo ufanelekile kwiinkonzo ezininzi:

$ docker-compose build

▍6. Ukuqaliswa kweprojekthi

Ngoku ekubeni iprojekthi idityanisiwe, lixesha lokuyisungula. Eli nyathelo lomsebenzi wethu lihambelana nenyathelo apho, xa usebenza kunye nezikhongozeli zomntu ngamnye, umyalelo uphunyezwa docker run:

$ docker-compose up

Emva kokuphumeza lo myalelo, okubhaliweyo okukhutshelwe ngumxhasi kumncedisi kufuneka kuvele kwi-terminal: Docker-Compose is magic!.

Njengoko sele kukhankanyiwe, umncedisi usebenzisa i-port yekhompyutha 1234 kwinkonzo yezicelo zabaxhasi. Ngoko ke, ukuba uya kwidilesi kwisikhangeli sakho http://localhost:1234/, iyakubonisa iphepha elinombhalo Docker-Compose is magic!.

Imiyalelo eluncedo

Makhe sijonge eminye imiyalelo onokuyifumana iluncedo xa usebenza neDocker Compose.

Lo myalelo ikuvumela ukuba umise kwaye ucime izikhongozeli kunye nezinye izixhobo ezenziwe ngumyalelo docker-compose up:

$ docker-compose down

Lo myalelo ushicilela iilog zenkonzo:

$ docker-compose logs -f [service name]

Umzekelo, kwiprojekthi yethu inokusetyenziswa kule fomu: $ docker-compose logs -f [service name].

Usebenzisa lo myalelo ungabonisa uluhlu lwezikhongozeli:

$ docker-compose ps

Lo myalelo ikuvumela ukuba uphumeze umyalelo kwisikhongozeli esisebenzayo:

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

Umzekelo, inokujongeka ngolu hlobo: docker-compose exec server ls.

Lo myalelo ikuvumela ukuba ubonise uluhlu lwemifanekiso:

$ docker-compose images

Iziphumo

Sijonge iziseko zokusebenza kunye neTekhnoloji yeDocker Compose, ulwazi oluya kukuvumela ukuba usebenzise le teknoloji kwaye, ukuba unqwenela, uqale ukuyifunda nzulu ngakumbi. Apha indawo yokugcina enekhowudi yeprojekthi esiyijongileyo apha.

Bafundi abathandekayo! Ngaba uyayisebenzisa iDocker Compose kwiiprojekthi zakho?

Isikhokelo sabaQalayo kwiDocker Compose

umthombo: www.habr.com

Yongeza izimvo