A cikk szerzője, amelynek fordítását ma közöljük, azt mondja, hogy azoknak a fejlesztőknek szól, akik szeretnék megtanulni a Docker Compose-t, és az első kliens-szerver alkalmazásuk Docker segítségével történő létrehozása felé haladnak. Feltételezhető, hogy ennek az anyagnak az olvasója ismeri a Docker alapjait. Ha nem ez a helyzet, akkor megnézheti
Mi az a Docker Compose?
A Docker Compose a Dockerhez tartozó eszköz. A projekt telepítésével kapcsolatos problémák megoldására készült.
A Docker alapjainak elsajátítása során előfordulhat, hogy egyszerű alkalmazások létrehozásával találkozhatott, amelyek önállóan működnek, és nem függenek például külső adatforrásoktól vagy bizonyos szolgáltatásoktól. A gyakorlatban az ilyen alkalmazások ritkák. A valódi projektek általában egy sor alkalmazást tartalmaznak együtt.
Honnan tudhatja, hogy szüksége van-e a Docker Compose használatára egy projekt üzembe helyezésekor? Valójában nagyon egyszerű. Ha több szolgáltatást használ a projekt működéséhez, akkor a Docker Compose hasznos lehet. Például olyan helyzetben, amikor létrehoznak egy webhelyet, amelynek csatlakoznia kell egy adatbázishoz a felhasználók hitelesítéséhez. Egy ilyen projekt két szolgáltatásból állhat – az oldal működését biztosító, illetve az adatbázis karbantartásáért felelős szolgáltatásból.
A Docker Compose technológia leegyszerűsítve lehetővé teszi számos szolgáltatás elindítását egyetlen paranccsal.
A Docker és a Docker Compose közötti különbség
A Docker az alkalmazást alkotó egyedi tárolók (szolgáltatások) kezelésére szolgál.
A Docker Compose egy alkalmazást alkotó több tároló egyidejű kezelésére szolgál. Ez az eszköz ugyanazokat a képességeket kínálja, mint a Docker, de lehetővé teszi bonyolultabb alkalmazásokkal való munkát.
Docker (egy konténer) és Docker Compose (több konténer)
A Docker Compose tipikus használati esete
A Docker Compose a megfelelő kezekben egy nagyon hatékony eszköz, amely lehetővé teszi az összetett architektúrájú alkalmazások nagyon gyors üzembe helyezését. Most egy példát tekintünk meg a Docker Compose gyakorlati használatára, amelynek elemzése lehetővé teszi, hogy felmérje, milyen előnyökkel jár a Docker Compose használata.
Képzelje el, hogy Ön egy webprojekt fejlesztője. Ez a projekt két weboldalt tartalmaz. Az első lehetővé teszi az üzletemberek számára, hogy néhány kattintással online üzleteket hozzanak létre. A második az ügyfélszolgálatot célozza. Ez a két webhely ugyanazzal az adatbázissal működik együtt.
A projektje egyre népszerűbb, és kiderült, hogy a futó szerver teljesítménye már nem elég. Ennek eredményeként úgy dönt, hogy a teljes projektet áthelyezi egy másik gépre.
Sajnos nem használtál olyat, mint a Docker Compose. Ezért egyenként kell átvinnie és újrakonfigurálnia a szolgáltatásokat, remélve, hogy közben semmit sem felejt el.
Ha a Docker Compose-t használja, akkor a projekt áthelyezése egy új kiszolgálóra néhány parancs futtatásával megoldható. A projekt új helyre történő átvitelének befejezéséhez csak néhány beállítást kell elvégeznie, és az adatbázis biztonsági másolatát fel kell töltenie az új szerverre.
Kliens-szerver alkalmazás fejlesztése a Docker Compose segítségével
Most, hogy tudja, mire fogjuk használni a Docker Compose-t, ideje létrehozni az első kliens-szerver alkalmazást ezzel az eszközzel. Nevezetesen egy olyan kis webhely (szerver) fejlesztéséről beszélünk Pythonban, amely egy szövegtöredéket tartalmazó fájlt képes kiadni. Ezt a fájlt egy szintén Python nyelven írt program (kliens) kéri a szervertől. A kiszolgálótól kapott fájl fogadása után a program megjeleníti a képernyőn az abban tárolt szöveget.
Felhívjuk figyelmét, hogy feltételezzük, hogy rendelkezik a Docker alapvető ismereteivel, és már telepítette a Docker platformot.
Kezdjünk el dolgozni a projekten.
▍1. Projekt létrehozása
Az első kliens-szerver alkalmazás elkészítéséhez azt javaslom, hogy kezdje egy projektmappa létrehozásával. A következő fájlokat és mappákat kell tartalmaznia:
- fájl
docker-compose.yml
. Ez egy Docker Compose fájl, amely a szolgáltatások indításához és konfigurálásához szükséges utasításokat tartalmazza. - Mappa
server
. Tartalmazza a szerver működéséhez szükséges fájlokat. - Mappa
client
. Az ügyfélalkalmazás fájljai itt találhatók.
Ennek eredményeként a projekt főmappájának a következőképpen kell kinéznie:
.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file
▍2. Szerver létrehozása
Itt a szerver létrehozása során néhány alapvető dolgot érintünk a Dockerrel kapcsolatban.
2a. Fájlok létrehozása
Menjen a mappába server
és hozza létre benne a következő fájlokat:
- fájl
server.py
. Tartalmazza a szerver kódját. - fájl
index.html
. Ez a fájl tartalmaz egy szövegrészt, amelyet az ügyfélalkalmazásnak ki kell adnia. - fájl
Dockerfile
. Ez egy Docker-fájl, amely a kiszolgálókörnyezet létrehozásához szükséges utasításokat tartalmazza.
Így kell kinéznie a mappa tartalmának server/
:
.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files
2b. Python-fájl szerkesztése.
Hozzáadás a fájlhoz server.py
a következő kódot:
#!/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()
Ez a kód lehetővé teszi egy egyszerű webszerver létrehozását. Ő adja át az ügyfeleknek a fájlt index.html
, amelynek tartalma később megjelenik a weboldalon.
2c. HTML fájl szerkesztése
Fájlhoz index.html
add hozzá a következő szöveget:
Docker-Compose is magic!
Ezt a szöveget elküldjük az ügyfélnek.
2d. A Docker-fájl szerkesztése
Most létrehozunk egy egyszerű fájlt Dockerfile
, aki a Python szerver futási környezetének megszervezéséért lesz felelős. A létrehozott kép alapjául ezt fogjuk használni
# На всякий случай напоминаю, что 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/
Most kezdjünk el dolgozni az ügyfélen.
▍3. Ügyfél létrehozása
A projektünk kliens oldalának létrehozásakor emlékezni fogunk néhány Docker alapismeretre.
3a. Fájlok létrehozása
Lépjen a projekt mappájába client
és hozza létre benne a következő fájlokat:
- fájl
client.py
. Az ügyfélkód itt található. - fájl
Dockerfile
. Ez a fájl ugyanazt a szerepet tölti be, mint egy hasonló fájl a szerver mappájában. Nevezetesen olyan utasításokat tartalmaz, amelyek leírják, hogyan lehet létrehozni egy környezetet az ügyfélkód végrehajtásához.
Ennek eredményeként a mappa client/
a munka ezen szakaszában a következőképpen kell kinéznie:
.
├── client.py
└── Dockerfile
0 directories, 2 files
3b. Python-fájl szerkesztése
Hozzáadás a fájlhoz client.py
a következő kódot:
#!/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()
Ezzel a kóddal a kliens alkalmazás adatokat tölthet le a szerverről és megjelenítheti a képernyőn.
3c. A Docker-fájl szerkesztése
Akárcsak a szerver esetében, létrehozunk egy egyszerűt Dockerfile
, amely a Python-kliens alkalmazás futtatásához szükséges környezet létrehozásáért felelős. Itt van a kliens kódja Dockerfile
:
# То же самое, что и в серверном Dockerfile.
FROM python:latest
# Импортируем 'client.py' в папку '/client/'.
ADD client.py /client/
# Устанавливаем в качестве рабочей директории '/client/'.
WORKDIR /client/
▍4. Docker Compose
Amint azt bizonyára észrevette, két különböző projektet hoztunk létre: egy szervert és egy klienst. Mindegyiknek saját fájlja van Dockerfile
. Eddig minden, ami történt, nem ment túl a Dockerrel való munka alapjain. Most kezdjük el a Docker Compose alkalmazást. Ehhez menjünk a fájlhoz docker-compose.yml
, amely a projekt gyökérmappájában található.
Kérjük, vegye figyelembe, hogy itt nem próbáljuk lefedni az összes használható parancsot docker-compose.yml
. Fő célunk egy olyan gyakorlati példa bemutatása, amely megadja a Docker Compose alapvető ismereteit.
Itt van a kód, amelyet be kell helyezni a fájlba 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 projekt felépítése
Miután be docker-compose.yml
Minden szükséges utasítás megadva, a projektet össze kell állítani. Munkánk ezen lépése hasonló a parancs használatához docker build
, de a megfelelő parancs több szolgáltatásra vonatkozik:
$ docker-compose build
▍6. A projekt elindítása
Most, hogy a projekt összeállt, ideje elindítani. Munkánk ezen lépése megfelel annak a lépésnek, amelyben az egyes konténerekkel végzett munka során a parancs végrehajtásra kerül docker run
:
$ docker-compose up
A parancs végrehajtása után a kliens által a szerverről letöltött szövegnek meg kell jelennie a terminálban: Docker-Compose is magic!
.
Mint már említettük, a szerver a számítógép portját használja 1234
az ügyfelek kérésének kiszolgálására. Ezért, ha a böngészőjében a címre lép Docker-Compose is magic!
.
Hasznos parancsok
Nézzünk meg néhány parancsot, amelyeket hasznosnak találhat a Docker Compose használata során.
Ez a parancs lehetővé teszi a parancs által létrehozott tárolók és egyéb erőforrások leállítását és törlését docker-compose up
:
$ docker-compose down
Ez a parancs szolgáltatási naplókat nyomtat:
$ docker-compose logs -f [service name]
Például a mi projektünkben a következő formában használható: $ docker-compose logs -f [service name]
.
Ezzel a paranccsal megjelenítheti a tárolók listáját:
$ docker-compose ps
Ez a parancs lehetővé teszi egy parancs végrehajtását egy futó tárolóban:
$ docker-compose exec [service name] [command]
Például így nézhet ki: docker-compose exec server ls
.
Ez a parancs lehetővé teszi a képek listájának megjelenítését:
$ docker-compose images
Eredményei
Megvizsgáltuk a Docker Compose technológiával való munka alapjait, amelyek ismerete lehetővé teszi a technológia használatát, és ha kívánja, elkezdheti mélyebb tanulmányozását.
Kedves olvasók! Használja a Docker Compose-t a projektjeihez?
Forrás: will.com