Útmutató kezdőknek a Docker Compose használatához

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 ezt anyagok sorozata on ezt bejegyzés, amely a Docker alapjait, valamint a Kubernetes alapjait tartalmazza, és ezt cikk kezdőknek.

Útmutató kezdőknek a Docker Compose használatához

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.

Útmutató kezdőknek a Docker Compose használatához
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 hivatalosanPythonban írt programok futtatására készült. Íme a Dockerfile tartalma:

# На всякий случай напоминаю, что 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 http://localhost:1234/, akkor megjelenik egy szöveges oldal 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. Itt egy adattár az itt megnézett projekt kódjával.

Kedves olvasók! Használja a Docker Compose-t a projektjeihez?

Útmutató kezdőknek a Docker Compose használatához

Forrás: will.com

Hozzászólás