Ko te kaituhi o te tuhinga, ko te whakamaoritanga e whakaputahia ana e matou i tenei ra, e kii ana mo nga kaiwhakawhanake e hiahia ana ki te ako i te Docker Compose me te anga whakamua ki te hanga i to raatau tono-kaitono tuatahi ma te whakamahi i a Docker. E kiia ana kei te mohio te kaipanui o tenei rauemi ki nga kaupapa o Docker. Mena kaore tenei, ka taea e koe te tirotiro
He aha te Docker Compose?
Ko Docker Compose he taputapu kei roto i a Docker. I hangaia hei whakaoti rapanga e pa ana ki te whakatakoto kaupapa.
I a koe e ako ana i nga kaupapa o Docker, kua tupono pea koe ki te hanga i nga tono ngawari e mahi motuhake ana kaore e whakawhirinaki, hei tauira, ki nga puna raraunga o waho, ki etahi ratonga ranei. I roto i nga mahi, he onge nga tono penei. Ko te nuinga o nga kaupapa ka uru mai he huinga tono katoa e mahi tahi ana.
Me pehea koe e mohio ai me whakamahi koe i te Docker Compose i te tuku kaupapa? Ko te mau tino māmā. Mena ka whakamahi koe i nga ratonga maha hei mahi i tenei kaupapa, tera pea ka whai hua a Docker Compose. Hei tauira, i roto i tetahi ahuatanga ka hangaia e ratou he paetukutuku e tika ana kia hono atu ki tetahi papaa raraunga hei whakamotuhēhē i ngā kaiwhakamahi. E rua pea nga ratonga penei i te kaupapa - ko tetahi e whakarite ana i te mahi o te waahi, me tetahi e mau ana ki te pupuri i te putunga korero.
Hangarau Hangarau a Docker Compose, ki te whakaahua ngawari, ka taea e koe te whakarewa i nga ratonga maha me te whakahau kotahi.
Te rereketanga i waenga i te Docker me te Docker Compose
Ka whakamahia a Docker ki te whakahaere i nga ipu takitahi (ratonga) hei hanga tono.
Ka whakamahia a Docker Compose ki te whakahaere i nga ipu maha hei hanga tono. Ko tenei taputapu he rite nga kaha ki a Docker, engari ka taea e koe te mahi me nga tono uaua ake.
Docker ( ipu kotahi) me Docker Compose (nga ipu maha)
Puhi whakamahi angamaheni mo Docker Compose
Ko Docker Compose, kei nga ringaringa matau, he taputapu tino kaha e taea ai e koe te tuku tere i nga tono me nga hoahoanga uaua. Inaianei ka titiro tatou ki tetahi tauira mo te whakamahi mahi a Docker Compose, ma te tātaritanga ka taea e koe te arotake i nga painga ka whakawhiwhia e te Docker Compose ki a koe.
Whakaarohia he kaiwhakawhanake koe i tetahi kaupapa tukutuku. E rua nga paetukutuku kei roto i tenei kaupapa. Ko te tuatahi ka taea e nga kaipakihi te hanga toa ipurangi me etahi paato noa. Ko te tuarua ko te tautoko i nga kaihoko. Ko enei pae e rua e mahi tahi ana me te papaunga raraunga kotahi.
Kei te piki haere te rongonui o to kaupapa, ka puta ko te mana o te tūmau e whakahaere ana kua kore e ranea. Ko te mutunga, ka whakatau koe ki te neke i te kaupapa katoa ki tetahi atu miihini.
Heoi, kaore koe i whakamahi i tetahi mea penei i te Docker Compose. Na reira, me whakawhiti me te whirihora ano i nga ratonga i ia wa, me te tumanako ka kore koe e wareware i tetahi mea i roto i te mahi.
Mena kei te whakamahi koe i te Docker Compose, ko te neke i to kaupapa ki tetahi tūmau hou he take ka taea te whakatau ma te whakahaere i etahi whakahau. Hei whakaoti i te whakawhitinga o te kaupapa ki tetahi waahi hou, me whakarite e koe etahi tautuhinga me te tuku i tetahi kape taapiri o te paataka korero ki te tūmau hou.
Te whakawhanake i tetahi tono-kaitono ma te whakamahi i te Docker Compose
Inaianei kua mohio koe he aha ta matou e whakamahi ana i te Docker Compose, kua tae ki te wa ki te hanga i to tono-kaitono tuatahi ma te whakamahi i tenei taputapu. Ara, e korero ana matou mo te whakawhanake i tetahi paetukutuku iti (tūmau) i roto i te Python ka taea te whakaputa i tetahi konae me tetahi waahanga tuhinga. Ka tonohia tenei konae mai i te tūmau e tetahi papatono (kiritaki), he mea tuhi ano ki te reo Python. I muri i te whiwhinga i tetahi konae mai i te tūmau, ka whakaatuhia e te papatono nga tuhinga e rongoa ana ki roto i te mata.
Kia mahara mai kei te whakaaro matou he maaramatanga taketake to Docker me te mea kua whakauruhia e koe te papaahi Docker.
Me timata taatau ki te mahi i te kaupapa.
▍1. Te Waihanga Kaupapa
Hei hanga i to tono-kaitono tuatahi, ka whakaaro ahau kia timata koe ma te hanga i tetahi kōpaki kaupapa. Me whai i nga konae me nga kōpaki e whai ake nei:
- kōnae
docker-compose.yml
. He konae Docker Compose tenei kei roto nga tohutohu hei tiimata me te whirihora i nga ratonga. - kōpaki
server
. Kei roto nga konae e tika ana kia haere tonu te tūmau. - kōpaki
client
. Ka kitea nga konae tono a te kiritaki ki konei.
Ko te mutunga, me penei te ahua o nga ihirangi o te kōpaki matua o to kaupapa:
.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file
▍2. Te hanga tūmau
I konei, i roto i te hanga i tetahi kaimau, ka pa atu matou ki etahi mea taketake mo Docker.
2a. Te hanga kōnae
Haere ki te kōpaki server
ka hanga i nga konae e whai ake nei ki roto:
- kōnae
server.py
. Kei roto te waehere tūmau. - kōnae
index.html
. Kei roto i tenei konae tetahi waahanga kuputuhi hei whakaputa ma te tono kiritaki. - kōnae
Dockerfile
. He kōnae Docker tenei kei roto nga tohutohu e hiahiatia ana hei hanga i te taiao tūmau.
Koinei te ahua o nga ihirangi o to kōpaki server/
:
.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files
2b. Te whakatika i te konae Python.
Tāpiri ki te kōnae server.py
te waehere e whai ake nei:
#!/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()
Ma tenei waehere ka taea e koe te hanga i tetahi tūmau tukutuku ngawari. Ka hoatu e ia ki nga kaihoko te konae index.html
, ko nga mea o roto ka whakaatuhia a muri ake nei ki te wharangi paetukutuku.
2c. Te whakatika i tetahi Kōnae HTML
Ki te konae index.html
tāpirihia te kuputuhi e whai ake nei:
Docker-Compose is magic!
Ka tukuna tenei kuputuhi ki te kiritaki.
2d. Te whakatika i te Dockerfile
Inaianei ka hanga e matou he konae ngawari Dockerfile
, ko wai te kawenga mo te whakarite i te waahi whakahaere mo te tūmau Python. Hei turanga mo te ahua hanga, ka whakamahia e matou
# На всякий случай напоминаю, что 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/
Inaianei me timata taatau ki te mahi i runga i te kaihoko.
▍3. Te hanga kiritaki
I te wa e hanga ana i te taha kiritaki o ta maatau kaupapa, ka maumahara matou ki etahi kaupapa Docker i te huarahi.
3a. Te hanga kōnae
Haere ki to kōpaki kaupapa client
ka hanga i nga konae e whai ake nei ki roto:
- kōnae
client.py
. Ka noho te waehere kiritaki ki konei. - kōnae
Dockerfile
. He rite tonu te mahi a tenei konae ki tetahi konae i roto i te kōpaki tūmau. Ara, kei roto nga tohutohu e whakaatu ana me pehea te hanga i tetahi taiao mo te whakahaere waehere kiritaki.
Ko te mutunga, ko to kōpaki client/
i tenei wahanga mahi me penei te ahua:
.
├── client.py
└── Dockerfile
0 directories, 2 files
3b. Te whakatika i te konae Python
Tāpiri ki te kōnae client.py
te waehere e whai ake nei:
#!/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()
Ma tenei waehere, ka taea e te tono a te kiritaki te tango raraunga mai i te tūmau ka whakaatu ki te mata.
3c. Te whakatika i te Dockerfile
Ka rite ki te take o te tūmau, ka hangaia e matou he ngawari Dockerfile
, te kawenga mo te hanga i te taiao e rere ai te tono a te kiritaki Python. Anei te waehere kiritaki Dockerfile
:
# То же самое, что и в серверном Dockerfile.
FROM python:latest
# Импортируем 'client.py' в папку '/client/'.
ADD client.py /client/
# Устанавливаем в качестве рабочей директории '/client/'.
WORKDIR /client/
▍4. Tito Docker
Kua kite pea koe, e rua nga kaupapa rereke i hangaia e matou: he tūmau me te kiritaki. Kei ia o ratou ake konae Dockerfile
. I tenei wa, ko nga mea katoa kua pa ki tua atu i nga kaupapa o te mahi tahi me Docker. Inaianei kua timata tatou me Docker Compose. Ki te mahi i tenei, me haere ki te konae docker-compose.yml
, kei roto i te kōpaki pakiaka kaupapa.
Kia mahara kei konei kaore matou e ngana ana ki te kapi katoa i nga whakahau ka taea te whakamahi docker-compose.yml
. Ko ta matou whainga matua ko te haere i roto i tetahi tauira whaihua e hoatu ai ki a koe te matauranga taketake o Docker Compose.
Anei te waehere hei whakauru ki te konae 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. Te hanga i te kaupapa
I muri i roto docker-compose.yml
Kua whakauruhia nga tohutohu e tika ana, me huihui te kaupapa. Ko tenei taahiraa o ta maatau mahi he rite ki te whakamahi i te whakahau docker build
, engari ko te whakahau e pa ana ki te maha o nga ratonga:
$ docker-compose build
▍6. Te whakarewanga o te kaupapa
Inaianei kua huihui te kaupapa, kua tae ki te wa ki te whakarewa. Ko tenei taahiraa o a maatau mahi e rite ana ki te taahiraa e mahi ana me nga ipu takitahi, ka mahia te whakahau docker run
:
$ docker-compose up
Whai muri i te mahi i tenei whakahau, ka puta te kupu i tangohia e te kiritaki mai i te tūmau ki te tauranga: Docker-Compose is magic!
.
Ka rite ki te korero kua korerohia, ka whakamahia e te tūmau te tauranga rorohiko 1234
ki nga tono a nga kaihoko. No reira, ki te haere koe ki te wahitau kei to kaitirotiro Docker-Compose is magic!
.
Nga Tono Whaihua
Tirohia etahi o nga whakahau ka kitea e koe he pai i te wa e mahi ana koe me Docker Compose.
Ma tenei tono ka taea e koe te whakamutu me te whakakore i nga ipu me etahi atu rauemi i hangaia e te whakahau docker-compose up
:
$ docker-compose down
Ka tā tēnei whakahau i ngā rangitaki ratonga:
$ docker-compose logs -f [service name]
Hei tauira, i roto i ta maatau kaupapa ka taea te whakamahi i tenei ahua: $ docker-compose logs -f [service name]
.
Ma te whakamahi i tenei whakahau ka taea e koe te whakaatu i te rarangi o nga ipu:
$ docker-compose ps
Ma tenei tono ka taea e koe te whakahaere i tetahi whakahau i roto i te ipu rere:
$ docker-compose exec [service name] [command]
Hei tauira, penei pea te ahua: docker-compose exec server ls
.
Ma tenei tono ka taea e koe te whakaatu rarangi whakaahua:
$ docker-compose images
Ngā putanga
Kua titiro matou ki nga kaupapa o te mahi tahi me te hangarau Docker Compose, ko te mohiotanga ka taea e koe te whakamahi i tenei hangarau, a, ki te hiahia, ka timata ki te ako i te hohonu.
E nga kaipānui aroha! Kei te whakamahi koe i te Docker Compose ki o kaupapa?
Source: will.com