Torolàlana ho an'ny vao manomboka amin'ny Docker Compose

Ny mpanoratra ny lahatsoratra, ny dikanteny avoakanay anio, dia milaza fa natao ho an'ireo mpamorona te-hianatra ny Docker Compose ary mandroso amin'ny famoronana ny rindranasa mpanjifa-server voalohany amin'ny fampiasana Docker. Heverina fa fantatry ny mpamaky ity fitaovana ity ny fototry ny Docker. Raha tsy izany no izy dia azonao atao ny mijery izany andiana fitaovana amin'ny izany lahatsoratra mandrakotra ny fototry ny Docker miaraka amin'ny fototra Kubernetes, ary izany lahatsoratra ho an'ny vao manomboka.

Torolàlana ho an'ny vao manomboka amin'ny Docker Compose

Inona no atao hoe Docker Compose?

Docker Compose dia fitaovana miaraka amin'ny Docker. Izy io dia natao hamahana ireo olana mifandraika amin'ny fametrahana tetikasa.

Raha mianatra ny fototry ny Docker ianao dia mety ho nifanena tamin'ny famoronana rindranasa tsotra izay miasa tsy miankina ary tsy miankina, ohatra, amin'ny loharano angon-drakitra ivelany na amin'ny serivisy sasany. Amin'ny fampiharana dia tsy fahita firy ny fampiharana toy izany. Ny tetikasa tena izy dia matetika ahitana andiana fampiharana iray miara-miasa.

Ahoana no ahafantaranao raha mila mampiasa Docker Compose ianao rehefa mametraka tetikasa? Tena tsotra tokoa izany. Raha mampiasa serivisy marobe ianao mba hampandehanana ity tetikasa ity, dia mety ho ilaina ny Docker Compose. Ohatra, amin'ny toe-javatra iray izay mamorona tranokala mila mifandray amin'ny angon-drakitra mba hanamarinana ny mpampiasa. Ny tetikasa toy izany dia mety ahitana serivisy roa - ny iray izay miantoka ny fiasan'ny tranokala, ary ny iray izay tompon'andraikitra amin'ny fitazonana ny tahiry.

Ny teknolojia Docker Compose, mba hamaritana azy amin'ny fomba tsotra, dia ahafahanao manangana serivisy maro miaraka amin'ny baiko iray.

Ny fahasamihafana eo amin'ny Docker sy Docker Compose

Docker dia ampiasaina hitantana ireo fitoeran-javatra (serivisy) tsirairay izay mandrafitra fampiharana.

Docker Compose dia ampiasaina hitantana ireo kaontenera marobe mandrafitra fampiharana iray. Ity fitaovana ity dia manolotra fahaiza-manao mitovy amin'ny Docker, saingy mamela anao hiasa amin'ny rindranasa sarotra kokoa.

Torolàlana ho an'ny vao manomboka amin'ny Docker Compose
Docker (kaontenera tokana) sy Docker Compose (kaontenera maromaro)

Fampiasana mahazatra ho an'ny Docker Compose

Docker Compose dia, amin'ny tanana havanana, fitaovana mahery vaika ahafahanao mametraka haingana ny rindranasa miaraka amin'ny maritrano sarotra. Ankehitriny isika dia hijery ohatra iray amin'ny fampiasana azo ampiharina amin'ny Docker Compose, ny famakafakana izay ahafahanao manombatombana ny tombontsoa omen'ny Docker Compose anao.

Alaivo sary an-tsaina hoe mpamorona tetikasa web ianao. Ity tetikasa ity dia ahitana tranonkala roa. Ny voalohany dia ahafahan'ny mpandraharaha mamorona fivarotana an-tserasera amin'ny tsindry vitsy monja. Ny faharoa dia mikendry ny fanohanana ny mpanjifa. Ireo tranonkala roa ireo dia mifandray amin'ny angon-drakitra mitovy.

Miha-malaza ny tetikasanao, ary hita fa tsy ampy intsony ny herin'ny mpizara izay iasany. Vokatr'izany dia manapa-kevitra ny hamindra ny tetikasa manontolo amin'ny milina hafa ianao.

Mampalahelo fa tsy nampiasa zavatra toa an'i Docker Compose ianao. Noho izany dia tsy maintsy mamindra sy manitsy indray ny serivisy ianao, manantena fa tsy hanadino na inona na inona ianao mandritra ny dingana.

Raha mampiasa Docker Compose ianao, ny famindrana ny tetikasanao amin'ny mpizara vaovao dia olana azo vahana amin'ny alàlan'ny baiko vitsivitsy. Mba hamitana ny famindrana ny tetikasa mankany amin'ny toerana vaovao, dia mila manao toe-javatra sasany ianao ary mampakatra dika mitovy amin'ny tahiry ho an'ny mpizara vaovao.

Mamorona fampiharana mpanjifa-server mampiasa Docker Compose

Rehefa fantatrao hoe inona no hampiasainay ny Docker Compose, fotoana izao hamoronana ny fampiharana mpanjifa-server voalohany anao amin'ny fampiasana ity fitaovana ity. Izany hoe, miresaka momba ny famolavolana tranokala kely (server) amin'ny Python izay afaka mamoaka rakitra misy sombin-tsoratra. Ity rakitra ity dia angatahin'ny programa iray (mpanjifa), voasoratra amin'ny Python ihany koa. Rehefa avy nahazo rakitra avy amin'ny mpizara ny programa dia mampiseho ny lahatsoratra voatahiry ao amin'ny efijery.

Mariho fa mihevitra izahay fa manana fahatakarana fototra momba ny Docker ianao ary efa nametraka ny sehatra Docker ianao.

Andao hanomboka hiasa amin'ny tetikasa.

▍1. Famoronana tetikasa

Mba hananganana ny fampiharana mpanjifa-server voalohany anao dia manoro hevitra anao aho hanomboka amin'ny famoronana lahatahiry tetikasa. Tokony ahitana ireto rakitra sy lahatahiry manaraka ireto:

  • rakitra docker-compose.yml. Ity dia Docker Compose rakitra izay ahitana ny torolalana ilaina hanombohana sy hanitsiana ny serivisy.
  • lahatahiry server. Ahitana ireo rakitra ilaina mba hitazonana ny mpizara.
  • lahatahiry client. Ho hita eto ny rakitra fampiharana mpanjifa.

Vokatr'izany dia tokony ho toy izao ny votoatin'ny lahatahiry lehibe an'ny tetikasanao:

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

▍2. Mamorona mpizara

Eto, amin'ny dingan'ny famoronana mpizara dia hikasika ireo zavatra fototra momba an'i Docker isika.

2a. Mamorona rakitra

Mandehana any amin'ny fampirimana server ary mamorona ireto rakitra manaraka ireto ao anatiny:

  • rakitra server.py. Hisy ny code server izany.
  • rakitra index.html. Ity rakitra ity dia ahitana lahatsoratra izay tokony havoakan'ny fampiharana mpanjifa.
  • rakitra Dockerfile. Ity dia rakitra Docker izay ahitana ny torolalana ilaina amin'ny famoronana ny tontolon'ny mpizara.

Toy izao no tokony ho endriky ny votoatin'ny lahatahiry server/:

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

2b. Fanovana rakitra Python.

Ampio amin'ny rakitra server.py ity code manaraka ity:

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

Ity kaody ity dia ahafahanao mamorona mpizara tranonkala tsotra. Izy no hanome ny mpanjifa ny rakitra index.html, izay haseho ao amin'ny pejin-tranonkala any aoriana any ny ao anatiny.

2c. Fanovana rakitra HTML

Mametraka index.html ampio ity lahatsoratra manaraka ity:

Docker-Compose is magic!

Ity lahatsoratra ity dia halefa any amin'ny mpanjifa.

2d. Fanovana ny Dockerfile

Ankehitriny dia hamorona rakitra tsotra isika Dockerfile, izay ho tompon'andraikitra amin'ny fandaminana ny tontolo iainan'ny mpizara Python. Ho fototry ny sary noforonina dia hampiasaintsika amin'ny fomba ofisialy, natao hampandehanana programa voasoratra amin'ny Python. Ity ny votoatin'ny 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/

Andeha isika hanomboka hiasa amin'ny mpanjifa.

▍3. Mamorona mpanjifa

Rehefa mamorona ny lafiny mpanjifa amin'ny tetikasanay izahay dia hahatsiaro ireo fototra Docker sasany eny an-dalana.

3a. Mamorona rakitra

Mandehana any amin'ny lahatahiry tetikasanao client ary mamorona ireto rakitra manaraka ireto ao anatiny:

  • rakitra client.py. Ny kaody mpanjifa dia ho hita eto.
  • rakitra Dockerfile. Ity rakitra ity dia mitana anjara toerana mitovy amin'ny rakitra mitovy amin'ny lahatahiry mpizara. Izany hoe, misy toromarika mamaritra ny fomba hamoronana tontolo hanatanterahana ny kaody mpanjifa.

Vokatr'izany, ny lahatahirinao client/ Amin'ity dingana ity dia tokony ho toy izao manaraka izao:

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

3b. Fanovana rakitra Python

Ampio amin'ny rakitra client.py ity code manaraka ity:

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

Miaraka amin'ity kaody ity, ny fampiharana mpanjifa dia afaka misintona angona avy amin'ny mpizara ary mampiseho izany eo amin'ny efijery.

3c. Fanovana ny Dockerfile

Toy ny amin'ny mpizara dia mamorona tsotra izahay Dockerfile, tompon'andraikitra amin'ny famoronana ny tontolo iainan'ny fampiharana mpanjifa Python. Ity ny kaody mpanjifa Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Araka ny efa tsikaritrareo dia namorona tetikasa roa samy hafa izahay: mpizara sy mpanjifa. Samy manana ny fichier azy ny tsirairay Dockerfile. Hatreto, ny zava-nitranga rehetra dia tsy nihoatra ny fototry ny fiaraha-miasa amin'i Docker. Manomboka amin'ny Docker Compose isika izao. Mba hanaovana izany, andeha ho any amin'ny rakitra docker-compose.yml, hita ao amin'ny lahatahiry fototry ny tetikasa.

Mariho fa eto izahay dia tsy miezaka ny handrakotra tanteraka ny baiko rehetra azo ampiasaina docker-compose.yml. Ny tanjonay lehibe dia ny handeha amin'ny ohatra azo ampiharina izay hanome anao ny fahalalana fototra momba ny Docker Compose.

Ity ny kaody hapetraka ao anaty rakitra 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. Manorina ny tetikasa

Taorian'ny docker-compose.yml Ny torolàlana ilaina rehetra dia efa nampidirina, ny tetikasa dia mila mivory. Ity dingana amin'ny asantsika ity dia mitovy amin'ny fampiasana ny baiko docker build, fa ny baiko mifandraika amin'izany dia mifandraika amin'ny serivisy maromaro:

$ docker-compose build

▍6. Fanombohana ny tetikasa

Rehefa tafavory ny tetikasa dia izao no fotoana hanombohana azy. Ity dingana amin'ny asantsika ity dia mifanaraka amin'ny dingana izay, rehefa miasa amin'ny kaontenera tsirairay, ny baiko dia tanterahina docker run:

$ docker-compose up

Aorian'ny fanatanterahana ity baiko ity dia tokony hiseho ao amin'ny terminal ny lahatsoratra nalain'ny mpanjifa avy amin'ny mpizara: Docker-Compose is magic!.

Araka ny efa voalaza, dia mampiasa ny seranan-tsambo ny mpizara 1234 manompo ny fangatahan'ny mpanjifa. Noho izany, raha mankany amin'ny adiresy ao amin'ny navigateur ianao http://localhost:1234/, dia hampiseho pejy misy lahatsoratra Docker-Compose is magic!.

Didy mahasoa

Andeha hojerentsika ny baiko sasany mety ho hitanao fa ilaina rehefa miasa amin'ny Docker Compose.

Ity baiko ity dia ahafahanao manakana sy mamafa ireo kaontenera sy loharano hafa noforonin'ny baiko docker-compose up:

$ docker-compose down

Ity baiko ity dia manonta ny diarin'ny serivisy:

$ docker-compose logs -f [service name]

Ohatra, ao amin'ny tetikasantsika dia azo ampiasaina amin'ity endrika ity: $ docker-compose logs -f [service name].

Amin'ny fampiasana ity baiko ity dia azonao atao ny mampiseho lisitry ny container:

$ docker-compose ps

Ity baiko ity dia ahafahanao manatanteraka baiko ao anaty container mihazakazaka:

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

Ohatra, mety ho toy izao izany: docker-compose exec server ls.

Ity baiko ity dia ahafahanao mampiseho lisitry ny sary:

$ docker-compose images

vokatra

Nijery ny fototry ny fiaraha-miasa amin'ny teknolojia Docker Compose izahay, ny fahalalana izay ahafahanao mampiasa ity teknolojia ity ary, raha tianao, dia manomboka mandalina azy io amin'ny lalindalina kokoa. eto tahiry misy ny kaody ho an'ny tetikasa nojerentsika teto.

Ry mpamaky malala! Mampiasa Docker Compose amin'ny tetikasanao ve ianao?

Torolàlana ho an'ny vao manomboka amin'ny Docker Compose

Source: www.habr.com

Add a comment