Docker Compose'i juhend algajatele

Artikli autor, mille tõlget me täna avaldame, ütleb, et see on mõeldud neile arendajatele, kes soovivad õppida Docker Compose'i ja on teel, et luua oma esimene kliendi-serveri rakendus Dockerit kasutades. Eeldatakse, et selle materjali lugeja on tuttav Dockerite alustega. Kui see pole nii — võite vaadata seda materjalide seeriat, mille kohta seda avaldatud artiklit, kus Dockerite alused on käsitletud koos Kubernetes'i alustega, ja seda artiklit algajatele.

Docker Compose'i juhend algajatele

Mis on Docker Compose?

Docker Compose on tööriist, mis kuulub Dockerisse. See on mõeldud projektide juurutamisega seotud ülesannete lahendamiseks.

Dockerit aluseid õppides võite kohtuda lihtsate rakenduste loomisega, mis töötavad iseseisvalt, sõltumatult näiteks välistest andmeallikatest või teatud teenustest. Praktikas on sellised rakendused haruldased. Reaalsed projektid sisaldavad tavaliselt terve komplekti koos töötavaid rakendusi.

Kuidas teada, kas teil on vaja projektide juurutamisel kasutada Docker Compose'i? Tegelikult on see väga lihtne. Kui selle projekti toimimiseks kasutatakse mitmeid teenuseid, siis võib Docker Compose teile kasuks tulla. Näiteks olukorras, kus luuakse veebisait, mis vajab kasutajate autentimiseks andmebaasi ühendust. Selline projekt võib koosneda kahest teenusest — ühest, mis tagab saidi toimimise, ja teisest, mis vastutab andmebaasi toe eest.

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

Erinevus Docker'i ja Docker Compose'i vahel

Dockerit kasutatakse üksikute konteinerite (teenuste) haldamiseks, millest rakendus koosneb.

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

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

Tüüpiline kasutusjuht Docker Compose'i jaoks

Docker Compose on oskab kodu käes, on tõeliselt võimas tööriist, mis võimaldab äärmiselt kiiresti juurutada rakendusi, millel on keeruline arhitektuur. Vaadakem nüüd ühte praktilise kasutuse näidet Docker Compose'i kasutamisest, mille analüüs aitab teil hinnata neid eeliseid, mida Docker Compose'i kasutamine teile toob.

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

Teie projekt muutub üha populaarsemaks ja selgub, et serverivõimsus, millel see töötab, ei ole enam piisav. Seetõttu otsustate kogu projekti teisele masinale üle viia.

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

Kui aga kasutate Docker Compose'i, siis teie projekti üleviimine uuele serverile on küsimus, mille lahendamiseks piisab vaid mõne käsu täitmisest. Projekti uude kohta viimise lõpetamiseks peate tegema vaid mõned seaded ja üles laadima uuele serverile andmebaasi varukoopia.

Kliendiserveri rakenduse arendamine Docker Compose'i abil

Nüüd, kui teate, milleks me plaanime Docker Compose'i kasutada, on aeg luua oma esimene kliendiserveri rakendus selle tööriista abil. Täpsemalt räägime me väikese veebilehe (serveri) arendamisest Pythonis, mis oskab edastada faili tekstilõikega. Selle faili küsib serverilt programm (klient), mis on samuti kirjutatud Pythonis. Pärast faili saamist serverilt kuvab programm selles olevat teksti ekraanil.

Pange tähele, et eeldame, et omate põhiteadmisi Dockeri osas ja et teil on juba Docker platvorm installitud.

Alustame projekti kallal töötamist.

▍1. Projekti loomine

Kuna soovite luua oma esimest kliendiserveri rakendust, soovitan alustada projekti kausta loomisega. See peaks sisaldama järgmisi faile ja kaustu:

  • Fail docker-compose.ymlSee on Docker Compose fail, mis sisaldab vajalikke juhiseid teenuste käivitamiseks ja seadistamiseks.
  • Kaust serverSee sisaldab serveri töös hoidmiseks vajalikke faile.
  • Kaust clientSiia tulevad kliendirakenduse failid.

Seetõttu peaks teie projekti põhikausta sisu välja nägema järgmiselt:

.
├── client/
├── docker-compose.yml
└── server/
2 kausta, 1 fail

▍2. Serveri loomine

Serveri loomise käigus käsitleme mõned põhipunktid, mis on seotud Dockeriga.

2a. Failide loomine

Minge kausta server ja looge seal järgmised failid:

  • Fail server.pySee sisaldab serveri koodi.
  • Fail index.htmlSelles failis on tekstifragmendi, mis peab kliendirakendusele väljundit andma.
  • Fail DockerfileSee on Docker fail, mis sisaldab serveri keskkonna loomise juhiseid.

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

.
├── Dockerfile
├── index.html
└── server.py
0 kausta, 3 faili

2b. Python-faili redigeerimine.

Lisame faili server.py järgmise koodi:

#!/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 luua lihtsa veebiserveri. See edastab klientidele faili index.html, mille sisu kuvatakse hiljem veebilehel.

2c. HTML-faili redigeerimine

Faili index.html lisame järgmise teksti:

Docker-Compose on maagia!

See tekst saadetakse kliendile.

2d. Dockerfile'i redigeerimine

Nüüd loome lihtsa faili Dockerfile, mis vastutab Python-serveri käitamise keskkonna organiseerimise eest. Aluseks võtta ametlikku pilti, mis on mõeldud Pythoniga kirjutatud programmide käitamiseks. Aquí son Dockerfile 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 liigume kliendi poole töötamise juurde.

▍3. Kliendi loomine

Kliendi osa loomise käigus värskendame teatud põhimõtteid Dockerist.

3a. Failide loomine

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

  • Fail client.py. Siia tuleb kliendi kood.
  • Fail Dockerfile. See fail täidab sama ülesannet nagu sarnane fail serveri kaustas. Täpsemalt öeldes sisaldab see juhiseid, mis kirjeldavad keskkonna loomist kliendi koodi käitamiseks.

Seetõttu peaks teie kausta client/ selle tööfaasi lõikes välja nägema järgmiselt:

.
├── client.py
└── Dockerfile
0 kausta, 2 faili

3b. Python-faili redigeerimine

Lisame faili client.py järgmise koodi:

#!/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 suudab kliendirakendus andmeid serverist alla laadida ja neid ekraanile kuvada.

3c. Dockerfile'i redigeerimine

Nagu serveri puhul loome ka kliendile lihtsa Dockerfile, mis vastutab keskkonna loomise eest, kus kliendi Python-rakendus töötab. Siin on kliendi kood Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Kuidas olete võinud märgata, oleme loonud kaks erinevat projekti: serveri ja kliendi. Igal neist on oma fail Dockerfile. Siiani ei ole kõik toimingud läinud väljapoole Dockeriga töötamise põhitõdesid. Nüüd liikume Docker Compose'i kasutamise juurde. Selleks vaatame faili docker-compose.yml, mis asub projekti juurkataloogis.

Pange tähele, et me ei püüa siin käsitleda kõiki käske, mida saab kasutada docker-compose.yml. Meie peamine eesmärk on arutada praktilist näidet, mis annab teile põhiteadmised Docker Compose'i kohta.

Siin on kood, mis tuleb faili panna 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 koostamine

Pärast seda, kui failis docker-compose.yml on kõik vajalikud juhised, tuleb projekt koostada. See samm meie töös sarnaneb käsu kasutamisega docker build, kuid vastav käsk on seotud mitme teenusega:

$ docker-compose build

▍6. Projekti käivitamine

Nüüd, kui projekt on kokku pandud, on aeg see käivitada. See samm meie töös vastab sammule, mille ajal, töötades eraldi konteineritega, käiakse käsku docker run:

$ docker-compose up

Pärast selle käsu täitmist peaks terminalis ilmuma tekst, mille klient on serverilt laadinud: Docker-Compose on maagia!.

Nagu juba mainitud, kasutab server arvuti porti 1234 kliendi päringute teenindamiseks. Seetõttu, kui avate brauseris aadressi http://localhost:1234/, kuvab see lehe tekstiga Docker-Compose on maagia!.

Kasulikud käsud

Vaadakem mõningaid käske, mis võivad teile olla kasulikud Docker Compose'iga töötamisel.

See käsk võimaldab peatada ja eemaldada konteinerid ning muud ressursid, mille on loonud käsk docker-compose up:

$ docker-compose down

See käsk kuvab teenuste logid:

$ docker-compose logs -f [teenuse nimi]

Näiteks meie projektis saab seda kasutada järgmiselt: $ docker-compose logs -f [teenuse nimi].

Selle käsuga saad kuvada konteinerite loendi:

$ docker-compose ps

See käsk võimaldab täita käsu töötavas konteineris:

$ docker-compose exec [teenuse nimi] [käsk]

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

See käsk võimaldab kuvada piltide loendi:

$ docker-compose images

Summary

Me oleme vaadanud Docker Compose'i tehnoloogia põhialuseid, mille tundmine võimaldab teil seda tehnoloogiat kasutada ja soovi korral sügavamalt uurida. Siin projekti koodideposiit, mida me siin käsitlesime.

Lugupeetud lugejad! Kas te kasutate Docker Compose'i oma projektides?

Docker Compose'i juhend algajatele

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster