Leiðbeiningar fyrir byrjendur um Docker Compose

Höfundur greinarinnar, þýðinguna sem við birtum í dag, segir að hún sé ætluð þeim forriturum sem vilja læra Docker Compose og eru að fara að búa til sitt fyrsta biðlara-miðlaraforrit með Docker. Gert er ráð fyrir að lesandi þessa efnis þekki grunnatriði Docker. Ef þetta er ekki raunin geturðu kíkt á þetta röð af efnum á þetta færsla sem fjallar um grunnatriði Docker ásamt grunnatriðum Kubernetes og þetta grein fyrir byrjendur.

Leiðbeiningar fyrir byrjendur um Docker Compose

Hvað er Docker Compose?

Docker Compose er tól sem fylgir Docker. Það er hannað til að leysa vandamál sem tengjast dreifingu verkefna.

Meðan þú lærðir grunnatriði Docker gætirðu hafa lent í því að búa til einföld forrit sem vinna sjálfstætt og eru ekki háð til dæmis utanaðkomandi gagnaveitum eða ákveðnum þjónustum. Í reynd eru slíkar umsóknir sjaldgæfar. Raunveruleg verkefni fela venjulega í sér heilt safn af forritum sem vinna saman.

Hvernig veistu hvort þú þarft að nota Docker Compose þegar þú setur upp verkefni? Það er í raun mjög einfalt. Ef þú notar margar þjónustur til að láta þetta verkefni virka, þá gæti Docker Compose komið sér vel. Til dæmis, í aðstæðum þar sem þeir búa til vefsíðu sem þarf að tengjast gagnagrunni til að auðkenna notendur. Slíkt verkefni getur samanstaðið af tveimur þjónustum - þeirri sem tryggir rekstur síðunnar og þeirri sem ber ábyrgð á viðhaldi gagnagrunnsins.

Docker Compose tækni, til að lýsa henni á einfaldan hátt, gerir þér kleift að ræsa margar þjónustur með einni skipun.

Munurinn á Docker og Docker Compose

Docker er notað til að stjórna einstökum gámum (þjónustum) sem mynda forrit.

Docker Compose er notað til að stjórna samtímis mörgum gámum sem mynda forrit. Þetta tól býður upp á sömu möguleika og Docker, en gerir þér kleift að vinna með flóknari forritum.

Leiðbeiningar fyrir byrjendur um Docker Compose
Docker (einn gámur) og Docker Compose (margir gámar)

Dæmigert notkunartilvik fyrir Docker Compose

Docker Compose er, í réttum höndum, mjög öflugt tól sem gerir þér kleift að nota mjög fljótt forrit með flóknum arkitektúr. Nú munum við skoða dæmi um hagnýta notkun á Docker Compose, greiningin á því gerir þér kleift að meta ávinninginn af því að nota Docker Compose mun gefa þér.

Ímyndaðu þér að þú sért verktaki á vefverkefni. Þetta verkefni inniheldur tvær vefsíður. Sú fyrsta gerir viðskiptamönnum kleift að búa til netverslanir með örfáum smellum. Annað miðar að þjónustuveri. Þessar tvær síður hafa samskipti við sama gagnagrunn.

Verkefnið þitt er að verða sífellt vinsælli og það kemur í ljós að kraftur netþjónsins sem það keyrir á er ekki lengur nóg. Þar af leiðandi ákveður þú að færa allt verkefnið í aðra vél.

Því miður notaðir þú ekki eitthvað eins og Docker Compose. Þess vegna verður þú að flytja og endurstilla þjónustu eina í einu, í von um að þú gleymir engu í ferlinu.

Ef þú notar Docker Compose, þá er að flytja verkefnið þitt á nýjan netþjón mál sem hægt er að leysa með því að keyra nokkrar skipanir. Til að ljúka flutningi verkefnisins á nýjan stað þarftu aðeins að gera nokkrar stillingar og hlaða upp afriti af gagnagrunninum á nýja netþjóninn.

Þróa biðlara-miðlara forrit með því að nota Docker Compose

Nú þegar þú veist í hvað við ætlum að nota Docker Compose, þá er kominn tími til að búa til fyrsta biðlara-miðlaraforritið þitt með því að nota þetta tól. Við erum nefnilega að tala um að þróa litla vefsíðu (þjónn) í Python sem getur gefið út skrá með textabroti. Þessi skrá er beðin um frá þjóninum af forriti (viðskiptavinur), einnig skrifað í Python. Eftir að hafa fengið skrá frá þjóninum birtir forritið textann sem geymdur er í henni á skjánum.

Vinsamlegast athugaðu að við gerum ráð fyrir að þú hafir grunnskilning á Docker og að þú sért nú þegar með Docker pallinn uppsettan.

Byrjum að vinna í verkefninu.

▍1. Að búa til verkefni

Til að búa til fyrsta biðlara-miðlara forritið þitt, legg ég til að þú byrjir á því að búa til verkefnamöppu. Það ætti að innihalda eftirfarandi skrár og möppur:

  • skrá docker-compose.yml. Þetta er Docker Compose skrá sem mun innihalda leiðbeiningarnar sem þarf til að ræsa og stilla þjónustuna.
  • Mappa server. Það mun innihalda þær skrár sem nauðsynlegar eru til að halda þjóninum í gangi.
  • Mappa client. Umsóknarskrár viðskiptavinarins verða staðsettar hér.

Þess vegna ætti innihald aðalmöppu verkefnisins að líta svona út:

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

▍2. Að búa til netþjón

Hér, í því ferli að búa til netþjón, munum við snerta nokkur grundvallaratriði varðandi Docker.

2a. Að búa til skrár

Farðu í möppu server og búðu til eftirfarandi skrár í því:

  • skrá server.py. Það mun innihalda netþjónskóðann.
  • skrá index.html. Þessi skrá mun innihalda texta sem biðlaraforritið ætti að gefa út.
  • skrá Dockerfile. Þetta er Docker skrá sem mun innihalda leiðbeiningarnar sem þarf til að búa til netþjónsumhverfið.

Svona ætti innihald möppunnar að líta út server/:

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

2b. Að breyta Python skrá.

Bæta við skrá server.py eftirfarandi kóða:

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

Þessi kóði gerir þér kleift að búa til einfaldan vefþjón. Hann mun gefa viðskiptavinum skrána index.html, sem síðar verður birt á vefsíðunni.

2c. Að breyta HTML skrá

Til að skrá index.html bæta við eftirfarandi texta:

Docker-Compose is magic!

Þessi texti verður sendur til viðskiptavinarins.

2d. Að breyta Dockerfile

Nú munum við búa til einfalda skrá Dockerfile, sem mun bera ábyrgð á að skipuleggja keyrsluumhverfið fyrir Python netþjóninn. Sem grundvöllur fyrir skapaða mynd munum við nota með opinberum hætti, hannað til að keyra forrit skrifuð í Python. Hér er innihald 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/

Nú skulum við byrja að vinna á viðskiptavininum.

▍3. Að búa til viðskiptavin

Þegar við búum til viðskiptavinahlið verkefnisins munum við muna nokkur grunnatriði Docker í leiðinni.

3a. Að búa til skrár

Farðu í verkefnamöppuna þína client og búðu til eftirfarandi skrár í því:

  • skrá client.py. Kóðinn viðskiptavinar verður staðsettur hér.
  • skrá Dockerfile. Þessi skrá gegnir sama hlutverki og svipuð skrá í netþjónamöppunni. Það inniheldur nefnilega leiðbeiningar sem lýsa því hvernig á að búa til umhverfi til að keyra kóða viðskiptavinar.

Þar af leiðandi, möppan þín client/ á þessu stigi vinnunnar ætti það að líta svona út:

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

3b. Að breyta Python skrá

Bæta við skrá client.py eftirfarandi kóða:

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

Með þessum kóða getur biðlaraforritið hlaðið niður gögnum af þjóninum og birt þau á skjánum.

3c. Að breyta Dockerfile

Eins og í tilfelli þjónsins, búum við til einfalt Dockerfile, ábyrgur fyrir því að búa til umhverfið sem Python biðlaraforritið mun keyra í. Hér er viðskiptavinakóði Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Eins og þú hefur kannski tekið eftir bjuggum við til tvö mismunandi verkefni: netþjón og viðskiptavin. Hver þeirra hefur sína eigin skrá Dockerfile. Hingað til hefur allt sem hefur gerst ekki farið lengra en grunnatriðin í því að vinna með Docker. Nú byrjum við með Docker Compose. Til að gera þetta skulum við fara í skrána docker-compose.yml, staðsett í rótarmöppu verkefnisins.

Vinsamlegast athugaðu að hér erum við ekki að reyna að ná yfir allar skipanir sem hægt er að nota í docker-compose.yml. Meginmarkmið okkar er að ganga í gegnum hagnýtt dæmi sem gefur þér grunnþekkingu á Docker Compose.

Hér er kóðinn til að setja í skrána 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. Byggja verkefnið

Eftir inn docker-compose.yml Allar nauðsynlegar leiðbeiningar hafa verið settar inn, verkefnið þarf að setja saman. Þetta skref í vinnu okkar er svipað og að nota skipunina docker build, en samsvarandi skipun er viðeigandi fyrir nokkrar þjónustur:

$ docker-compose build

▍6. Kynning á verkefninu

Nú þegar verkefnið er sett saman er kominn tími til að ráðast í það. Þetta skref í vinnu okkar samsvarar því skrefi þar sem skipunin er framkvæmd þegar unnið er með einstaka ílát docker run:

$ docker-compose up

Eftir að þessi skipun hefur verið framkvæmd ætti textinn sem viðskiptavinurinn hlaðið niður af þjóninum að birtast í flugstöðinni: Docker-Compose is magic!.

Eins og áður hefur komið fram notar þjónninn tölvugáttina 1234 til að þjónusta beiðnir viðskiptavina. Þess vegna, ef þú ferð á heimilisfangið í vafranum þínum http://localhost:1234/, mun það birta síðu með texta Docker-Compose is magic!.

Gagnlegar skipanir

Við skulum skoða nokkrar skipanir sem þér gæti fundist gagnlegar þegar þú vinnur með Docker Compose.

Þessi skipun gerir þér kleift að stöðva og eyða gámum og öðrum tilföngum sem búin eru til með skipuninni docker-compose up:

$ docker-compose down

Þessi skipun prentar þjónustuskrár:

$ docker-compose logs -f [service name]

Til dæmis, í verkefninu okkar er hægt að nota það á þessu formi: $ docker-compose logs -f [service name].

Með því að nota þessa skipun geturðu birt lista yfir ílát:

$ docker-compose ps

Þessi skipun gerir þér kleift að framkvæma skipun í hlaupandi íláti:

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

Til dæmis gæti það litið svona út: docker-compose exec server ls.

Þessi skipun gerir þér kleift að birta lista yfir myndir:

$ docker-compose images

Niðurstöður

Við höfum skoðað grunnatriðin í því að vinna með Docker Compose tækni, þekking á henni mun gera þér kleift að nota þessa tækni og, ef þú vilt, byrja að rannsaka hana nánar. Hér geymsla með kóðanum fyrir verkefnið sem við skoðuðum hér.

Kæru lesendur! Notar þú Docker Compose í verkefnum þínum?

Leiðbeiningar fyrir byrjendur um Docker Compose

Heimild: www.habr.com

Bæta við athugasemd