ʻO ka mea kākau o ka ʻatikala, ʻo ka unuhi a mākou e paʻi nei i kēia lā, ʻōlelo ʻo ia i manaʻo ʻia no kēlā mau mea hoʻomohala makemake e aʻo iā Docker Compose a ke neʻe nei i ka hana ʻana i kā lākou mea kūʻai aku-server mua me Docker. Ua manaʻo ʻia ua kamaʻāina ka mea heluhelu o kēia mea i nā kumu o Docker. Inā ʻaʻole kēia ka hihia, hiki iā ʻoe ke nānā
He aha ka Docker Compose?
ʻO Docker Compose kahi mea hana me Docker. Hoʻolālā ʻia e hoʻoponopono i nā pilikia e pili ana i ka hoʻolaha ʻana o ka papahana.
ʻOiai e aʻo ana i nā kumu kumu o Docker, ua ʻike paha ʻoe i ka hana ʻana i nā noi maʻalahi e hana kūʻokoʻa a ʻaʻole hilinaʻi, no ka laʻana, i nā kumu ʻikepili waho a i ʻole kekahi mau lawelawe. I ka hoʻomaʻamaʻa ʻana, he kakaikahi nā noi like. Hoʻokomo pinepine nā papahana maoli i kahi pūʻulu holoʻokoʻa o nā noi e hana pū ana.
Pehea ʻoe e ʻike ai inā pono ʻoe e hoʻohana i ka Docker Compose i ka wā e kau ana i kahi papahana? He mea maʻalahi loa. Inā hoʻohana ʻoe i nā lawelawe he nui e hana i kēia papahana, a laila hiki ke hoʻohana ʻia ʻo Docker Compose. Eia kekahi laʻana, i kahi kūlana kahi e hana ai lākou i kahi pūnaewele e pono e hoʻohui i kahi waihona i mea e hōʻoia ai i nā mea hoʻohana. Hiki i ia papahana ke komo i ʻelua mau lawelawe - ʻo ka mea e hōʻoiaʻiʻo i ka hana o ka pūnaewele, a ʻo ka mea nāna e mālama i ka waihona.
ʻO ka ʻenehana Docker Compose, e wehewehe iā ia ma kahi ala maʻalahi, hiki iā ʻoe ke hoʻomaka i nā lawelawe he nui me ka hoʻohana ʻana i hoʻokahi kauoha.
ʻO ka ʻokoʻa ma waena o Docker a me Docker Compose
Hoʻohana ʻia ʻo Docker e hoʻokele i nā pahu pākahi (lawelawe) i hana i kahi noi.
Hoʻohana ʻia ʻo Docker Compose e hoʻokele i nā pahu he nui i hana i kahi noi. Hāʻawi kēia mea hana i nā mana like me Docker, akā hiki iā ʻoe ke hana me nā noi paʻakikī.
ʻO Docker (mea pahu hoʻokahi) a me Docker Compose (nā pahu he nui)
Ka hihia hoʻohana maʻamau no Docker Compose
Aia ʻo Docker Compose, ma nā lima ʻākau, kahi mea hana ikaika loa e hiki ai iā ʻoe ke hoʻonohonoho wikiwiki i nā noi me nā hale hana paʻakikī. I kēia manawa, e nānā mākou i kahi hiʻohiʻona o ka hoʻohana pono ʻana o Docker Compose, ʻo ka nānā ʻana e hiki ai iā ʻoe ke loiloi i nā pono e hoʻohana ai iā Docker Compose e hāʻawi iā ʻoe.
E noʻonoʻo ʻoe he mea hoʻomohala i kahi papahana pūnaewele. Aia kēia papahana i ʻelua mau pūnaewele. ʻO ka mea mua e hiki ai i nā poʻe ʻoihana ke hana i nā hale kūʻai pūnaewele me nā kaomi liʻiliʻi. ʻO ka lua e pili ana i ke kākoʻo o nā mea kūʻai aku. Hoʻopili kēia mau pūnaewele ʻelua me ka waihona like.
Ke ulu nui nei kāu papahana, a ua ʻike ʻia ʻaʻole lawa ka mana o ke kikowaena e holo ai. ʻO ka hopena, hoʻoholo ʻoe e hoʻoneʻe i ka papahana holoʻokoʻa i kahi mīkini ʻē aʻe.
ʻO ka mea pōʻino, ʻaʻole ʻoe i hoʻohana i kahi mea e like me Docker Compose. No laila, pono ʻoe e hoʻololi a hoʻonohonoho hou i nā lawelawe i kēlā me kēia manawa, me ka manaʻo ʻaʻole ʻoe e poina i kekahi mea i ke kaʻina hana.
Inā ʻoe e hoʻohana i ka Docker Compose, a laila ʻo ka neʻe ʻana i kāu papahana i kahi kikowaena hou kahi mea hiki ke hoʻoholo ʻia ma ka holo ʻana i kekahi mau kauoha. I mea e hoʻopau ai i ka hoʻoili ʻana o ka papahana i kahi wahi hou, pono ʻoe e hana i kekahi mau hoʻonohonoho a hoʻouka i kahi kope kope o ka waihona i ka kikowaena hou.
Ke hoʻomohala nei i kahi noi mea kūʻai aku me ka hoʻohana ʻana iā Docker Compose
I kēia manawa ua ʻike ʻoe i ka mea a mākou e hoʻohana ai iā Docker Compose, ʻo ia ka manawa e hana ai i kāu noi mea kūʻai-server mua e hoʻohana ana i kēia hāmeʻa. ʻO ia, ke kamaʻilio nei mākou e pili ana i ka hoʻomohala ʻana i kahi pūnaewele liʻiliʻi (server) ma Python hiki ke hoʻopuka i kahi faila me kahi ʻāpana kikokikona. Noi ʻia kēia faila mai ke kikowaena e kahi papahana (mea kūʻai aku), i kākau pū ʻia ma Python. Ma hope o ka loaʻa ʻana o kahi faila mai ke kikowaena, hōʻike ka papahana i ka kikokikona i mālama ʻia i loko o ka pale.
E ʻoluʻolu e manaʻo mākou ua loaʻa iā ʻoe kahi ʻike maʻamau o Docker a ua hoʻokomo ʻia ʻo Docker platform.
E hoʻomaka kākou e hana i ka papahana.
▍1. Ke hana ʻana i kahi papahana
No ke kūkulu ʻana i kāu noi mea kūʻai-server mua, manaʻo wau e hoʻomaka ʻoe ma ka hana ʻana i kahi waihona papahana. Pono e loaʻa nā faila a me nā waihona:
- waihona
docker-compose.yml
. ʻO kēia kahi faila Docker Compose e loaʻa i nā ʻōkuhi e pono ai e hoʻomaka a hoʻonohonoho i nā lawelawe. - waihona
server
. Loaʻa iā ia nā faila e pono ai e hoʻomau i ka holo ʻana o ke kikowaena. - waihona
client
. E loaʻa nā faila noi mea kūʻai ma ʻaneʻi.
ʻO ka hopena, e like me kēia nā ʻike o ka waihona nui o kāu papahana:
.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file
▍2. Ke hana ʻana i kahi kikowaena
Maanei, i ke kaʻina hana o kahi kikowaena, e hoʻopā mākou i kekahi mau mea maʻamau e pili ana iā Docker.
2a. Ke hana nei i nā faila
E hele i ka waihona server
a hana i kēia mau faila i loko:
- waihona
server.py
. Loaʻa iā ia ka code server. - waihona
index.html
. E loaʻa i kēia faila kahi ʻāpana kikokikona e hoʻopuka ka palapala noi. - waihona
Dockerfile
. He faila Docker kēia e loaʻa ai nā ʻōlelo aʻoaʻo e pono ai e hana i ke kaiapuni kikowaena.
ʻO kēia ke ʻano o nā mea o kāu waihona server/
:
.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files
2b. Hoʻoponopono i kahi faila Python.
Hoʻohui i ka faila server.py
keia code:
#!/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()
Hāʻawi kēia code iā ʻoe e hana i kahi kikowaena pūnaewele maʻalahi. Hāʻawi ʻo ia i nā mea kūʻai aku i ka faila index.html
, e hōʻike ʻia nā mea i loko ma ka ʻaoʻao pūnaewele.
2c. Hoʻoponopono i kahi faila HTML
E waiho index.html
hoʻohui i kēia kikokikona:
Docker-Compose is magic!
E hoʻouna ʻia kēia kikokikona i ka mea kūʻai aku.
2d. Hoʻoponopono i ka Dockerfile
I kēia manawa e hana mākou i kahi faila maʻalahi Dockerfile
, nona ke kuleana no ka hoʻonohonoho ʻana i ke kaiapuni runtime no ke kikowaena Python. Ma keʻano he kumu no ke kiʻi i hanaʻia, e hoʻohana mākou
# На всякий случай напоминаю, что 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/
I kēia manawa e hoʻomaka kākou e hana i ka mea kūʻai.
▍3. Ke hana ʻana i kahi mea kūʻai aku
ʻOiai e hana ana i ka ʻaoʻao o ka mea kūʻai aku o kā mākou papahana, e hoʻomanaʻo mākou i kekahi mau kumu Docker ma ke ala.
3a. Ke hana nei i nā faila
E hele i kāu waihona papahana client
a hana i kēia mau faila i loko:
- waihona
client.py
. E ʻike ʻia ka code client ma aneʻi. - waihona
Dockerfile
. Hana like kēia faila me kahi faila like i loko o ka waihona kikowaena. ʻO ia hoʻi, aia nā ʻōlelo kuhikuhi e wehewehe ana i ka hana ʻana i kahi kaiapuni no ka hoʻokō ʻana i ka code client.
ʻO ka hopena, kāu waihona client/
ma keia pae o ka hana e like me keia:
.
├── client.py
└── Dockerfile
0 directories, 2 files
3b. Hoʻoponopono i kahi faila Python
Hoʻohui i ka faila client.py
keia code:
#!/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()
Me kēia code, hiki i ka mea kūʻai aku ke hoʻoiho i ka ʻikepili mai ke kikowaena a hōʻike iā ia ma ka pale.
3c. Hoʻoponopono i ka Dockerfile
E like me ka hihia o ke kikowaena, hana mākou i kahi maʻalahi Dockerfile
, kuleana no ka hoʻokumu ʻana i ke kaiapuni kahi e holo ai ka noi mea kūʻai Python. Eia ka code client Dockerfile
:
# То же самое, что и в серверном Dockerfile.
FROM python:latest
# Импортируем 'client.py' в папку '/client/'.
ADD client.py /client/
# Устанавливаем в качестве рабочей директории '/client/'.
WORKDIR /client/
▍4. Docker Compose
E like me kāu i ʻike ai, ua hana mākou i ʻelua mau papahana like ʻole: kahi kikowaena a me kahi mea kūʻai aku. Loaʻa i kēlā me kēia o lākou kona faila ponoʻī Dockerfile
. I kēia manawa,ʻaʻole i hala nā mea a pau ma mua o nā kumu o ka hanaʻana me Docker. I kēia manawa hoʻomaka mākou me Docker Compose. No ka hana ʻana i kēia, e hele kāua i ka faila docker-compose.yml
, aia ma ka waihona kumu papahana.
E ʻoluʻolu, ma aneʻi ʻaʻole mākou e hoʻāʻo e uhi piha i nā kauoha āpau i hiki ke hoʻohana ʻia docker-compose.yml
. ʻO kā mākou pahuhopu nui ka hele ʻana i kahi hiʻohiʻona kūpono e hāʻawi iā ʻoe i ka ʻike kumu o Docker Compose.
Eia ke code e hoʻokomo i ka 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. Ke kūkulu ʻana i ka papahana
Ma hope o loko docker-compose.yml
Ua hoʻokomo ʻia nā ʻōlelo aʻoaʻo a pau, pono e hōʻuluʻulu ʻia ka papahana. Ua like kēia ʻanuʻu o kā mākou hana me ka hoʻohana ʻana i ke kauoha docker build
, akā pili ke kauoha i kekahi mau lawelawe:
$ docker-compose build
▍6. Hoʻomaka o ka papahana
I kēia manawa ua ʻākoakoa ka papahana, ʻo ia ka manawa e hoʻomaka ai. ʻO kēia ʻanuʻu o kā mākou hana e pili ana i ka ʻanuʻu i ka wā e hana ai me nā pahu pākahi, hoʻokō ʻia ke kauoha docker run
:
$ docker-compose up
Ma hope o ka hoʻokō ʻana i kēia kauoha, pono e hōʻike ʻia ka kikokikona i hoʻoiho ʻia e ka mea kūʻai mai ka kikowaena ma ka pahu: Docker-Compose is magic!
.
E like me ka mea i haʻi mua ʻia, hoʻohana ke kikowaena i ke awa kamepiula 1234
e lawelawe i nā noi o nā mea kūʻai aku. No laila, inā ʻoe e hele i ka helu wahi ma kāu polokalamu kele pūnaewele Docker-Compose is magic!
.
Nā Kauoha Pono
E nānā kāua i kekahi mau kauoha e ʻike pono ai ʻoe i ka hana ʻana me Docker Compose.
Hāʻawi kēia kauoha iā ʻoe e kāpae a holoi i nā pahu a me nā kumuwaiwai ʻē aʻe i hana ʻia e ke kauoha docker-compose up
:
$ docker-compose down
Paʻi kēia kauoha i nā moʻolelo lawelawe:
$ docker-compose logs -f [service name]
No ka laʻana, i kā mākou papahana hiki ke hoʻohana ʻia i kēia ʻano: $ docker-compose logs -f [service name]
.
Ke hoʻohana nei i kēia kauoha hiki iā ʻoe ke hōʻike i kahi papa inoa o nā ipu:
$ docker-compose ps
ʻAe kēia kauoha iā ʻoe e hoʻokō i kahi kauoha i loko o kahi pahu holo:
$ docker-compose exec [service name] [command]
No ka laʻana, penei paha ia: docker-compose exec server ls
.
ʻAe kēia kauoha iā ʻoe e hōʻike i kahi papa inoa o nā kiʻi:
$ docker-compose images
Nā hopena
Ua nānā mākou i nā kumu o ka hana ʻana me ka ʻenehana Docker Compose, ʻo ka ʻike e hiki ai iā ʻoe ke hoʻohana i kēia ʻenehana a, inā makemake ʻia, e hoʻomaka e aʻo i ka hohonu.
E nā mea heluhelu aloha! Ke hoʻohana nei ʻoe iā Docker Compose i kāu mau papahana?
Source: www.habr.com