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
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.
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
# На всякий случай напоминаю, что 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 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.
Lau faitau le au faitau! E te fa'aogaina le Docker Compose i au galuega faatino?
puna: www.habr.com