He Aratohu a te Kaimatamata ki te Tito Docker

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 tenei raupapa rauemi kei runga tenei pou e hipoki ana i nga kaupapa Docker me nga kaupapa taketake o Kubernetes, me tenei tuhinga mo te hunga timata.

He Aratohu a te Kaimatamata ki te Tito Docker

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.

He Aratohu a te Kaimatamata ki te Tito Docker
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 i roto i te tikanga mana, i hangaia hei whakahaere i nga kaupapa kua tuhia ki te Python. Anei nga korero o te 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/

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 http://localhost:1234/, ka whakaatu i tetahi wharangi whai kupu 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. konei he putunga me te waehere mo te kaupapa i tirohia e matou i konei.

E nga kaipānui aroha! Kei te whakamahi koe i te Docker Compose ki o kaupapa?

He Aratohu a te Kaimatamata ki te Tito Docker

Source: will.com

Tāpiri i te kōrero