He alakaʻi no ka mea hoʻomaka i ka Docker Compose

ʻ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ā kēia moʻo o nā mea ma kēia pou e uhi ana i nā kumu kumu Docker me nā kumu kumu Kubernetes, a kēia ʻatikala no ka poʻe hoʻomaka.

He alakaʻi no ka mea hoʻomaka i ka Docker Compose

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ī.

He alakaʻi no ka mea hoʻomaka i ka Docker Compose
ʻ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 ma ke ano oihana, i hoʻolālā ʻia e holo i nā papahana i kākau ʻia ma Python. Eia ka ʻike o ka 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/

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 http://localhost:1234/, e hōʻike ana i kahi ʻaoʻao me ka kikokikona 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. ʻaneʻi kahi waihona me ke code no ka papahana a mākou i nānā ai ma aneʻi.

E nā mea heluhelu aloha! Ke hoʻohana nei ʻoe iā Docker Compose i kāu mau papahana?

He alakaʻi no ka mea hoʻomaka i ka Docker Compose

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka