Yekutanga Inotungamira kune Docker Compose

Munyori wechinyorwa ichi, dudziro yatiri kuburitsa nhasi, inoti yakagadzirirwa kune avo vanogadzira vanoda kudzidza Docker Compose uye vari kuenda kunogadzira yavo yekutanga mutengi-server application vachishandisa Docker. Zvinofungidzirwa kuti muverengi wechinyorwa ichi anoziva izvo zvekutanga zveDocker. Kana zvisina kudaro, unogona kutarisa izvi series yezvinhu pa izvi post inovhara Docker mabhesikoro pamwe chete neKubernetes mabhesikoro, uye izvi chinyorwa chevanotanga.

Yekutanga Inotungamira kune Docker Compose

Chii chinonzi Docker Compose?

Docker Compose chishandiso chinosanganisirwa neDocker. Yakagadzirirwa kugadzirisa matambudziko ane chekuita nekutumirwa kweprojekiti.

Uchiri kudzidza izvo zvekutanga zveDocker, unogona kunge wakasangana nekugadzirwa kwezvishandiso zviri nyore zvinoshanda zvakazvimiririra uye zvisingatsamiri, semuenzaniso, kune ekunze data masosi kana pane mamwe masevhisi. Mukuita, zvikumbiro zvakadaro hazviwanzoitiki. Mapurojekiti chaiwo anowanzo sanganisira seti yese yezvikumbiro zvinoshanda pamwechete.

Unoziva sei kana iwe uchida kushandisa Docker Compose paunenge uchiendesa chirongwa? Zviri chaizvo nyore chaizvo. Kana iwe ukashandisa akawanda masevhisi kuita kuti chirongwa ichi chishande, saka Docker Compose inogona kuuya inobatsira. Semuenzaniso, mumamiriro ezvinhu apo ivo vanogadzira webhusaiti inoda kubatana kune dhatabhesi kuitira kuti vatendese vashandisi. Chirongwa chakadaro chinogona kunge chine masevhisi maviri - iyo inovimbisa kushanda kwesaiti, uye iyo ine basa rekuchengetedza dhatabhesi.

Docker Compose tekinoroji, kuitsanangura nenzira yakapfava, inokutendera kuti utange masevhisi mazhinji nemurairo mumwe chete.

Musiyano pakati peDocker uye Docker Compose

Docker inoshandiswa kubata iyo yega midziyo (masevhisi) anogadzira application.

Docker Compose inoshandiswa panguva imwe chete kubata akawanda midziyo inogadzira application. Ichi chishandiso chinopa hunyanzvi hwakafanana neDocker, asi chinokutendera kuti ushande nemamwe maapplication akaoma.

Yekutanga Inotungamira kune Docker Compose
Docker (mudziyo mumwechete) uye Docker Compose (midziyo yakawanda)

Yakajairika kushandisa kesi yeDocker Compose

Docker Compose iri, mumaoko ekurudyi, chishandiso chine simba kwazvo chinokutendera iwe kukurumidza kuendesa maapplication ane yakaoma architecture. Iye zvino tichatarisa muenzaniso wekushandiswa kunoshanda kweDocker Compose, kuongororwa kwacho kuchakubvumidza kuti uongorore mabhenefiti ayo uchishandisa Docker Compose achakupa.

Fungidzira kuti uri mugadziri wechirongwa chewebhu. Iyi purojekiti inosanganisira mawebhusaiti maviri. Yekutanga inobvumira vanhu vebhizinesi kugadzira zvitoro zvepamhepo nekungodzvanya zvishoma. Chechipiri chakanangana nerutsigiro rwevatengi. Aya mawebhusaiti maviri anodyidzana neiyo imwechete database.

Iyo purojekiti yako iri kuramba ichizivikanwa, uye zvinozoitika kuti simba revhavha iyo inomhanya pairi harichakwane. Nekuda kweizvozvo, unosarudza kufambisa iyo purojekiti kune mumwe muchina.

Nehurombo, iwe hauna kushandisa chimwe chinhu senge Docker Compose. Naizvozvo, iwe uchafanirwa kutamisa uye kugadzirisa zvakare masevhisi imwe panguva, uchitarisira kuti hapana chauchakanganwa mukuita.

Kana iwe ukashandisa Docker Compose, wobva waendesa purojekiti yako kune nyowani sevha inyaya inogona kugadziriswa nekumhanyisa mirairo mishoma. Kuti upedze kuendeswa kweprojekiti kune imwe nzvimbo itsva, iwe unongoda kuita mamwe marongero uye kurodha kopi yekuchengetedza yedhatabhesi kune itsva server.

Kugadzira mutengi-server application uchishandisa Docker Compose

Zvino zvaunoziva zvatichashandisa Docker Compose, yave nguva yekugadzira yako yekutanga mutengi-server application uchishandisa chishandiso ichi. Sezvineiwo, tiri kutaura nezve kugadzira diki webhusaiti (server) muPython iyo inogona kuburitsa faira ine chidimbu chemavara. Iyi faira inokumbirwa kubva kuseva nechirongwa (mutengi), zvakare yakanyorwa muPython. Mushure mekugamuchira faira kubva kuvhavha, purogiramu inoratidza zvinyorwa zvakachengetwa mairi pachiratidziro.

Ndokumbira utarise kuti isu tinofungidzira kuti une nzwisiso yekutanga yeDocker uye kuti watova neDocker chikuva chakaiswa.

Ngatitange kushanda purojekiti.

▍1. Kugadzira Chirongwa

Kuvaka yako yekutanga mutengi-server application, ini ndinokurudzira kuti utange nekugadzira purojekiti folda. Inofanira kunge iine mafaera nemaforodha anotevera:

  • faira docker-compose.yml. Iyi iDocker Compose faira iyo ichange iine mirairo inodiwa kutanga nekugadzirisa masevhisi.
  • forodha server. Ichange iine mafaera anodiwa kuchengetedza sevha ichimhanya.
  • forodha client. Iwo mutengi application mafaera achave ari pano.

Nekuda kweizvozvo, zviri mukati meiyo folda huru yeprojekiti yako zvinofanirwa kutaridzika seizvi:

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

▍2. Kugadzira sevha

Pano, mukugadzira sevha, tichabata pane zvimwe zvinhu zvakakosha maererano neDocker.

2a. Kugadzira mafaira

Enda kufolda server uye gadzira mafaera anotevera mairi:

  • faira server.py. Ichange iine server code.
  • faira index.html. Iri faira rinenge riine chidimbu chemavara icho mutengi application inofanira kubuda.
  • faira Dockerfile. Iri iDocker faira rinenge riine mirairo inodiwa kugadzira iyo server nharaunda.

Izvi ndizvo zvinofanirwa kutaridzika zviri mukati mefolda yako server/:

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

2b. Kugadzirisa faira rePython.

Wedzera kufaira server.py iyo inotevera kodhi:

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

Iyi kodhi inobvumidza iwe kugadzira iri nyore web server. Iye achapa vatengi faira index.html, zvirimo zvichazoratidzwa pawebhu peji.

2c. Kugadzirisa HTML File

To file index.html wedzera zvinyorwa zvinotevera:

Docker-Compose is magic!

Aya mavara achatumirwa kumutengi.

2d. Kugadzirisa iyo Dockerfile

Iye zvino tichagadzira faira iri nyore Dockerfile, ndiani achave nebasa rekuronga iyo yekumhanyisa nharaunda yePython server. Sechikonzero chemufananidzo wakagadzirwa, tichashandisa nenzira yepamutemo, yakagadzirirwa kuita zvirongwa zvakanyorwa muPython. Hezvino izvo zviri muDockerfile:

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

Zvino ngatitange kushanda pane mutengi.

▍3. Kugadzira mutengi

Tichiri kugadzira chikamu chemutengi chepurojekiti yedu, isu ticharangarira mamwe maDocker basics munzira.

3a. Kugadzira mafaira

Enda kune yako purojekiti folda client uye gadzira mafaera anotevera mairi:

  • faira client.py. Kodhi yemutengi ichave iri pano.
  • faira Dockerfile. Iyi faira inoita basa rakafanana sefaira rakafanana mune sevha folda. Sezvineiwo, ine mirairo inotsanangura maitiro ekugadzira nharaunda yekuita kodhi yemutengi.

Nekuda kweizvozvo, folda yako client/ panguva ino yekushanda inofanirwa kutaridzika seizvi:

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

3b. Kugadzirisa Python File

Wedzera kufaira client.py iyo inotevera kodhi:

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

Neiyi kodhi, iyo mutengi application inogona kudhawunirodha data kubva kune server uye kuiratidza pachiratidziri.

3c. Kugadzirisa iyo Dockerfile

Sezvakaitika kune sevha, tinogadzira nyore Dockerfile, ine mutoro wekugadzira nharaunda umo iyo Python mutengi application ichamhanya. Heino kodhi yemutengi Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Sezvaungave waona, takagadzira mapurojekiti maviri akasiyana: sevha uye mutengi. Mumwe nomumwe wavo ane faira yake Dockerfile. Parizvino, zvese zvakaitika hazvina kupfuura zvekutanga zvekushanda neDocker. Zvino isu tinotanga neDocker Compose. Kuti uite izvi, ngatiende kune iyo faira docker-compose.yml, iri muproject root folder.

Ndapota cherechedza kuti pano hatisi kuedza kuvhara zvachose mirairo yose inogona kushandiswa mukati docker-compose.yml. Chinangwa chedu chikuru ndechekufamba nemuenzaniso unoshanda unozokupa ruzivo rwekutanga rweDocker Compose.

Heino kodhi yekuisa mufaira 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. Kugadzira chirongwa

Mushure mekupinda docker-compose.yml Mirayiridzo yose inodiwa yakaiswa, purojekiti inoda kuunganidzwa. Iyi nhanho yebasa redu yakafanana nekushandisa murairo docker build, asi murairo unoenderana unoenderana nemasevhisi akati wandei:

$ docker-compose build

▍6. Kutangwa kwechirongwa

Iye zvino purojekiti yaunganidzwa, yave nguva yekuitanga. Iyi nhanho yebasa redu inoenderana nedanho iro, kana uchishanda nemidziyo yega, murairo unoitwa docker run:

$ docker-compose up

Mushure mekuita uyu murairo, zvinyorwa zvakatorwa nemutengi kubva paseva zvinofanirwa kuoneka muchiteshi: Docker-Compose is magic!.

Sezvatotaurwa, sevha inoshandisa chiteshi chekombuta 1234 kushandira zvikumbiro zvevatengi. Naizvozvo, kana iwe ukaenda kukero mubrowser yako http://localhost:1234/, icharatidza peji ine mavara Docker-Compose is magic!.

Mirairo Inobatsira

Ngatitarisei mimwe mirairo yaungawane inobatsira kana uchishanda neDocker Compose.

Uyu murairo unokutendera kuti umise uye udzime midziyo uye zvimwe zviwanikwa zvakagadzirwa nemurairo docker-compose up:

$ docker-compose down

Uyu murairo unodhinda matanda ebasa:

$ docker-compose logs -f [service name]

Semuenzaniso, muchirongwa chedu inogona kushandiswa mune iyi fomu: $ docker-compose logs -f [service name].

Uchishandisa murairo uyu unogona kuratidza runyoro rwemidziyo:

$ docker-compose ps

Uyu murairo unokubvumira kuti uite murairo mumudziyo unomhanya:

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

Semuenzaniso, inogona kutaridzika seizvi: docker-compose exec server ls.

Uyu murairo unokutendera kuti uratidze runyoro rwemifananidzo:

$ docker-compose images

Migumisiro

Takatarisa izvo zvekutanga zvekushanda neDocker Compose tekinoroji, ruzivo rwacho rwunokutendera kushandisa iyi tekinoroji uye, kana uchida, tanga kuidzidza zvakadzama. pano nzvimbo ine kodhi yeprojekti yatakatarisa pano.

Vanodiwa vaverengi! Iwe unoshandisa Docker Compose mumapurojekiti ako?

Yekutanga Inotungamira kune Docker Compose

Source: www.habr.com

Voeg