Docker Compose útmutató kezdőknek

A cikk szerzője, akinek a fordítását ma közöljük, azt mondja, hogy ez a tartalom azoknak a fejlesztőknek készült, akik szeretnék elsajátítani a Docker Compose használatát, és el szeretnék készíteni első kliens-szerver alkalmazásukat Docker segítségével. Feltételezzük, hogy a cikk olvasója ismeri a Docker alapjait. Ha ez nem így van, nézze meg a erre sorozat anyagait, erre a kiadványt, ahol a Docker alapjait a Kubernetes alapjaival együtt tárgyalják, és a erre kezdőknek szóló cikket.

Docker Compose útmutató kezdőknek

Mi az a Docker Compose?

A Docker Compose a Docker részeként működő eszköz. Célja, hogy megkönnyítse a projektek telepítésével kapcsolatos feladatokat.

A Docker alapjainak tanulmányozása során előfordulhat, hogy egyszerű, önállóan működő alkalmazásokat hozott létre, amelyek például nem függenek külső adatforrásoktól vagy egyéb szolgáltatásoktól. A valóságban azonban az ilyen alkalmazások ritkák. A valódi projektek jellemzően több együttműködő alkalmazást foglalnak magukban.

Hogyan tudhatja meg, hogy szüksége van-e a Docker Compose használatára egy projekt telepítésekor? Igazából ez nagyon egyszerű. Ha a projekt működtetéséhez több szolgáltatást használnak, a Docker Compose hasznos lehet. Például, amikor weboldalt készítenek, amelynek a felhasználói hitelesítéshez egy adatbázishoz kell csatlakoznia. Az ilyen projekt lehet két szolgáltatásból álló — az egyik a weboldal működtetését, a másik az adatbázis támogatását végzi.

A Docker Compose technológia, ha egyszerűen kellene leírni, lehetővé teszi, hogy egy parancs segítségével több szolgáltatást indítson el.

A különbség a Docker és a Docker Compose között

A Docker az alkalmazásokat alkotó egyes konténerek (szolgáltatások) kezelésére szolgál.

A Docker Compose egyszerre kezeli az alkalmazás részeként működő több konténert. Ez az eszköz ugyanazokat a lehetőségeket kínálja, mint a Docker, de lehetővé teszi a bonyolultabb alkalmazásokkal való munkát.

Docker Compose útmutató kezdőknek
Docker (egy különálló konténer) és Docker Compose (több konténer)

A Docker Compose tipikus használati forgatókönyve

A Docker Compose a jól felhasználva egy igen erőteljes eszköz, amely lehetővé teszi az összetett architektúrájú alkalmazások rendkívül gyors telepítését. Most egy gyakorlati példát fogunk nézni a Docker Compose használatára, amely lehetővé teszi, hogy felmérje azokat az előnyöket, amelyeket a Docker Compose használata nyújt.

Képzelje el, hogy Ön a fejlesztője egy webprojektnak. A projekt két weboldalt tartalmaz. Az első lehetővé teszi a vállalkozók számára, hogy néhány kattintással internetes boltokat hozzanak létre. A második célja az ügyfélszolgálat támogatása. Ezek a weboldalak ugyanazzal az adatbázissal működnek.

A projektje egyre népszerűbbé válik, és kiderül, hogy a szerver, amelyen fut, már nem elég erős. Ennek következtében úgy dönt, hogy az egész projektet egy másik gépre költözteti.

Sajnos nem használt olyan eszközt, mint a Docker Compose. Így egyesével kell átköltöztetnie és újrakonfigurálnia a szolgáltatásokat, remélve, hogy a munka során semmit sem felejt el el.

Ha azonban a Docker Compose-t használja, akkor a projekt új szerverre költöztetése csupán néhány parancs végrehajtását jelenti. Az új helyre való átköltözés befejezéséhez csak néhány beállítást kell elvégeznie, és fel kell tölteni az új szerverre az adatbázis biztonsági mentését.

Kliens-szerver alkalmazás fejlesztése Docker Compose használatával

Most, hogy tudja, mire fogjuk használni a Docker Compose-t, itt az ideje, hogy létrehozza az első kliens-szerver alkalmazását ezzel az eszközzel. Éppen egy kis weboldal (szerver) fejlesztéséről van szó Python-ban, amely képes fájlokat kiadni szövegrészletekkel. Ezt a fájlt a szerverről kérdezi le egy program (kliens), amely szintén Python-ban íródott. Miután a program megkapta a fájlt a szerverről, kiírja a benne tárolt szöveget a képernyőre.

Kérjük, vegye figyelembe, hogy feltételezzük, hogy alapjaiban ismeri a Dockert, és hogy már telepítve van a Docker platform.

Kezdjük el a projekt munkáját.

▍1. Projekt létrehozása

Ahhoz, hogy felépítse az első kliens-szerver alkalmazását, ajánlom, hogy először hozzon létre egy projektmappát. Ennek tartalmaznia kell a következő fájlokat és mappákat:

  • Fájl docker-compose.ymlEz egy Docker Compose fájl, amely az indításhoz és a szolgáltatások beállításához szükséges utasításokat fog tartalmazni.
  • Mappa serverEz tartalmazni fogja a szerver működéséhez szükséges fájlokat.
  • Mappa clientItt lesznek a kliensalkalmazás fájljai.

Ennek eredményeként a projekt fő mappájának a következőképpen kell kinéznie:

.
├── client/
├── docker-compose.yml
└── server/
2 mappa, 1 fájl

▍2. A szerver létrehozása

A szerver létrehozásakor néhány alapvető dolgot érintünk, amelyek a Dockere vonatkoznak.

2a. Fájlok létrehozása

Nyissa meg a mappát server és hozzon létre benne a következő fájlokat:

  • Fájl server.pyEz fogja tartalmazni a szerver kódját.
  • Fájl index.htmlEbben a fájlban egy szövegrészlet található, amelyet a kliensalkalmazásnak kell kimenetként adnia.
  • Fájl DockerfileEz egy Docker fájl, amely az infrastruktúra létrehozásához szükséges utasításokat fog tartalmazni.

Így kell kinéznie a server/:

.
├── Dockerfile
├── index.html
└── server.py
0 mappa, 3 fájl

2b. A Python fájl szerkesztése.

Adjuk hozzá a fájlhoz a következő kódot: 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. Az ügyfeleknek a index.html, amelynek tartalmát később a weboldalon fogják megjeleníteni.

2c. A HTML fájl szerkesztése

A fájlba index.html adjuk hozzá a következő szöveget:

A Docker-Compose varázslat!

Ezt a szöveget az ügyfélnek fogjuk küldeni.

2d. A Dockerfile szerkesztése

Most egy egyszerű fájlt fogunk létrehozni, Dockerfileamely a Python szerver futtatási környezetének megszervezéséért felelős. Az alapjául a hivatalos képet használjuk,amely a Python programok futtatására lett tervezve. Itt van 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 a kliens munkájával foglalkozunk.

▍3. A kliens létrehozása

A projekt kliensoldali részének elkészítésekor néhány alapelvet felidézünk a Dockerrel kapcsolatban.

3a. Fájlok létrehozása

Nyissa meg a projekt mappáját, client és hozzon létre benne a következő fájlokat:

  • Fájl client.pyEz fogja tartalmazni a kliens kódját.
  • Fájl DockerfileEz a fájl ugyanazt a szerepet tölti be, mint a szerver mappájában lévő hasonló fájl. Nevezetesen, tartalmazza a klienskód futtatási környezetének létrehozására vonatkozó útmutatást.

Így a mappája client/ ebben a munkafázisban a következőképpen kell kinéznie:

.
├── client.py
└── Dockerfile
0 mappa, 2 fájl

3b. A Python fájl szerkesztése

Adjuk hozzá a fájlhoz a következő kódot: 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()

E kód segítségével a kliensalkalmazás képes adatokat betölteni a szerverről és megjeleníteni azokat a képernyőn.

3c. A Dockerfile szerkesztése

Ahogy a szerver esetében, itt is egy egyszerű Dockerfile, amely felelős a környezet létrehozásáért, amiben a kliens Python-alkalmazása működni fog. Íme a kliens kódja Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Ahogy észrevehették, két különböző projektet hoztunk létre: a szervert és a klienst. Mindkettőnek megvan a saját fájlja Dockerfile. Eddig minden, ami történt, a Docker alapvető működésén belül maradt. Most viszont a Docker Compose használatára fordulunk. Ehhez tekintsük meg a fájlt docker-compose.yml, amely a projekt gyökérmappájában található.

Vegyék figyelembe, hogy itt nem arra törekszünk, hogy minden parancsot részletesen áttekintsünk, amelyet használhatunk a docker-compose.yml. Fő célunk egy gyakorlati példa bemutatása, amely alapvető ismereteket ad a Docker Compose-ról.

Íme a kód, amit a fájlba kell helyezni 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 a docker-compose.yml minden szükséges utasítást tartalmaz, a projektet fel kell építeni. Ez a lépés hasonlít a parancs használatára docker build, de a megfelelő parancs több szolgáltatáshoz kapcsolódik:

$ docker-compose build

▍6. A projekt futtatása

Most, hogy a projekt felépült, elérkezett az idő, hogy elindítsuk. Ez a lépés megfelel annak a lépésnek, amikor különálló tartályokkal dolgozva végrehajtjuk a parancsot docker run:

$ docker-compose up

E parancs végrehajtása után a terminálban meg kell jelennie a szerverről letöltött szövegnek: A Docker-Compose varázslat!.

Ahogy már említettük, a szerver a számítógép portját használja 1234 a kliens kéréseinek kiszolgálásához. Ezért, ha a böngészőben a következő címre lépünk: http://localhost:1234/, akkor egy szöveges oldalt fogunk látni A Docker-Compose varázslat!.

Hasznos parancsok

Nézzünk néhány parancsot, amelyek hasznosak lehetnek a Docker Compose használata során.

Ez a parancs lehetővé teszi a konténerek és más erőforrások megállítását és eltávolítását, amelyeket a parancs hozott létre docker-compose up:

$ docker-compose down

Ez a parancs kiírja a szolgáltatások naplóit:

$ docker-compose logs -f [szolgáltatás neve]

Például a projektünkben így használható: $ docker-compose logs -f [szolgáltatás neve].

Ezzel a paranccsal listázhatók a konténerek:

$ docker-compose ps

Ez a parancs lehetővé teszi, hogy parancsot hajtsunk végre a futó konténerben:

$ docker-compose exec [szolgáltatás neve] [parancs]

Például így nézhet ki: docker-compose exec server ls.

Ez a parancs lehetővé teszi, hogy listázzuk az image-okat:

$ docker-compose images

Összegzés

Megvizsgáltuk a Docker Compose alapjait, amelynek ismerete lehetővé teszi, hogy kihasználja ezt a technológiát, és ha szeretné, mélyebben is megismerkedjen vele. Íme a projekt kódjának tárolója, amelyet itt megvizsgáltunk.

Használjátok a CI/CD technológiákat a projektjeitekben? Használja a Docker Compose-t a projektjeiben?

Docker Compose útmutató kezdőknek

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster