Tha ùghdar an artaigil, an eadar-theangachadh air a bheil sinn a 'foillseachadh an-diugh, ag ràdh gu bheil e airson an luchd-leasachaidh sin a tha airson Docker Compose ionnsachadh agus a tha a' gluasad gu bhith a 'cruthachadh a' chiad iarrtas cleachdaiche-frithealaidh aca a 'cleachdadh Docker. Thathas den bheachd gu bheil leughadair an stuth seo eòlach air bunaitean Docker. Mura h-eil seo fìor, faodaidh tu sùil a thoirt air
Dè a th’ ann an Docker Compose?
Tha Docker Compose na inneal a tha air a ghabhail a-steach le Docker. Tha e air a dhealbhadh gus fuasgladh fhaighinn air duilgheadasan co-cheangailte ri cleachdadh pròiseict.
Fhad ‘s a bha thu ag ionnsachadh bunaitean Docker, is dòcha gu bheil thu air tachairt ri cruthachadh thagraidhean sìmplidh a bhios ag obair gu neo-eisimeileach agus nach eil an urra, mar eisimpleir, air stòran dàta bhon taobh a-muigh no air seirbheisean sònraichte. Ann an cleachdadh, tha tagraidhean mar seo gu math tearc. Mar as trice bidh pròiseactan fìor a’ toirt a-steach seata iomlan de thagraidhean ag obair còmhla.
Ciamar a tha fios agad am feum thu Docker Compose a chleachdadh nuair a bhios tu a’ cleachdadh pròiseact? Gu dearbh tha e gu math sìmplidh. Ma chleachdas tu grunn sheirbheisean gus toirt air a’ phròiseact seo obrachadh, is dòcha gum bi Docker Compose feumail. Mar eisimpleir, ann an suidheachadh far a bheil iad a 'cruthachadh làrach-lìn a dh'fheumas ceangal ri stòr-dàta gus luchd-cleachdaidh a dhearbhadh. Faodaidh pròiseact mar seo a bhith air a dhèanamh suas de dhà sheirbheis - an tè a nì cinnteach gu bheil an làrach ag obrachadh, agus an tè air a bheil uallach airson an stòr-dàta a chumail suas.
Leigidh teicneòlas Docker Compose, airson cunntas a thoirt air ann an dòigh nas sìmplidhe, dhut mòran sheirbheisean a chuir air bhog le aon àithne.
An diofar eadar Docker and Docker Compose
Bithear a’ cleachdadh docker gus na soithichean (seirbheisean) fa leth a tha ann an tagradh a riaghladh.
Tha Docker Compose air a chleachdadh gus grunn shoithichean a tha a’ dèanamh suas tagradh a riaghladh aig an aon àm. Tha an inneal seo a’ tabhann na h-aon chomasan ri Docker, ach leigidh e leat obrachadh le tagraidhean nas iom-fhillte.
Docker (soitheach singilte) agus Docker Compose (iomadh soitheach)
Cùis cleachdaidh àbhaisteach airson Docker Compose
Tha Docker Compose, anns na làmhan ceart, na inneal fìor chumhachdach a leigeas leat tagraidhean a chuir an sàs gu sgiobalta le ailtireachd iom-fhillte. A-nis seallaidh sinn ri eisimpleir de chleachdadh practaigeach de Docker Compose, agus leigidh an sgrùdadh seo leat measadh a dhèanamh air na buannachdan a bheir cleachdadh Docker Compose dhut.
Smaoinich gu bheil thu nad leasaiche air pròiseact lìn. Tha dà làrach-lìn anns a’ phròiseact seo. Tha a’ chiad fhear a’ leigeil le luchd-gnìomhachais stòran air-loidhne a chruthachadh le dìreach beagan chlican. Tha an dàrna fear ag amas air taic teachdaiche. Bidh an dà làrach seo ag eadar-obrachadh leis an aon stòr-dàta.
Tha do phròiseact a 'sìor fhàs mòr-chòrdte, agus tha e a' tionndadh a-mach nach eil cumhachd an fhrithealaiche air a bheil e a 'ruith tuilleadh gu leòr. Mar thoradh air an sin, tha thu a 'co-dhùnadh am pròiseact gu lèir a ghluasad gu inneal eile.
Gu mì-fhortanach, cha do chleachd thu rudeigin mar Docker Compose. Mar sin, feumaidh tu seirbheisean a ghluasad agus ath-dhealbhadh aon aig aon àm, an dòchas nach dìochuimhnich thu dad sa phròiseas.
Ma chleachdas tu Docker Compose, tha gluasad do phròiseact gu frithealaiche ùr na chùis a dh’ fhaodar fhuasgladh le bhith a’ ruith beagan òrdughan. Gus crìoch a chur air gluasad a’ phròiseict gu àite ùr, cha leig thu leas ach cuid de shuidheachaidhean a dhèanamh agus leth-bhreac cùl-taic den stòr-dàta a luchdachadh suas chun t-seirbheisiche ùr.
A’ leasachadh tagradh frithealaiche teachdaiche a’ cleachdadh Docker Compose
A-nis gu bheil fios agad carson a tha sinn gu bhith a’ cleachdadh Docker Compose, tha an t-àm ann a’ chiad tagradh frithealaiche teachdaiche agad a chruthachadh a’ cleachdadh an inneal seo. Is e sin, tha sinn a’ bruidhinn mu bhith a’ leasachadh làrach-lìn beag (frithealaiche) ann am Python as urrainn faidhle a chuir a-mach le criomag de theacsa. Tha am faidhle seo air iarraidh bhon fhrithealaiche le prògram (cliant), cuideachd sgrìobhte ann am Python. Às deidh dhut faidhle fhaighinn bhon t-seirbheisiche, bidh am prògram a’ taisbeanadh an teacsa a tha air a stòradh ann air an sgrion.
Thoir an aire gu bheil sinn a’ gabhail ris gu bheil tuigse bhunasach agad air Docker agus gu bheil an àrd-ùrlar Docker agad mu thràth air a chuir a-steach.
Feuch an tòisich sinn ag obair air a 'phròiseact.
▍1. A 'cruthachadh pròiseact
Gus a’ chiad iarrtas teachdaiche/frithealaiche agad a thogail, tha mi a’ moladh gun tòisich thu le bhith a’ cruthachadh pasgan pròiseict. Bu chòir na faidhlichean agus na pasganan a leanas a bhith ann:
- faidhl
docker-compose.yml
. Is e seo faidhle Docker Compose anns am bi an stiùireadh a dh’ fheumar gus na seirbheisean a thòiseachadh agus a rèiteachadh. - pasgan
server
. Bidh na faidhlichean ann a tha riatanach gus am frithealaiche a chumail a’ dol. - pasgan
client
. Bidh na faidhlichean tagraidh teachdaiche suidhichte an seo.
Mar thoradh air an sin, bu chòir gum biodh susbaint prìomh phasgan a’ phròiseict agad a’ coimhead mar seo:
.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file
▍2. A 'cruthachadh frithealaiche
An seo, ann am pròiseas cruthachadh frithealaiche, bruidhnidh sinn air cuid de rudan bunaiteach a thaobh Docker.
2a. A 'cruthachadh fhaidhlichean
Rach don phasgan server
agus cruthaich na faidhlichean a leanas ann:
- faidhl
server.py
. Bidh còd an fhrithealaiche ann. - faidhl
index.html
. Bidh pìos teacsa san fhaidhle seo a bu chòir don aplacaid teachdaiche a-mach. - faidhl
Dockerfile
. Is e seo faidhle Docker anns am bi an stiùireadh a dh’ fheumar gus àrainneachd an fhrithealaiche a chruthachadh.
Seo cò ris a bu chòir susbaint a’ phasgan agad a bhith coltach server/
:
.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files
2b. A 'deasachadh faidhle Python.
Cuir ris an fhaidhle server.py
an còd a leanas:
#!/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()
Leigidh an còd seo leat frithealaiche lìn sìmplidh a chruthachadh. Bheir e am faidhle don luchd-dèiligidh index.html
, agus thèid na tha ann a thaisbeanadh nas fhaide air adhart air an duilleag lìn.
2c. Deasachadh faidhle HTML
Gus faidhleadh index.html
cuir an teacsa a leanas ris:
Docker-Compose is magic!
Thèid an teacsa seo a chuir chun neach-dèiligidh.
2d. A 'deasachadh an Dockerfile
A-nis cruthaichidh sinn faidhle sìmplidh Dockerfile
, a bhios an urra ri bhith ag eagrachadh na h-àrainneachd runtime airson frithealaiche Python. Mar bhunait airson an ìomhaigh chruthaichte, cleachdaidh sinn
# На всякий случай напоминаю, что 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/
A-nis leig dhuinn tòiseachadh ag obair air an neach-dèiligidh.
▍3. A 'cruthachadh neach-dèiligidh
Fhad ‘s a tha sinn a’ cruthachadh taobh teachdaiche ar pròiseact, bidh cuimhne againn air cuid de bhunaitean Docker air an t-slighe.
3a. A 'cruthachadh fhaidhlichean
Rach don phasgan pròiseict agad client
agus cruthaich na faidhlichean a leanas ann:
- faidhl
client.py
. Bidh an còd teachdaiche suidhichte an seo. - faidhl
Dockerfile
. Tha an aon àite aig an fhaidhle seo ri faidhle coltach ris ann am pasgan an fhrithealaiche. Is e sin, tha stiùireadh ann a tha ag innse mar a chruthaicheas tu àrainneachd airson còd teachdaiche a chuir an gnìomh.
Mar thoradh air an sin, am pasgan agad client/
aig an ìre seo den obair bu chòir dha coimhead mar seo:
.
├── client.py
└── Dockerfile
0 directories, 2 files
3b. A 'deasachadh faidhle Python
Cuir ris an fhaidhle client.py
an còd a leanas:
#!/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()
Leis a’ chòd seo, faodaidh an tagradh teachdaiche dàta a luchdachadh sìos bhon t-seirbheisiche agus a thaisbeanadh air an sgrion.
3c. A 'deasachadh an Dockerfile
Mar ann an cùis an fhrithealaiche, bidh sinn a 'cruthachadh sìmplidh Dockerfile
, le uallach airson an àrainneachd a chruthachadh anns am bi an tagradh cliant Python a’ ruith. Seo an còd teachdaiche Dockerfile
:
# То же самое, что и в серверном Dockerfile.
FROM python:latest
# Импортируем 'client.py' в папку '/client/'.
ADD client.py /client/
# Устанавливаем в качестве рабочей директории '/client/'.
WORKDIR /client/
▍4. Sgrìobhadh Docker
Mar is dòcha gu bheil thu air mothachadh, chruthaich sinn dà phròiseact eadar-dhealaichte: frithealaiche agus teachdaiche. Tha a faidhle fhèin aig gach fear dhiubh Dockerfile
. Gu ruige seo, chan eil a h-uile càil a tha air tachairt air a dhol seachad air bunaitean a bhith ag obair le Docker. A-nis bidh sinn a’ tòiseachadh le Docker Compose. Gus seo a dhèanamh, rachamaid chun an fhaidhle docker-compose.yml
, suidhichte ann am pasgan freumh a’ phròiseict.
Thoir an aire nach eil sinn an seo a’ feuchainn ri na h-òrdughan uile a ghabhas cleachdadh ann a chòmhdach docker-compose.yml
. Is e ar prìomh amas coiseachd tro eisimpleir practaigeach a bheir dhut an eòlas bunaiteach air Docker Compose.
Seo an còd airson a chur san fhaidhle 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. A 'togail a' phròiseact
Às deidh a-staigh docker-compose.yml
Chaidh a h-uile stiùireadh riatanach a chuir a-steach, feumaidh am pròiseact a bhith air a chruinneachadh. Tha an ceum seo den obair againn coltach ri bhith a’ cleachdadh na h-àithne docker build
, ach tha an àithne co-fhreagarrach buntainneach do ghrunn sheirbheisean:
$ docker-compose build
▍6. Cur air bhog a 'phròiseict
A-nis gu bheil am pròiseact deiseil, tha an t-àm ann a chuir air bhog. Tha an ceum seo de ar n-obair a 'freagairt ris a' cheum anns a bheil, nuair a bhios sinn ag obair le soithichean fa leth, an òrdugh air a chur gu bàs docker run
:
$ docker-compose up
Às deidh an àithne seo a chuir an gnìomh, bu chòir an teacsa a chaidh a luchdachadh sìos leis an neach-dèiligidh bhon fhrithealaiche nochdadh anns a’ chrìoch: Docker-Compose is magic!
.
Mar a chaidh ainmeachadh roimhe, bidh am frithealaiche a’ cleachdadh port a’ choimpiutair 1234
ri iarrtasan luchd-cleachdaidh seirbheis. Mar sin, ma thèid thu chun an t-seòlaidh sa bhrobhsair agad Docker-Compose is magic!
.
Òrdughan feumail
Bheir sinn sùil air cuid de òrdughan a dh’ fhaodadh a bhith feumail dhut nuair a bhios tu ag obair le Docker Compose.
Leigidh an àithne seo leat stad agus cuir às do shoithichean agus goireasan eile a chruthaich an àithne docker-compose up
:
$ docker-compose down
Bidh an àithne seo a’ clò-bhualadh logaichean seirbheis:
$ docker-compose logs -f [service name]
Mar eisimpleir, anns a’ phròiseact againn faodar a chleachdadh san fhoirm seo: $ docker-compose logs -f [service name]
.
A’ cleachdadh an àithne seo faodaidh tu liosta de shoithichean a thaisbeanadh:
$ docker-compose ps
Leigidh an àithne seo leat òrdugh a chuir an gnìomh ann an soitheach ruith:
$ docker-compose exec [service name] [command]
Mar eisimpleir, is dòcha gum bi e coltach ri seo: docker-compose exec server ls
.
Leigidh an àithne seo leat liosta de dhealbhan a thaisbeanadh:
$ docker-compose images
Builean
Tha sinn air sùil a thoirt air bunaitean a bhith ag obair le teicneòlas Docker Compose, agus le eòlas air a leigeas leat an teicneòlas seo a chleachdadh agus, ma thogras tu, tòiseachadh air sgrùdadh nas doimhne a dhèanamh air.
Luchd leughaidh! Am bi thu a’ cleachdadh Docker Compose anns na pròiseactan agad?
Source: www.habr.com