Docker Compose Guide pro začátečníky

Autor článku, který dnes publikujeme, říká, že je určen pro ty vývojáře, kteří se chtějí naučit Docker Compose a jsou na cestě k vytvoření své první klient-server aplikace pomocí Dockeru. Předpokládá se, že čtenář tohoto materiálu je obeznámen se základy Dockeru. Pokud tomu tak není, můžete se podívat tento série materiálů tento příspěvek týkající se základů Dockeru spolu se základy Kubernetes a tento článek pro začátečníky.

Docker Compose Guide pro začátečníky

Co je to Docker Compose?

Docker Compose je nástroj, který je součástí Dockeru. Je určen k řešení problémů souvisejících s nasazením projektů.

Při učení základů Dockeru jste mohli narazit na tvorbu těch nejjednodušších aplikací, které fungují autonomně, nezávisí například na externích zdrojích dat nebo na určitých službách. V praxi jsou takové aplikace vzácné. Skutečné projekty obvykle zahrnují celou sadu aplikací pro spolupráci.

Jak poznáte, že při nasazování projektu potřebujete použít Docker Compose? Ve skutečnosti je to velmi jednoduché. Pokud ke spuštění tohoto projektu používáte více služeb, může se vám hodit Docker Compose. Například v situaci, kdy vytvoříte webovou stránku, která se k provedení autentizace uživatele potřebuje připojit k databázi. Takový projekt se může skládat ze dvou služeb – jedné, která zajišťuje provoz webu, a druhé, která je zodpovědná za podporu databáze.

Technologie Docker Compose, pokud ji popíšete zjednodušeně, umožňuje spouštět mnoho služeb jediným příkazem.

Rozdíl mezi Docker a Docker Compose

Docker slouží ke správě jednotlivých kontejnerů (služeb), které tvoří aplikaci.

Docker Compose se používá ke správě více kontejnerů, které jsou součástí aplikace současně. Tento nástroj nabízí stejné funkce jako Docker, ale umožňuje pracovat se složitějšími aplikacemi.

Docker Compose Guide pro začátečníky
Docker (jeden kontejner) a Docker Compose (více kontejnerů)

Typický případ použití Docker Compose

Docker Compose je ve správných rukou velmi výkonný nástroj, který vám umožní rychle nasadit aplikace se složitou architekturou. Nyní se podíváme na příklad praktického použití Docker Compose, jehož rozbor vám umožní vyhodnotit výhody, které vám používání Docker Compose poskytne.

Představte si, že jste vývojářem webového projektu. Tento projekt zahrnuje dvě webové stránky. První umožňuje podnikatelům vytvářet pomocí několika kliknutí online obchody. Druhý je zaměřen na zákaznickou podporu. Tyto dva weby spolupracují se stejnou databází.

Váš projekt je stále populárnější a ukazuje se, že kapacita serveru, na kterém funguje, již nestačí. V důsledku toho se rozhodnete přenést celý projekt na jiný stroj.

Bohužel jste nepoužili něco jako Docker Compose. Proto budete muset migrovat a překonfigurovat služby jednu po druhé a doufat, že v procesu této práce na nic nezapomenete.

Pokud používáte Docker Compose, pak je migrace projektu na nový server problém, který lze vyřešit spuštěním několika příkazů. K dokončení přenosu projektu do nového umístění stačí provést některá nastavení a nahrát záložní kopii databáze na nový server.

Vývoj aplikace klient-server pomocí Docker Compose

Nyní, když víte, k čemu Docker Compose budeme používat, je čas vytvořit svou první klient/server aplikaci pomocí tohoto nástroje. Konkrétně mluvíme o vývoji malého webu (serveru) v Pythonu, který dokáže vytvořit soubor s textovým fragmentem. Tento soubor vyžaduje ze serveru program (klient), rovněž napsaný v Pythonu. Po přijetí souboru ze serveru program zobrazí text v něm uložený na obrazovce.

Vezměte prosím na vědomí, že předpokládáme, že máte základy Dockeru a že již máte nainstalovanou platformu Docker.

Začněme pracovat na projektu.

▍1. Vytvořte projekt

Chcete-li vytvořit svou první aplikaci klient/server, doporučuji vám začít vytvořením složky projektu. Měl by obsahovat následující soubory a složky:

  • Soubor docker-compose.yml. Toto je soubor Docker Compose, který bude obsahovat pokyny potřebné ke spuštění a konfiguraci služeb.
  • Desky server. Bude obsahovat soubory nezbytné pro fungování serveru.
  • Desky client. Zde budou umístěny soubory klientské aplikace.

V důsledku toho by obsah hlavní složky vašeho projektu měl vypadat takto:

.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file

▍2. Vytvoření serveru

Zde se v procesu vytváření serveru dotkneme některých základních věcí týkajících se Dockeru.

2a. Vytváření souborů

Přejít do složky server a vytvořte v něm následující soubory:

  • Soubor server.py. Bude obsahovat kód serveru.
  • Soubor index.html. Tento soubor bude obsahovat část textu, který by měla klientská aplikace zobrazit.
  • Soubor Dockerfile. Toto je soubor Docker, který bude obsahovat pokyny potřebné k vytvoření prostředí serveru.

Takto by měl vypadat obsah vaší složky server/:

.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files

2b. Úprava souboru Python.

Přidat do souboru server.py následující kód:

#!/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()

Tento kód vám umožňuje vytvořit jednoduchý webový server. Klientům dá soubor index.html, jehož obsah se později zobrazí na webové stránce.

2c. Úprava souboru HTML

Do souboru index.html přidat následující text:

Docker-Compose is magic!

Tento text bude zaslán klientovi.

2d. Úprava souboru Dockerfile

Nyní vytvoříme jednoduchý soubor Dockerfile, která bude zodpovědná za organizaci běhového prostředí pro server Python. Jako základ vytvořeného obrázku použijeme oficiálně, navržený pro spouštění programů napsaných v Pythonu. Zde je obsah souboru Dockerfile:

# На всякий случай напоминаю, что 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/

Nyní pojďme pracovat na klientovi.

▍3. Vytvořte klienta

Při vytváření klientské strany našeho projektu si připomeneme některé základy Dockeru.

3a. Vytváření souborů

Přejděte do složky projektu client a vytvořte v něm následující soubory:

  • Soubor client.py. Zde bude klientský kód.
  • Soubor Dockerfile. Tento soubor hraje stejnou roli jako podobný soubor ve složce serveru. Konkrétně obsahuje příkaz, který popisuje, jak vytvořit prostředí pro provádění klientského kódu.

V důsledku toho vaše složka client/ V této fázi by to mělo vypadat takto:

.
├── client.py
└── Dockerfile
0 directories, 2 files

3b. Úprava souboru Python

Přidat do souboru client.py následující kód:

#!/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()

Díky tomuto kódu může klientská aplikace stahovat data ze serveru a zobrazovat je na obrazovce.

3c. Úprava souboru Dockerfile

Stejně jako v případě serveru vytvoříme pro klienta jednoduché Dockerfile, zodpovědný za utváření prostředí, ve kterém poběží klientská aplikace Python. Zde je klientský kód Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Jak vidíte, vytvořili jsme dva různé projekty: server a klient. Každý z nich má svůj vlastní soubor Dockerfile. Zatím vše, co se děje, nepřekračuje základy práce s Dockerem. Nyní se pustíme do práce s Docker Compose. Chcete-li to provést, přejděte do souboru docker-compose.ymlumístěný v kořenové složce projektu.

Upozorňujeme, že zde nemáme za cíl pokrýt absolutně všechny příkazy, které lze použít docker-compose.yml. Naším hlavním cílem je rozebrat praktický příklad, který vám poskytne základní znalosti Docker Compose.

Zde je kód, který se má vložit do souboru 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. Sestavení projektu

Po vstupu docker-compose.yml byly provedeny všechny potřebné pokyny, je třeba sestavit projekt. Tento krok naší práce připomíná použití příkazu docker build, ale odpovídající příkaz souvisí s několika službami:

$ docker-compose build

▍6. Zahájení projektu

Nyní, když je projekt postaven, je čas jej spustit. Tento krok naší práce odpovídá kroku, ve kterém se při práci s jednotlivými kontejnery provádí příkaz docker run:

$ docker-compose up

Po provedení tohoto příkazu by se v terminálu měl objevit text načtený klientem ze serveru: Docker-Compose is magic!.

Jak již bylo zmíněno, server používá port počítače 1234 obsluhovat požadavky zákazníků. Pokud tedy půjdete v prohlížeči na adresu http://localhost:1234/, zobrazí se stránka s textem Docker-Compose is magic!.

Užitečné příkazy

Pojďme se podívat na některé příkazy, které se vám mohou hodit při práci s Docker Compose.

Tento příkaz vám umožňuje zastavit a odstranit kontejnery a další prostředky vytvořené příkazem docker-compose up:

$ docker-compose down

Tento příkaz vytiskne protokoly služeb:

$ docker-compose logs -f [service name]

Například v našem projektu jej lze použít v této podobě: $ docker-compose logs -f [service name].

Pomocí tohoto příkazu můžete zobrazit seznam kontejnerů:

$ docker-compose ps

Tento příkaz umožňuje provést příkaz ve spuštěném kontejneru:

$ docker-compose exec [service name] [command]

Může to vypadat například takto: docker-compose exec server ls.

Tento příkaz umožňuje zobrazit seznam obrázků:

$ docker-compose images

Výsledky

Probrali jsme základy práce s technologií Docker Compose, jejíž znalost vám umožní tuto technologii používat a v případě potřeby ji začít studovat hlouběji. zde je úložiště s kódem projektu, který jsme zde uvažovali.

Vážení čtenáři! Používáte ve svých projektech Docker Compose?

Docker Compose Guide pro začátečníky

Zdroj: www.habr.com

Přidat komentář