Se Fa'ata'ita'iga a le Amata i le Docker Compose

O le tusitala o le tusiga, o le faʻaliliuga lea o loʻo matou lolomiina i aso nei, fai mai ua faʻamoemoeina mo na tagata atiaʻe o loʻo fia aʻoaʻoina le Docker Compose ma o loʻo agaʻi atu i le fatuina o la latou talosaga muamua-server e faʻaaoga ai Docker. E faʻapea o le tagata faitau o lenei mea e masani i faʻavae o Docker. Afai e le o le tulaga lea, e mafai ona e vaʻai i lenei faasologa o meafaitino i luga lenei meli e aofia ai Docker faʻavae faʻatasi ma Kubernetes faʻavae, ma lenei tusiga mo tagata amata.

Se Fa'ata'ita'iga a le Amata i le Docker Compose

O le a le Docker Compose?

Docker Compose o se meafaigaluega e aofia ai ma Docker. Ua mamanuina e foia ai faafitauli e fesoʻotaʻi ma le faʻatulagaina o poloketi.

Aʻo e aʻoaʻoina faʻavae o Docker, atonu na e feagai ma le fatuina o talosaga faigofie e galue tutoʻatasi ma e le faʻalagolago, mo se faʻataʻitaʻiga, i luga o faʻamatalaga mai fafo poʻo luga o nisi auaunaga. I le fa'atinoga, e seāseā lava fa'apenei. O poloketi moni e masani ona aofia ai se seti atoa o talosaga e galulue faʻatasi.

E faʻafefea ona e iloa pe e te manaʻomia le faʻaogaina o le Docker Compose pe a faʻapipiʻi se poloketi? E matua faigofie lava. Afai e te faʻaogaina le tele o auʻaunaga e faʻaoga ai lenei poloketi, ona mafai lea e Docker Compose ona aoga. Mo se faʻataʻitaʻiga, i se tulaga latou te fatuina ai se upega tafaʻilagi e manaʻomia le faʻafesoʻotaʻi i se faʻamaumauga ina ia faʻamaonia ai tagata faʻaoga. O sea poloketi e mafai ona aofia ai ni tautua se lua - o le tasi e faʻamautinoa le faʻaogaina o le saite, ma le tasi e nafa ma le tausia o faʻamaumauga.

Tekinolosi Docker Compose, e faʻamatalaina i se auala faigofie, faʻatagaina oe e faʻalauiloa le tele o auaunaga i le tasi poloaiga.

Eseesega i le va o Docker ma Docker Compose

Docker e faʻaaogaina e pulea ai pusa taʻitasi (auʻaunaga) e fai ai se talosaga.

Docker Compose e faʻaaogaina e faʻatautaia ai le tele o koneteina e fai ai se talosaga. O lenei meafaigaluega e ofoina atu tutusa gafatia e pei o Docker, ae faʻatagaina oe e galue ma faʻaoga faigata.

Se Fa'ata'ita'iga a le Amata i le Docker Compose
Docker (koneteina tasi) ma Docker Compose (tele koneteina)

Fa'aoga masani mo Docker Compose

O le Docker Compose o loʻo, i lima taumatau, o se meafaigaluega sili ona mamana e faʻatagaina oe e vave faʻapipiʻi tusi talosaga ma fausaga faʻalavelave. O lenei o le a tatou vaʻavaʻai i se faʻataʻitaʻiga o le faʻaaogaina o le Docker Compose, o le auʻiliʻiliga o le a mafai ai e oe ona iloilo faʻamanuiaga e faʻaaogaina e le Docker Compose o le a avatu ia te oe.

Va'ai faalemafaufau o oe o se tagata e faia se poloketi i luga o le initaneti. O lenei poloketi e aofia ai upega tafaʻilagi e lua. O le mea muamua e mafai ai e tagata fai pisinisi ona fatuina faleoloa i luga ole laiga ma na o ni nai kiliki. O le lona lua e faʻatatau i le lagolago a tagata faʻatau. O nei saite e lua e fegalegaleai ma le database lava e tasi.

O lau poloketi o loʻo faʻateleina ma sili atu ona lauiloa, ma e foliga mai ua le lava le malosi o le server o loʻo taʻavale ai. O se taunuuga, e te filifili e faʻanofo le poloketi atoa i se isi masini.

Ae paga lea, e te leʻi faʻaaogaina se mea e pei o Docker Compose. O le mea lea, e tatau ona e faʻafeiloaʻi ma toe faʻaleleia auʻaunaga taʻitasi, faʻamoemoe o le a le galo ia te oe se mea i le faagasologa.

Afai e te faʻaaogaina Docker Compose, ona faʻanofoina lea o lau poloketi i se server fou o se mataupu e mafai ona foia e ala i le faʻatinoina o ni nai tulafono. Ina ia faʻamaeʻaina le fesiitaiga o le poloketi i se nofoaga fou, e naʻo oe e manaʻomia le faia o ni faʻatulagaga ma tuʻuina atu se kopi faʻamaumauga o le database i le server fou.

Atia'e se talosaga a le tagata fa'atau-server e fa'aaoga ai le Docker Compose

O lea la ua e iloa le mea o le a matou faʻaogaina ai le Docker Compose, ua oʻo i le taimi e fai ai lau talosaga muamua a le tagata faʻatau-server e faʻaaoga ai lenei meafaigaluega. O lona uiga, o loʻo matou talanoa e uiga i le atinaʻeina o se upega tafaʻilagi laiti (server) i le Python e mafai ona faʻapipiʻiina se faila ma se vaega o tusitusiga. O lenei faila e talosagaina mai le 'auʻaunaga e se polokalama (tagata faʻatau), na tusia foi i le Python. A maeʻa ona maua se faila mai le 'auʻaunaga, e faʻaalia e le polokalama le tusitusiga o loʻo teuina i totonu i luga o le lau.

Faamolemole ia matau matou te manatu o loʻo ia te oe se malamalamaaga masani o Docker ma ua uma ona faʻapipiʻiina le Docker platform.

Tatou amata galue i le poloketi.

▍1. Fausia se Poloketi

Ina ia fausia lau talosaga muamua-server, ou te fautua atu e te amata i le fatuina o se faila o galuega. E tatau ona iai faila ma faila nei:

  • faila docker-compose.yml. Ole Docker Compose faila lea o le a iai faʻatonuga e manaʻomia e amata ma faʻatulagaina auaunaga.
  • Faila server. O le a iai faila e mana'omia e fa'aauau ai le fa'agaoioia o le server.
  • Faila client. O faila talosaga a tagata o tausia o le a maua iinei.

O se taunuuga, o mea o loʻo i totonu o le faila autu o lau poloketi e tatau ona pei o lenei:

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

▍2. Fausia se server

O iinei, i le faagasologa o le fatuina o se sapalai, o le a matou paʻi atu i nisi o mea taua e uiga i Docker.

2a. Fausia faila

Alu i le faila server ma faia faila nei i totonu:

  • faila server.py. O le a iai le code server.
  • faila index.html. O le faila lea o le a iai se fasi tusitusiga e tatau ona fa'atino e le tagata o tausia.
  • faila Dockerfile. O se faila Docker lea o le a aofia ai faʻatonuga e manaʻomia e fatuina ai le siosiomaga o le server.

O le mea lea e tatau ona foliga i totonu o lau faila server/:

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

2b. Fa'asa'o se faila Python.

Fa'aopoopo i le faila server.py le code lea:

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

O lenei code e mafai ai ona e fatuina se upega tafaʻilagi faigofie. O le a ia tuʻuina atu i tagata faʻatau le faila index.html, o mea o lo'o i totonu o le a fa'aalia mulimuli ane i luga o le itulau web.

2c. Fa'atonu se faila HTML

Ia faila index.html fa'aopoopo le tusitusiga lea:

Docker-Compose is magic!

O le a lafo atu lenei tusitusiga i le kalani.

2d. Fa'asa'o le Dockerfile

O lenei o le a tatou fatuina se faila faigofie Dockerfile, o le a nafa ma le faʻatulagaina o le siʻosiʻomaga taimi mo le Python server. I le avea ai ma faavae mo le ata na faia, o le a matou faʻaaogaina i se faiga aloaia, ua fuafuaina e faʻatautaia polokalame tusia i le Python. O mea nei o le 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/

Ia tatou amata galue i le kalani.

▍3. Fausia se tagata o tausia

A o fatuina le itu o tagata o tausia o la matou poloketi, matou te manatua nisi o faʻavae Docker i luga o le ala.

3a. Fausia faila

Alu i lau faila o le poloketi client ma faia faila nei i totonu:

  • faila client.py. O le a maua iinei le code client.
  • faila Dockerfile. O lenei faila e tutusa le matafaioi ma se faila tutusa i le pusa server. O lona uiga, o loʻo i ai faʻatonuga e faʻamatalaina pe faʻapefea ona fatuina se siosiomaga mo le faʻatinoina o le code client.

O se taunuuga, lau faila client/ i lenei laasaga o le galuega e tatau ona foliga faapenei:

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

3b. Fa'asa'o se faila Python

Fa'aopoopo i le faila client.py le code lea:

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

Faatasi ai ma lenei code, e mafai e le tagata o tausia le talosaga ona sii mai faʻamaumauga mai le server ma faʻaalia i luga o le lau.

3c. Fa'asa'o le Dockerfile

E pei o le tulaga o le server, matou te fatuina se faigofie Dockerfile, e nafa ma le fatuina o le siʻosiʻomaga lea o le a faʻaogaina ai le Python client application. O le code a le tagata fa'atau Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

E pei ona e maitauina, na matou faia ni poloketi eseese se lua: o se server ma se tagata fa'atau. E tofu i latou ma lana lava faila Dockerfile. E oʻo mai i le taimi nei, o mea uma na tutupu e leʻi sili atu nai lo faʻavae o le galulue ma Docker. O lea ua tatou amata ile Docker Compose. Ina ia faia lenei mea, tatou alu i le faila docker-compose.yml, o loʻo i totonu o le faila aʻa o le poloketi.

Faamolemole ia matau o iinei matou te le o taumafai e ufiufi atoatoa uma poloaiga e mafai ona faʻaaogaina i totonu docker-compose.yml. O la matou sini autu o le savali i se faʻataʻitaʻiga faʻapitoa e tuʻuina atu ia te oe le malamalama masani o Docker Compose.

O le code lea e tu'u i le faila 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. Fausia le poloketi

Ina ua uma i totonu docker-compose.yml O faʻatonuga manaʻomia uma ua tuʻuina atu, e manaʻomia le faʻapipiʻiina o le poloketi. O lenei laasaga o la tatou galuega e tutusa ma le faʻaaogaina o le poloaiga docker build, ae o le faʻatonuga tutusa e talafeagai i le tele o auaunaga:

$ docker-compose build

▍6. Fa'alauiloa ole poloketi

O lea la ua fa'apotopoto le poloketi, ua o'o i le taimi e fa'alauiloa ai. O lenei laasaga o la tatou galuega e fetaui ma le laasaga lea, pe a galue ma pusa taʻitasi, e faʻataunuʻuina le poloaiga docker run:

$ docker-compose up

A maeʻa ona faʻatinoina lenei faʻatonuga, o le tusitusiga na sii mai e le kalani mai le 'auʻaunaga e tatau ona faʻaalia i le laina: Docker-Compose is magic!.

E pei ona taʻua muamua, e faʻaogaina e le 'auʻaunaga le pusa komepiuta 1234 e tautuaina talosaga a tagata o tausia. O le mea lea, afai e te alu i le tuatusi i lau suʻega http://localhost:1234/, o le a fa'aalia ai se itulau ma tusitusiga Docker-Compose is magic!.

Poloaiga aoga

Sei o tatou vaʻai i nisi o faʻatonuga e te ono aoga pe a galue ma Docker Compose.

O lenei poloaiga e mafai ai ona e taofi ma tape pusa ma isi punaoa na faia e le poloaiga docker-compose up:

$ docker-compose down

O lenei poloaiga e lolomi ai ogalaau o auaunaga:

$ docker-compose logs -f [service name]

Mo se faʻataʻitaʻiga, i la matou poloketi e mafai ona faʻaaogaina i lenei fomu: $ docker-compose logs -f [service name].

I le faʻaaogaina o lenei poloaiga e mafai ona e faʻaalia se lisi o pusa:

$ docker-compose ps

O lenei faʻatonuga e faʻatagaina oe e faʻatino se faʻatonuga i totonu o se koneteina taʻavale:

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

Mo se faʻataʻitaʻiga, atonu e pei o lenei: docker-compose exec server ls.

O lenei poloaiga e mafai ai ona e faʻaalia se lisi o ata:

$ docker-compose images

O taunuʻuga

Ua matou vaʻavaʻai i faʻavae o le galue ma Docker Compose tekinolosi, o le malamalama e mafai ai ona e faʻaogaina lenei tekinolosi ma, pe a manaʻomia, amata suʻesuʻe i le loloto atili. iinei se fale teu oloa ma le code mo le poloketi na matou tilotilo i ai iinei.

Lau faitau le au faitau! E te fa'aogaina le Docker Compose i au galuega faatino?

Se Fa'ata'ita'iga a le Amata i le Docker Compose

puna: www.habr.com

Faaopoopo i ai se faamatalaga