L-awtur tal-artiklu, li t-traduzzjoni tiegħu qed nippubblikaw illum, jgħid li huwa maħsub għal dawk l-iżviluppaturi li jixtiequ jitgħallmu Docker Compose u qed jimxu lejn il-ħolqien tal-ewwel applikazzjoni klijent-server tagħhom bl-użu ta 'Docker. Huwa preżunt li l-qarrej ta 'dan il-materjal huwa familjari mal-baŜi ta' Docker. Jekk dan ma jkunx il-każ, tista 'tagħti ħarsa lejn
X'inhu Docker Compose?
Docker Compose hija għodda inkluża ma 'Docker. Hija mfassla biex issolvi problemi relatati mal-iskjerament tal-proġett.
Waqt li tgħallem il-baŜi ta 'Docker, jista' jkun li ltqajt mal-ħolqien ta 'applikazzjonijiet sempliċi li jaħdmu b'mod awtonomu u ma jiddependux, pereżempju, fuq sorsi ta' dejta esterni jew fuq ċerti servizzi. Fil-prattika, applikazzjonijiet bħal dawn huma rari. Proġetti reali normalment jinvolvu sett sħiħ ta 'applikazzjonijiet li jaħdmu flimkien.
Kif tkun taf jekk għandekx bżonn tuża Docker Compose meta tuża proġett? Huwa fil-fatt sempliċi ħafna. Jekk tuża diversi servizzi biex tagħmel dan il-proġett jaħdem, allura Docker Compose jista 'jkun utli. Per eżempju, f'sitwazzjoni fejn joħolqu websajt li jeħtieġ li tikkonnettja ma 'database sabiex jawtentikaw l-utenti. Proġett bħal dan jista 'jikkonsisti f'żewġ servizzi - dak li jiżgura t-tħaddim tas-sit, u dak li huwa responsabbli għaż-żamma tad-database.
It-teknoloġija Docker Compose, biex tiddeskriviha b'mod simplifikat, tippermettilek tniedi ħafna servizzi b'kmand wieħed.
Differenza bejn Docker u Docker Compose
Docker jintuża biex jimmaniġġja l-kontenituri individwali (servizzi) li jiffurmaw applikazzjoni.
Docker Compose jintuża biex jimmaniġġja simultanjament kontenituri multipli li jiffurmaw applikazzjoni. Din l-għodda toffri l-istess kapaċitajiet bħal Docker, iżda tippermettilek taħdem ma 'applikazzjonijiet aktar kumplessi.
Docker (kontenitur wieħed) u Docker Compose (kontenituri multipli)
Każ ta' użu tipiku għal Docker Compose
Docker Compose huwa, f'idejn it-tajba, għodda b'saħħitha ħafna li tippermettilek tiskjera malajr ħafna applikazzjonijiet b'arkitetturi kumplessi. Issa se nħarsu lejn eżempju ta 'użu prattiku ta' Docker Compose, li l-analiżi tiegħu tippermettilek tevalwa l-benefiċċji li tagħtik l-użu ta 'Docker Compose.
Immaġina li inti żviluppatur ta 'proġett tal-web. Dan il-proġett jinkludi żewġ websajts. L-ewwel jippermetti lin-nies tan-negozju biex joħolqu ħwienet online bi ftit klikks biss. It-tieni huwa mmirat għall-appoġġ tal-klijent. Dawn iż-żewġ siti jinteraġixxu mal-istess database.
Il-proġett tiegħek qed isir aktar u aktar popolari, u jirriżulta li l-qawwa tas-server li fuqu taħdem m'għadhiex biżżejjed. Bħala riżultat, tiddeċiedi li tmexxi l-proġett kollu għal magna oħra.
Sfortunatament, ma użajtx xi ħaġa bħal Docker Compose. Għalhekk, ser ikollok tittrasferixxi u tikkonfigura s-servizzi wieħed kull darba, bit-tama li ma tinsa xejn fil-proċess.
Jekk tuża Docker Compose, allura ċaqliq il-proġett tiegħek għal server ġdid hija kwistjoni li tista 'tiġi solvuta billi tmexxi ftit kmandi. Sabiex tlesti t-trasferiment tal-proġett għal post ġdid, għandek bżonn biss tagħmel xi settings u ttella 'kopja ta' backup tad-database fuq is-server il-ġdid.
L-iżvilupp ta' applikazzjoni klijent-server bl-użu ta' Docker Compose
Issa li taf għalxiex se nużaw Docker Compose, wasal iż-żmien li toħloq l-ewwel applikazzjoni klijent-server tiegħek billi tuża din l-għodda. Jiġifieri, qed nitkellmu dwar l-iżvilupp ta 'websajt żgħira (server) f'Python li jista' joħroġ fajl bi framment ta 'test. Dan il-fajl huwa mitlub mis-server minn programm (klijent), miktub ukoll f'Python. Wara li jirċievi fajl mis-server, il-programm juri t-test maħżun fih fuq l-iskrin.
Jekk jogħġbok innota li nassumu li għandek fehim bażiku ta 'Docker u li diġà għandek il-pjattaforma Docker installata.
Ejja nibdew naħdmu fuq il-proġett.
▍1. Ħolqien ta 'Proġett
Biex tibni l-ewwel applikazzjoni klijent-server tiegħek, nissuġġerixxi li tibda billi toħloq folder tal-proġett. Għandu jkun fih il-fajls u folders li ġejjin:
- fajl
docker-compose.yml
. Dan huwa fajl Docker Compose li se jkun fih l-istruzzjonijiet meħtieġa biex jibdew u jiġu kkonfigurati s-servizzi. - Folder
server
. Se jkun fih il-fajls meħtieġa biex iżomm is-server jaħdem. - Folder
client
. Il-fajls tal-applikazzjoni tal-klijenti se jkunu jinsabu hawn.
Bħala riżultat, il-kontenut tal-folder prinċipali tal-proġett tiegħek għandu jidher bħal dan:
.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file
▍2. Ħolqien ta' server
Hawnhekk, fil-proċess tal-ħolqien ta 'server, se nmissu xi affarijiet bażiċi dwar Docker.
2a. Ħolqien ta 'fajls
Mur fil-folder server
u oħloq il-fajls li ġejjin fiha:
- fajl
server.py
. Se jkun fih il-kodiċi tas-server. - fajl
index.html
. Dan il-fajl se jkun fih biċċa test li l-applikazzjoni tal-klijent għandha toħroġ. - fajl
Dockerfile
. Dan huwa fajl Docker li se jkun fih l-istruzzjonijiet meħtieġa biex jinħoloq l-ambjent tas-server.
Dan huwa kif għandu jidher il-kontenut tal-folder tiegħek server/
:
.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files
2b. Editjar ta 'fajl Python.
Żid mal-fajl server.py
il-kodiċi li ġej:
#!/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()
Dan il-kodiċi jippermettilek li toħloq web server sempliċi. Huwa se jagħti lill-klijenti l-fajl index.html
, li l-kontenut tiegħu se jintwera aktar tard fuq il-paġna web.
2c. Editjar ta' Fajl HTML
Biex fajl index.html
żid it-test li ġej:
Docker-Compose is magic!
Dan it-test jintbagħat lill-klijent.
2d. Editjar tal-Dockerfile
Issa se noħolqu fajl sempliċi Dockerfile
, li se jkun responsabbli biex jorganizza l-ambjent tar-runtime għas-server Python. Bħala l-bażi għall-immaġni maħluqa, se nużaw
# На всякий случай напоминаю, что 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/
Issa ejja nibdew naħdmu fuq il-klijent.
▍3. Ħolqien ta 'klijent
Filwaqt li noħolqu n-naħa tal-klijent tal-proġett tagħna, aħna se niftakru xi punti bażiċi ta 'Docker tul it-triq.
3a. Ħolqien ta 'fajls
Mur fil-folder tal-proġett tiegħek client
u oħloq il-fajls li ġejjin fiha:
- fajl
client.py
. Il-kodiċi tal-klijent se jkun jinsab hawn. - fajl
Dockerfile
. Dan il-fajl għandu l-istess rwol bħal fajl simili fil-folder tas-server. Jiġifieri, fih struzzjonijiet li jiddeskrivu kif jinħoloq ambjent għall-eżekuzzjoni tal-kodiċi tal-klijent.
Bħala riżultat, folder tiegħek client/
f'dan l-istadju tax-xogħol għandu jidher bħal dan:
.
├── client.py
└── Dockerfile
0 directories, 2 files
3b. Editjar ta 'Python File
Żid mal-fajl client.py
il-kodiċi li ġej:
#!/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()
B'dan il-kodiċi, l-applikazzjoni tal-klijent tista' tniżżel id-dejta mis-server u turiha fuq l-iskrin.
3c. Editjar tal-Dockerfile
Bħal fil-każ tas-server, noħolqu sempliċi Dockerfile
, responsabbli għall-ħolqien tal-ambjent li fih se taħdem l-applikazzjoni tal-klijent Python. Hawn hu l-kodiċi tal-klijent Dockerfile
:
# То же самое, что и в серверном Dockerfile.
FROM python:latest
# Импортируем 'client.py' в папку '/client/'.
ADD client.py /client/
# Устанавливаем в качестве рабочей директории '/client/'.
WORKDIR /client/
▍4. Docker Ikkomponi
Kif forsi innotajt, ħloqna żewġ proġetti differenti: server u klijent. Kull wieħed minnhom għandu l-fajl tiegħu Dockerfile
. S'issa, dak kollu li ġara ma marx lil hinn mill-baŜi tal-ħidma ma' Docker. Issa nibdew b'Docker Compose. Biex tagħmel dan, ejja mmorru għall-fajl docker-compose.yml
, li jinsab fil-folder tal-għeruq tal-proġett.
Jekk jogħġbok innota li hawn mhux qed nippruvaw inkopru assolutament il-kmandi kollha li jistgħu jintużaw fihom docker-compose.yml
. L-għan ewlieni tagħna huwa li nimxu permezz ta 'eżempju prattiku li jagħtik l-għarfien bażiku ta' Docker Compose.
Hawn hu l-kodiċi biex tpoġġi fil-fajl 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. Bini tal-proġett
Wara fi docker-compose.yml
L-istruzzjonijiet kollha meħtieġa ġew imdaħħla, il-proġett jeħtieġ li jiġi mmuntat. Dan il-pass tax-xogħol tagħna huwa simili għall-użu tal-kmand docker build
, iżda l-kmand korrispondenti huwa rilevanti għal diversi servizzi:
$ docker-compose build
▍6. Tnedija tal-proġett
Issa li l-proġett huwa mmuntat, wasal iż-żmien li tniedi. Dan il-pass tax-xogħol tagħna jikkorrispondi għall-pass li fih, meta taħdem ma 'kontenituri individwali, il-kmand jiġi esegwit docker run
:
$ docker-compose up
Wara li tesegwixxi dan il-kmand, it-test imniżżel mill-klijent mis-server għandu jidher fit-terminal: Docker-Compose is magic!
.
Kif diġà ssemma, is-server juża l-port tal-kompjuter 1234
biex taqdi t-talbiet tal-klijenti. Għalhekk, jekk tmur fl-indirizz fil-browser tiegħek Docker-Compose is magic!
.
Kmandi Utli
Ejja nħarsu lejn xi kmandi li tista' ssib utli meta taħdem ma' Docker Compose.
Dan il-kmand jippermettilek tieqaf u tħassar kontenituri u riżorsi oħra maħluqa mill-kmand docker-compose up
:
$ docker-compose down
Dan il-kmand jistampa r-reġistri tas-servizz:
$ docker-compose logs -f [service name]
Per eżempju, fil-proġett tagħna jista 'jintuża f'din il-forma: $ docker-compose logs -f [service name]
.
Billi tuża dan il-kmand tista’ turi lista ta’ kontenituri:
$ docker-compose ps
Dan il-kmand jippermettilek tesegwixxi kmand f'kontenitur li qed jaħdem:
$ docker-compose exec [service name] [command]
Per eżempju, jista 'jidher bħal dan: docker-compose exec server ls
.
Dan il-kmand jippermettilek turi lista ta’ immaġini:
$ docker-compose images
Riżultati ta '
Ħaresna lejn il-baŜi tal-ħidma mat-teknoloġija Docker Compose, li l-għarfien tagħha jippermettilek tuża din it-teknoloġija u, jekk mixtieq, tibda tistudjaha f'aktar fond.
Għeżież qarrejja! Tuża Docker Compose fil-proġetti tiegħek?
Sors: www.habr.com