Upangiri Woyambira pa Docker Compose

Wolemba nkhaniyi, kumasulira kwake komwe tikusindikiza masiku ano, akuti adapangidwira omwe akufuna kuphunzira Docker Compose ndipo akukonzekera kupanga pulogalamu yawo yoyamba ya kasitomala pogwiritsa ntchito Docker. Zikuganiziridwa kuti wowerenga nkhaniyi amadziwa zoyambira za Docker. Ngati sizili choncho, mukhoza kuyang'ana izi mndandanda wa zipangizo pa izi positi yophimba zoyambira za Docker pamodzi ndi zoyambira za Kubernetes, ndi izi nkhani kwa oyamba kumene.

Upangiri Woyambira pa Docker Compose

Kodi Docker Compose ndi chiyani?

Docker Compose ndi chida chophatikizidwa ndi Docker. Zapangidwa kuti zithetse mavuto okhudzana ndi kutumizidwa kwa polojekiti.

Mukamaphunzira zoyambira za Docker, mutha kukumana ndi kupangidwa kwa mapulogalamu osavuta omwe amagwira ntchito pawokha osadalira, mwachitsanzo, pazochokera kunja kapena ntchito zina. Pochita, ntchito zoterezi ndizosowa. Mapulojekiti enieni nthawi zambiri amakhala ndi mapulogalamu ambiri omwe amagwira ntchito limodzi.

Mumadziwa bwanji ngati mukufuna kugwiritsa ntchito Docker Compose potumiza pulojekiti? Ndikosavuta kwambiri. Ngati mugwiritsa ntchito ntchito zingapo kuti polojekitiyi igwire ntchito, ndiye kuti Docker Compose ikhoza kukhala yothandiza. Mwachitsanzo, panthawi yomwe amapanga webusayiti yomwe imayenera kulumikizidwa ku database kuti atsimikizire ogwiritsa ntchito. Ntchito yotereyi ikhoza kukhala ndi mautumiki awiri - yomwe imatsimikizira kuti malowa akugwira ntchito, ndi omwe ali ndi udindo wosunga nkhokwe.

Tekinoloje ya Docker Compose, kufotokoza m'njira yosavuta, imakupatsani mwayi woyambitsa mautumiki ambiri ndi lamulo limodzi.

Kusiyana pakati pa Docker ndi Docker Compose

Docker imagwiritsidwa ntchito kuyang'anira zotengera (ntchito) zomwe zimapanga pulogalamu.

Docker Compose imagwiritsidwa ntchito kuwongolera nthawi imodzi zotengera zingapo zomwe zimapanga pulogalamu. Chida ichi chimapereka mphamvu zofanana ndi za Docker, koma zimakupatsani mwayi wogwira ntchito zovuta kwambiri.

Upangiri Woyambira pa Docker Compose
Docker (chidebe chimodzi) ndi Docker Compose (zotengera zingapo)

Mlandu wodziwika bwino wa Docker Compose

Docker Compose ndi, m'manja oyenera, chida champhamvu kwambiri chomwe chimakupatsani mwayi wotumiza mwachangu mapulogalamu omwe ali ndi zomangamanga zovuta. Tsopano tiwona chitsanzo chogwiritsa ntchito Docker Compose, kusanthula komwe kumakupatsani mwayi wowunika mapindu omwe kugwiritsa ntchito Docker Compose kukupatsani.

Tangoganizani kuti ndinu oyambitsa projekiti yapaintaneti. Ntchitoyi ili ndi masamba awiri. Yoyamba imalola anthu amalonda kupanga malo ogulitsira pa intaneti ndikungodina pang'ono. Chachiwiri ndi cholinga cha chithandizo cha makasitomala. Masamba awiriwa amalumikizana ndi database yomweyo.

Pulojekiti yanu ikuchulukirachulukirachulukira, ndipo zikuwoneka kuti mphamvu ya seva yomwe imayendetsa sikukwanira. Zotsatira zake, mwasankha kusuntha polojekiti yonse ku makina ena.

Tsoka ilo, simunagwiritse ntchito ngati Docker Compose. Chifukwa chake, muyenera kusamutsa ndikusinthanso mautumiki amodzi ndi amodzi, ndikuyembekeza kuti simudzayiwala kalikonse mukuchita.

Ngati mugwiritsa ntchito Docker Compose, ndiye kusuntha pulojekiti yanu ku seva yatsopano ndi nkhani yomwe ingathetsedwe poyendetsa malamulo angapo. Kuti mumalize kusamutsa pulojekiti kumalo atsopano, mumangofunika kupanga zoikamo ndikuyika zosunga zobwezeretsera za database ku seva yatsopano.

Kupanga pulogalamu ya kasitomala-server pogwiritsa ntchito Docker Compose

Tsopano popeza mukudziwa zomwe tigwiritsa ntchito Docker Compose, ndi nthawi yoti mupange pulogalamu yanu yoyamba ya kasitomala pogwiritsa ntchito chida ichi. Mwakutero, tikulankhula za kupanga tsamba laling'ono (seva) ku Python lomwe limatha kutulutsa fayilo yokhala ndi chidutswa chalemba. Fayiloyi imafunsidwa kuchokera ku seva ndi pulogalamu (kasitomala), yolembedwanso mu Python. Pambuyo polandira fayilo kuchokera ku seva, pulogalamuyo imawonetsa zolemba zomwe zasungidwa pawindo.

Chonde dziwani kuti tikuganiza kuti mumamvetsetsa za Docker komanso kuti muli ndi nsanja ya Docker.

Tiyeni tiyambe kugwira ntchito.

▍1. Kupanga Ntchito

Kuti mupange pulogalamu yanu yoyamba ya kasitomala-server, ndikupangira kuti muyambe kupanga chikwatu cha polojekiti. Iyenera kukhala ndi mafayilo ndi zikwatu zotsatirazi:

  • file docker-compose.yml. Ili ndi fayilo ya Docker Compose yomwe idzakhala ndi malangizo ofunikira kuti muyambe ndikukonzekera ntchito.
  • foda server. Idzakhala ndi mafayilo ofunikira kuti seva igwire ntchito.
  • foda client. Mafayilo ofunsira kasitomala apezeka pano.

Zotsatira zake, zomwe zili mufoda yayikulu ya polojekiti yanu ziyenera kuwoneka motere:

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

▍2. Kupanga seva

Apa, popanga seva, tikhudza zinthu zina zofunika zokhudzana ndi Docker.

2 a. Kupanga mafayilo

Pitani ku foda server ndikupanga mafayilo otsatirawa mmenemo:

  • file server.py. Idzakhala ndi code ya seva.
  • file index.html. Fayiloyi ikhala ndi mawu omwe kasitomala ayenera kutulutsa.
  • file Dockerfile. Ili ndi fayilo ya Docker yomwe idzakhala ndi malangizo ofunikira kuti mupange malo a seva.

Izi ndi momwe zomwe zili mufoda yanu ziyenera kuwoneka server/:

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

2b . Kusintha fayilo ya Python.

Onjezani ku fayilo server.py kodi:

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

Khodi iyi imakupatsani mwayi wopanga seva yosavuta. Adzapatsa makasitomala fayilo index.html, zomwe zili mkati mwake zidzawonetsedwa patsamba lawebusayiti.

2 c. Kusintha Fayilo ya HTML

Ku fayilo index.html onjezani mawu otsatirawa:

Docker-Compose is magic!

Mawu awa atumizidwa kwa kasitomala.

2d. Kusintha Dockerfile

Tsopano tipanga fayilo yosavuta Dockerfile, yemwe adzakhala ndi udindo wokonza malo othamanga a seva ya Python. Monga maziko a chithunzi cholengedwa, tidzagwiritsa ntchito m'njira yovomerezeka, opangidwa kuti aziyendetsa mapulogalamu olembedwa mu Python. Nazi zomwe zili mu 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/

Tsopano tiyeni tiyambe kugwira ntchito pa kasitomala.

▍3. Kupanga kasitomala

Popanga gawo la kasitomala la polojekiti yathu, tidzakumbukira zoyambira za Docker m'njira.

3 a. Kupanga mafayilo

Pitani ku chikwatu cha polojekiti yanu client ndikupanga mafayilo otsatirawa mmenemo:

  • file client.py. Khodi ya kasitomala ipezeka pano.
  • file Dockerfile. Fayiloyi imagwira ntchito yofanana ndi fayilo yofanana mufoda ya seva. Mwakutero, ili ndi malangizo omwe amafotokoza momwe mungapangire malo ochitira makasitomala.

Zotsatira zake, foda yanu client/ pa nthawi imeneyi ntchito ayenera kuwoneka motere:

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

3b . Kusintha Fayilo ya Python

Onjezani ku fayilo client.py kodi:

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

Ndi code iyi, pulogalamu ya kasitomala imatha kutsitsa deta kuchokera pa seva ndikuwonetsa pazenera.

3c . Kusintha Dockerfile

Monga momwe zilili ndi seva, timapanga zosavuta Dockerfile, yomwe ili ndi udindo wopanga malo omwe pulogalamu ya kasitomala wa Python idzayendetse. Nayi nambala ya kasitomala Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Monga momwe mwawonera, tapanga ma projekiti awiri osiyana: seva ndi kasitomala. Aliyense waiwo ali ndi fayilo yake Dockerfile. Pakadali pano, chilichonse chomwe chachitika sichinapitirire zoyambira zogwirira ntchito ndi Docker. Tsopano tikuyamba ndi Docker Compose. Kuti tichite izi, pitani ku fayilo docker-compose.yml, yomwe ili mufoda ya mizu ya polojekiti.

Chonde dziwani kuti pano sitikuyesera kubisa malamulo onse omwe angagwiritsidwe ntchito docker-compose.yml. Cholinga chathu chachikulu ndikudutsa chitsanzo chothandiza chomwe chingakupatseni chidziwitso choyambirira cha Docker Compose.

Nayi code yoti muyike mufayilo 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. Kumanga polojekiti

Pambuyo mu docker-compose.yml Malangizo onse ofunikira alowetsedwa, polojekitiyi iyenera kusonkhanitsidwa. Njira iyi ya ntchito yathu ikufanana ndi kugwiritsa ntchito lamulo docker build, koma lamulo lofananirali limagwira ntchito zingapo:

$ docker-compose build

▍6. Kukhazikitsa kwa polojekiti

Tsopano popeza projekiti yasonkhanitsidwa, ndi nthawi yoti muyambitse. Gawo ili la ntchito yathu likufanana ndi sitepe yomwe, pogwira ntchito ndi zotengera zamtundu uliwonse, lamulo limaperekedwa docker run:

$ docker-compose up

Pambuyo pochita lamuloli, mawu omwe atsitsidwa ndi kasitomala kuchokera pa seva akuyenera kuwoneka mu terminal: Docker-Compose is magic!.

Monga tanenera kale, seva imagwiritsa ntchito doko la kompyuta 1234 kuti muthandizire zopempha zamakasitomala. Chifukwa chake, ngati mupita ku adilesi mu msakatuli wanu http://localhost:1234/, iwonetsa tsamba lomwe lili ndi mawu Docker-Compose is magic!.

Malamulo othandiza

Tiyeni tiwone malamulo ena omwe mungapeze othandiza mukamagwira ntchito ndi Docker Compose.

Lamuloli limakupatsani mwayi kuyimitsa ndikuchotsa zotengera ndi zinthu zina zopangidwa ndi lamuloli docker-compose up:

$ docker-compose down

Lamulo ili lisindikiza zolemba zautumiki:

$ docker-compose logs -f [service name]

Mwachitsanzo, mu polojekiti yathu itha kugwiritsidwa ntchito mwanjira iyi: $ docker-compose logs -f [service name].

Pogwiritsa ntchito lamuloli mutha kuwonetsa mndandanda wa zotengera:

$ docker-compose ps

Lamulo ili limakupatsani mwayi kuti mupereke lamulo mu chidebe chothamanga:

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

Mwachitsanzo, zitha kuwoneka motere: docker-compose exec server ls.

Lamuloli limakupatsani mwayi wowonetsa mndandanda wazithunzi:

$ docker-compose images

Zotsatira

Tawona zoyambira zogwirira ntchito ndiukadaulo wa Docker Compose, chidziwitso chomwe chidzakulolani kugwiritsa ntchito ukadaulo uwu ndipo, ngati mukufuna, yambani kuphunzira mozama. pano malo okhala ndi code ya polojekiti yomwe tidayang'ana pano.

Wokondedwa owerenga! Kodi mumagwiritsa ntchito Docker Compose muma projekiti anu?

Upangiri Woyambira pa Docker Compose

Source: www.habr.com

Kuwonjezera ndemanga