Docker Compose -opas aloittelijoille

Tänään julkaisemamme artikkelin kirjoittaja kertoo, että se on tarkoitettu niille kehittäjille, jotka haluavat oppia Docker Composea ja ovat matkalla luomaan ensimmäistä asiakaspalvelinsovellustaan ​​Dockerin avulla. Tämän materiaalin lukijan oletetaan tuntevan Dockerin perusteet. Jos näin ei ole, voit katsoa tämä sarja materiaaleja tämä postaus, joka kattaa Dockerin perusteet sekä Kubernetesin perusteet, ja tämä artikkeli aloittelijoille.

Docker Compose -opas aloittelijoille

Mikä on Docker Compose?

Docker Compose on Dockerin mukana tuleva työkalu. Se on suunniteltu ratkaisemaan projektin käyttöönottoon liittyviä ongelmia.

Opitessasi Dockerin perusteita olet saattanut kohdata yksinkertaisten sovellusten luomisen, jotka toimivat itsenäisesti eivätkä ole riippuvaisia ​​esimerkiksi ulkoisista tietolähteistä tai tietyistä palveluista. Käytännössä tällaiset sovellukset ovat harvinaisia. Todellisiin hankkeisiin liittyy yleensä koko joukko sovelluksia, jotka toimivat yhdessä.

Mistä tiedät, että sinun on käytettävä Docker Composea projektin käyttöönotossa? Itse asiassa se on hyvin yksinkertaista. Jos käytät useita palveluita tämän projektin suorittamiseen, Docker Compose voi olla hyödyllinen. Esimerkiksi tilanteessa, jossa luot verkkosivuston, joka käyttäjän todennuksen suorittamiseksi tarvitsee yhteyden tietokantaan. Tällainen projekti voi koostua kahdesta palvelusta - toinen, joka varmistaa sivuston toiminnan ja toinen, joka vastaa tietokannan tukemisesta.

Docker Compose -tekniikan avulla voit käynnistää useita palveluita yhdellä komennolla, kun sitä kuvataan yksinkertaistetusti.

Ero Dockerin ja Docker Composen välillä

Dockeria käytetään yksittäisten säiliöiden (palveluiden) hallintaan, jotka muodostavat sovelluksen.

Docker Composea käytetään useiden sovelluksen osana olevien säiliöiden hallintaan samanaikaisesti. Tämä työkalu tarjoaa samat ominaisuudet kuin Docker, mutta voit työskennellä monimutkaisempien sovellusten kanssa.

Docker Compose -opas aloittelijoille
Docker (yksi kontti) ja Docker Compose (useita säiliöitä)

Tyypillinen käyttötapaus Docker Composelle

Docker Compose on oikeissa käsissä erittäin tehokas työkalu, jonka avulla voit ottaa nopeasti käyttöön sovelluksia monimutkaisilla arkkitehtuureilla. Nyt tarkastellaan esimerkkiä Docker Composen käytännön käytöstä, jonka analyysin avulla voit arvioida Docker Composen käytön tuomia etuja.

Kuvittele, että olet verkkoprojektin kehittäjä. Tämä projekti sisältää kaksi verkkosivustoa. Ensimmäisen avulla liikemiehet voivat luoda verkkokauppoja muutamalla napsautuksella. Toinen on tarkoitettu asiakastukeen. Nämä kaksi sivustoa ovat vuorovaikutuksessa saman tietokannan kanssa.

Projektistasi on tulossa yhä suositumpi, ja käy ilmi, että sen palvelimen teho, jolla se toimii, ei enää riitä. Tämän seurauksena päätät siirtää koko projektin toiselle koneelle.

Valitettavasti et ole käyttänyt jotain Docker Composen kaltaista. Siksi sinun on siirrettävä ja määritettävä palvelut uudelleen yksi kerrallaan toivoen, että et unohda mitään tämän työn aikana.

Jos käytät Docker Composea, projektin siirtäminen uudelle palvelimelle on ongelma, joka voidaan ratkaista suorittamalla muutama komento. Jotta projektin siirto uuteen paikkaan voidaan suorittaa loppuun, sinun tarvitsee vain tehdä joitain asetuksia ja ladata tietokannan varmuuskopio uudelle palvelimelle.

Asiakas-palvelinsovelluksen kehittäminen Docker Composella

Nyt kun tiedät, mihin Docker Composea aiomme käyttää, on aika luoda ensimmäinen asiakaspalvelinsovelluksesi tällä työkalulla. Puhumme nimittäin pienen verkkosivuston (palvelimen) kehittämisestä Pythonissa, joka voi tulostaa tiedoston, jossa on tekstikatkelma. Tätä tiedostoa pyytää palvelimelta ohjelma (asiakas), joka on myös kirjoitettu Pythonilla. Vastaanotettuaan tiedoston palvelimelta ohjelma näyttää siihen tallennetun tekstin näytöllä.

Huomaa, että oletamme, että sinulla on perustiedot Dockerista ja että sinulla on jo asennettu Docker-alusta.

Aloitetaan työstäminen projektin parissa.

▍1. Luo projekti

Ensimmäisen asiakaspalvelinsovelluksesi rakentamiseksi suosittelen, että aloitat luomalla projektikansion. Sen pitäisi sisältää seuraavat tiedostot ja kansiot:

  • tiedosto docker-compose.yml. Tämä on Docker Compose -tiedosto, joka sisältää ohjeet, joita tarvitaan palveluiden käynnistämiseen ja määrittämiseen.
  • Kansio server. Se sisältää tiedostot, joita tarvitaan palvelimen toimintaan.
  • Kansio client. Tämä on paikka, jossa asiakassovellustiedostot sijaitsevat.

Tämän seurauksena projektisi pääkansion sisällön pitäisi näyttää tältä:

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

▍2. Palvelimen luominen

Tässä palvelinta luotaessa käsittelemme joitain Dockerin perusasioita.

2a. Tiedostojen luominen

Siirry kansioon server ja luo siihen seuraavat tiedostot:

  • tiedosto server.py. Se sisältää palvelinkoodin.
  • tiedosto index.html. Tämä tiedosto sisältää osan tekstiä, joka asiakassovelluksen tulee tulostaa.
  • tiedosto Dockerfile. Tämä on Docker-tiedosto, joka sisältää palvelinympäristön luomiseen tarvittavat ohjeet.

Tältä kansiosi sisällön tulee näyttää server/:

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

2b. Python-tiedoston muokkaaminen.

Lisää tiedostoon server.py seuraava 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()

Tämän koodin avulla voit luoda yksinkertaisen verkkopalvelimen. Hän antaa asiakkaille tiedoston index.html, jonka sisältö näytetään myöhemmin verkkosivulla.

2c. HTML-tiedoston muokkaaminen

Arkistoida index.html lisää seuraava teksti:

Docker-Compose is magic!

Tämä teksti lähetetään asiakkaalle.

2d. Docker-tiedoston muokkaaminen

Nyt luomme yksinkertaisen tiedoston Dockerfile, joka vastaa Python-palvelimen ajonaikaisen ympäristön järjestämisestä. Käytämme luodun kuvan perustana virallisesti, joka on suunniteltu suorittamaan Pythonilla kirjoitettuja ohjelmia. Tässä on Docker-tiedoston sisältö:

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

Nyt aletaan työstää asiakasta.

▍3. Asiakkaan luominen

Kun luomme projektimme asiakaspuolta, muistamme matkan varrella joitain Dockerin perusteita.

3a. Tiedostojen luominen

Siirry projektikansioosi client ja luo siihen seuraavat tiedostot:

  • tiedosto client.py. Tässä on asiakaskoodi.
  • tiedosto Dockerfile. Tällä tiedostolla on sama rooli kuin vastaavalla tiedostolla palvelinkansiossa. Se sisältää nimittäin käskyn, joka kuvaa kuinka luodaan ympäristö asiakaskoodin suorittamista varten.

Tämän seurauksena kansiosi client/ Tässä vaiheessa sen pitäisi näyttää tältä:

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

3b. Python-tiedoston muokkaaminen

Lisää tiedostoon client.py seuraava 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()

Tämän koodin ansiosta asiakassovellus voi ladata tietoja palvelimelta ja näyttää ne näytöllä.

3c. Docker-tiedoston muokkaaminen

Kuten palvelimen tapauksessa, luomme yksinkertaisen Dockerfile, joka vastaa ympäristön muokkaamisesta, jossa Python-asiakassovellus toimii. Tässä on asiakaskoodi Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Kuten olet ehkä huomannut, loimme kaksi erilaista projektia: palvelimen ja asiakkaan. Jokaisella niistä on oma tiedostonsa Dockerfile. Toistaiseksi kaikki, mitä tapahtuu, ei ylitä Dockerin kanssa työskentelyn perusteita. Nyt pääsemme työskentelemään Docker Composen kanssa. Voit tehdä tämän katsomalla tiedostoa docker-compose.ymlsijaitsee projektin juurikansiossa.

Huomaa, että tässä emme yritä kattaa täysin kaikkia komentoja, joita voidaan käyttää docker-compose.yml. Päätavoitteemme on käydä läpi käytännön esimerkki, joka antaa sinulle perustiedot Docker Composesta.

Tässä on tiedostoon lisättävä koodi 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. Projektin rakentaminen

Sisääntulon jälkeen docker-compose.yml Kaikki tarvittavat ohjeet on syötetty, projekti on koottava. Tämä työmme vaihe on samanlainen kuin komennon käyttäminen docker build, mutta vastaava komento koskee useita palveluita:

$ docker-compose build

▍6. Projektin käynnistäminen

Nyt kun projekti on rakennettu, on aika ajaa se. Tämä työmme vaihe vastaa vaihetta, jossa yksittäisten säiliöiden kanssa työskenneltäessä komento suoritetaan docker run:

$ docker-compose up

Tämän komennon suorittamisen jälkeen asiakkaan palvelimelta lataaman tekstin pitäisi ilmestyä terminaaliin: Docker-Compose is magic!.

Kuten jo mainittiin, palvelin käyttää tietokoneporttia 1234 palvelemaan asiakkaiden toiveita. Siksi, jos menet selaimessa osoitteeseen http://localhost:1234/, se näyttää sivun, jossa on tekstiä Docker-Compose is magic!.

Hyödyllisiä komentoja

Katsotaanpa joitain komentoja, joista saatat olla hyötyä työskennellessäsi Docker Composen kanssa.

Tämän komennon avulla voit pysäyttää ja poistaa komennon luomia säilöjä ja muita resursseja docker-compose up:

$ docker-compose down

Tämä komento tulostaa palvelulokit:

$ docker-compose logs -f [service name]

Esimerkiksi projektissamme sitä voidaan käyttää tässä muodossa: $ docker-compose logs -f [service name].

Tällä komennolla voit näyttää luettelon säilöistä:

$ docker-compose ps

Tämän komennon avulla voit suorittaa komennon käynnissä olevassa säilössä:

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

Se voi näyttää esimerkiksi tältä: docker-compose exec server ls.

Tämän komennon avulla voit näyttää luettelon kuvista:

$ docker-compose images

Tulokset

Olemme käsitelleet Docker Compose -teknologian kanssa työskentelyn perusteet, jonka tietämyksen avulla voit käyttää tätä tekniikkaa ja halutessasi aloittaa sen syventämisen. Täällä arkiston projektikoodilla, jota tarkastelimme tässä.

Hyvä lukijat! Käytätkö Docker Composea projekteissasi?

Docker Compose -opas aloittelijoille

Lähde: will.com

Lisää kommentti