Docker Compose'i juhend algajatele

Artikli, mille tõlke täna avaldame, autor ütleb, et see on mõeldud neile arendajatele, kes soovivad õppida Docker Compose’i ja liiguvad Dockeri abil oma esimese klient-serveri rakenduse loomise poole. Eeldatakse, et selle materjali lugeja tunneb Dockeri põhitõdesid. Kui see nii ei ole, võite vaadata see materjalide seeria kohta see postitus, mis hõlmab Dockeri põhitõdesid koos Kubernetese põhitõdedega ja see artikkel algajatele.

Docker Compose'i juhend algajatele

Mis on Docker Compose?

Docker Compose on Dockeriga kaasas olev tööriist. See on mõeldud projekti juurutamisega seotud probleemide lahendamiseks.

Dockeri põhitõdesid õppides võisite kokku puutuda lihtsate rakenduste loomisega, mis töötavad iseseisvalt ja ei sõltu näiteks välistest andmeallikatest või teatud teenustest. Praktikas on sellised rakendused haruldased. Pärisprojektid hõlmavad tavaliselt tervet komplekti rakendusi, mis töötavad koos.

Kuidas teada saada, kas peate projekti juurutamisel kasutama Docker Compose'i? See on tegelikult väga lihtne. Kui kasutate selle projekti toimimiseks mitut teenust, võib Docker Compose olla kasulik. Näiteks olukorras, kus nad loovad veebisaidi, mis peab kasutajate autentimiseks looma ühenduse andmebaasiga. Selline projekt võib koosneda kahest teenusest - sellest, mis tagab saidi toimimise, ja sellest, mis vastutab andmebaasi haldamise eest.

Docker Compose'i tehnoloogia, kui seda lihtsustatult kirjeldada, võimaldab käivitada palju teenuseid ühe käsuga.

Erinevus Dockeri ja Docker Compose'i vahel

Dockerit kasutatakse rakenduse moodustavate üksikute konteinerite (teenuste) haldamiseks.

Docker Compose'i kasutatakse mitme rakenduse moodustava konteineri samaaegseks haldamiseks. See tööriist pakub samu võimalusi nagu Docker, kuid võimaldab töötada keerukamate rakendustega.

Docker Compose'i juhend algajatele
Docker (üks konteiner) ja Docker Compose (mitu konteinerit)

Docker Compose'i tüüpiline kasutusjuht

Docker Compose on õigetes kätes väga võimas tööriist, mis võimaldab väga kiiresti juurutada keeruka arhitektuuriga rakendusi. Nüüd vaatame Docker Compose'i praktilise kasutamise näidet, mille analüüs võimaldab teil hinnata Docker Compose'i kasutamise eeliseid.

Kujutage ette, et olete veebiprojekti arendaja. See projekt sisaldab kahte veebisaiti. Esimene võimaldab ärimeestel luua veebipoode vaid mõne klõpsuga. Teine on suunatud klienditoele. Need kaks saiti suhtlevad sama andmebaasiga.

Teie projekt muutub üha populaarsemaks ja selgub, et selle serveri võimsusest, millel see töötab, ei piisa enam. Selle tulemusena otsustate kogu projekti teise masinasse teisaldada.

Kahjuks ei kasutanud te midagi sellist nagu Docker Compose. Seetõttu peate teenuseid ükshaaval üle kandma ja ümber seadistama, lootes, et te ei unusta selle käigus midagi.

Kui kasutate Docker Compose'i, on projekti teisaldamine uude serverisse probleem, mille saab lahendada mõne käsu käivitamisega. Projekti uude asukohta üleviimise lõpuleviimiseks tuleb teha vaid mõned seadistused ja laadida andmebaasi varukoopia uude serverisse.

Klient-serveri rakenduse arendamine Docker Compose'i abil

Nüüd, kui teate, milleks me Docker Compose'i kasutama hakkame, on aeg luua selle tööriista abil oma esimene klient-serveri rakendus. Nimelt räägime Pythonis väikese veebilehe (serveri) arendamisest, mis suudab väljastada faili koos tekstifragmendiga. Seda faili küsib serverist programm (klient), mis on samuti kirjutatud Pythonis. Pärast faili saamist serverist kuvab programm ekraanil sellesse salvestatud teksti.

Pange tähele, et eeldame, et teil on Dockeri põhiteadmised ja teile on juba installitud Dockeri platvorm.

Alustame projekti kallal töötamist.

▍1. Projekti loomine

Esimese klient-serveri rakenduse loomiseks soovitan teil alustada projekti kausta loomisest. See peaks sisaldama järgmisi faile ja kaustu:

  • fail docker-compose.yml. See on Docker Compose'i fail, mis sisaldab teenuste käivitamiseks ja konfigureerimiseks vajalikke juhiseid.
  • Kaust server. See sisaldab faile, mis on vajalikud serveri töös hoidmiseks.
  • Kaust client. Kliendirakenduste failid asuvad siin.

Selle tulemusena peaks teie projekti põhikausta sisu välja nägema järgmine:

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

▍2. Serveri loomine

Siin puudutame serveri loomise käigus mõningaid Dockeri põhiasju.

2a. Failide loomine

Minge kausta server ja looge selles järgmised failid:

  • fail server.py. See sisaldab serveri koodi.
  • fail index.html. See fail sisaldab tekstiosa, mille klientrakendus peaks väljastama.
  • fail Dockerfile. See on Dockeri fail, mis sisaldab serverikeskkonna loomiseks vajalikke juhiseid.

Selline peaks teie kausta sisu välja nägema server/:

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

2b. Pythoni faili redigeerimine.

Lisa faili server.py järgmine kood:

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

See kood võimaldab teil luua lihtsa veebiserveri. Ta annab klientidele faili index.html, mille sisu kuvatakse hiljem veebilehel.

2c. HTML-faili redigeerimine

Viilima index.html lisage järgmine tekst:

Docker-Compose is magic!

See tekst saadetakse kliendile.

2d. Dockeri faili redigeerimine

Nüüd loome lihtsa faili Dockerfile, kes vastutab Pythoni serveri käituskeskkonna korraldamise eest. Loodud pildi aluseks võtame ametlikul viisil, mis on mõeldud Pythonis kirjutatud programmide käitamiseks. Siin on Dockeri faili sisu:

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

Nüüd alustame tööd kliendiga.

▍3. Kliendi loomine

Oma projekti kliendipoolt luues jätame selle käigus meelde mõningaid Dockeri põhitõdesid.

3a. Failide loomine

Minge oma projekti kausta client ja looge selles järgmised failid:

  • fail client.py. Kliendikood asub siin.
  • fail Dockerfile. See fail mängib sama rolli kui sarnane fail serveri kaustas. Nimelt sisaldab see juhiseid, mis kirjeldavad, kuidas luua keskkonda kliendikoodi täitmiseks.

Selle tulemusena teie kaust client/ selles tööetapis peaks see välja nägema järgmine:

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

3b. Pythoni faili redigeerimine

Lisa faili client.py järgmine kood:

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

Selle koodi abil saab klientrakendus andmeid serverist alla laadida ja neid ekraanil kuvada.

3c. Dockeri faili redigeerimine

Nagu serveri puhul, loome lihtsa Dockerfile, vastutab keskkonna loomise eest, milles Pythoni kliendirakendus töötab. Siin on kliendi kood Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Nagu olete ehk märganud, lõime kaks erinevat projekti: serveri ja kliendi. Igal neist on oma fail Dockerfile. Seni pole kõik juhtunu Dockeriga töötamise põhitõdedest kaugemale jõudnud. Nüüd alustame Docker Compose'iga. Selleks läheme faili juurde docker-compose.yml, mis asub projekti juurkaustas.

Pange tähele, et siin ei püüa me hõlmata absoluutselt kõiki käske, mida saab kasutada docker-compose.yml. Meie peamine eesmärk on läbi viia praktiline näide, mis annab teile Docker Compose'i põhiteadmised.

Siin on kood, mis faili lisada 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. Projekti ehitamine

Pärast sisse docker-compose.yml Kõik vajalikud juhised on sisestatud, projekt vajab komplekteerimist. See meie töö etapp sarnaneb käsu kasutamisega docker build, kuid vastav käsk on asjakohane mitme teenuse jaoks:

$ docker-compose build

▍6. Projekti käivitamine

Nüüd, kui projekt on kokku pandud, on aeg see käivitada. See meie töö etapp vastab etapile, kus üksikute konteineritega töötamisel täidetakse käsk docker run:

$ docker-compose up

Pärast selle käsu täitmist peaks terminalis ilmuma kliendi poolt serverist alla laaditud tekst: Docker-Compose is magic!.

Nagu juba mainitud, kasutab server arvutiporti 1234 kliendi soovide rahuldamiseks. Seega, kui lähete oma brauseris aadressile http://localhost:1234/, kuvab see tekstiga lehe Docker-Compose is magic!.

Kasulikud käsud

Vaatame mõningaid käske, mis võivad Docker Compose'iga töötamisel kasulikuks osutuda.

See käsk võimaldab teil peatada ja kustutada käsuga loodud konteinerid ja muud ressursid docker-compose up:

$ docker-compose down

See käsk prindib teenuselogid:

$ docker-compose logs -f [service name]

Näiteks meie projektis saab seda kasutada järgmisel kujul: $ docker-compose logs -f [service name].

Selle käsu abil saate kuvada konteinerite loendi:

$ docker-compose ps

See käsk võimaldab teil käivitatavas konteineris käsu käivitada:

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

Näiteks võib see välja näha selline: docker-compose exec server ls.

See käsk võimaldab teil kuvada piltide loendi:

$ docker-compose images

Tulemused

Oleme tutvunud Docker Compose tehnoloogiaga töötamise põhitõdedega, mille tundmine võimaldab seda tehnoloogiat kasutada ja soovi korral seda põhjalikumalt uurida. siin on hoidla selle projekti koodiga, mida siin vaatlesime.

Kallid lugejad! Kas kasutate oma projektides Docker Compose'i?

Docker Compose'i juhend algajatele

Allikas: www.habr.com

Lisa kommentaar