Tataiso ea ho Ngola ea Docker bakeng sa ba qalang

Sengoli sa sengoloa, phetolelo eo re e phatlalatsang kajeno, e re e etselitsoe batho ba ntlafatsang ba batlang ho ithuta Docker Compose mme ba hatela pele ho theha sesebelisoa sa bona sa pele sa bareki ba sebelisa Docker. Ho nahanoa hore 'mali oa boitsebiso bona o tloaelane le metheo ea Docker. Haeba sena ha se joalo, u ka sheba sena letoto la lisebelisoa ka sena poso e koahelang metheo ea Docker hammoho le metheo ea Kubernetes, le sena sengoloa bakeng sa ba qalang.

Tataiso ea ho Ngola ea Docker bakeng sa ba qalang

Docker Compose ke eng?

Docker Compose ke sesebelisoa se kenyellelitsoeng le Docker. E etselitsoe ho rarolla mathata a amanang le ho tsamaisoa ha morero.

Ha u ntse u ithuta metheo ea Docker, e kanna eaba u kopane le ts'ebetso ea lits'ebetso tse bonolo tse sebetsang ka boits'oaro ebile li sa itšetlehe, mohlala, mehloling ea data ea kantle kapa lits'ebeletso tse ling. Ha e le hantle, likopo tse joalo ha li fumanehe. Merero ea 'nete hangata e kenyelletsa lisebelisoa tse ngata tse sebetsang hammoho.

U tseba joang haeba u hloka ho sebelisa Docker Compose ha u tsamaisa morero? Ha e le hantle e bonolo haholo. Haeba u sebelisa lits'ebeletso tse ngata ho etsa hore projeke ena e sebetse, Docker Compose e kanna ea sebetsa. Ka mohlala, boemong boo ba bopang sebaka sa marang-rang se hlokang ho hokahana le database e le ho netefatsa basebelisi. Morero o joalo o ka ba le lits'ebeletso tse peli - e netefatsang ts'ebetso ea sebaka, le e ikarabellang bakeng sa ho boloka database.

Theknoloji ea Docker Compose, ho e hlalosa ka tsela e nolofalitsoeng, e u lumella ho qala litšebeletso tse ngata ka taelo e le 'ngoe.

Phapang lipakeng tsa Docker le Docker Compose

Docker e sebelisoa ho laola lijana (litšebeletso) tse etsang kopo.

Docker Compose e sebelisoa ho laola ka nako e le 'ngoe lijana tse ngata tse etsang kopo. Sesebelisoa sena se fana ka bokhoni bo tšoanang le ba Docker, empa se u lumella ho sebetsa ka lits'ebetso tse rarahaneng.

Tataiso ea ho Ngola ea Docker bakeng sa ba qalang
Docker (setshelo se le seng) le Docker Compose (lijana tse ngata)

Nyeoe e tloaelehileng ea tšebeliso bakeng sa Docker Compose

Docker Compose, e matsohong a nepahetseng, sesebelisoa se matla haholo se u lumellang hore u tsamaise lits'ebetso ka meralo e rarahaneng ea meralo. Joale re tla sheba mohlala oa tšebeliso e sebetsang ea Docker Compose, tlhahlobo ea eona e tla u lumella ho lekola melemo eo ho sebelisa Docker Compose ho tla u fa eona.

Nka hore u moqapi oa morero oa tepo. Morero ona o kenyelletsa liwebsaete tse peli. Ea pele e lumella batho ba khoebo ho theha mabenkele a marang-rang ka ho penya ho seng kae feela. Ea bobeli e lebisitsoe ho tšehetso ea bareki. Liwebsaete tsena tse peli li sebelisana le database e le 'ngoe.

Morero oa hau o ntse o tsebahala haholoanyane, 'me ho bonahala hore matla a seva eo e sebetsang ho eona ha a sa lekana. Ka lebaka leo, u etsa qeto ea ho fetisetsa morero oohle mochineng o mong.

Ka bomalimabe, ha ua sebelisa ntho e kang Docker Compose. Ka hona, o tla tlameha ho fetisetsa le ho lokisa lits'ebeletso ka nako e le 'ngoe, ka tšepo ea hore u ke ke ua lebala letho ts'ebetsong.

Haeba u sebelisa Docker Compose, joale ho fetisetsa morero oa hau ho seva se secha ke taba e ka rarolloang ka ho tsamaisa litaelo tse 'maloa. E le hore u phethe phetisetso ea morero sebakeng se secha, u hloka feela ho etsa litlhophiso tse ling le ho kenya kopi ea "backup" ea database ho seva se secha.

Ho nts'etsapele ts'ebeliso ea seva ea bareki ho sebelisa Docker Compose

Kaha joale ua tseba hore na re tla sebelisa Docker Compose bakeng sa eng, ke nako ea ho theha sesebelisoa sa hau sa pele sa bareki u sebelisa sesebelisoa sena. Ka mantsoe a mang, re bua ka ho theha sebaka sa marang-rang se senyenyane (seva) ho Python se ka hlahisang faele e nang le sekhechana sa mongolo. Faele ena e kopuoa ho tsoa ho seva ke lenaneo (moreki), hape e ngotsoeng ka Python. Kamora ho amohela faele ho tsoa ho seva, lenaneo le bonts'a mongolo o bolokiloeng ho eona skrineng.

Ka kopo hlokomela hore re nka hore u na le kutloisiso ea mantlha ea Docker le hore u se u ntse u e-na le sethala sa Docker se kentsoeng.

Ha re qale ho sebetsa morerong ona.

▍1. Ho theha Morero

Ho aha sesebelisoa sa hau sa pele sa bareki-server, ke khothaletsa hore u qale ka ho theha foldara ea projeke. E tlameha ho ba le lifaele le lifoldara tse latelang:

  • faele docker-compose.yml. Ena ke faele ea Docker Compose e tla ba le litaelo tse hlokahalang ho qala le ho lokisa lits'ebeletso.
  • ba foldara server. E tla ba le lifaele tse hlokahalang ho boloka seva se sebetsa.
  • ba foldara client. Lifaele tsa kopo ea bareki li tla fumaneha mona.

Ka lebaka leo, litaba tsa foldara e kholo ea projeke ea hau li lokela ho shebahala tjena:

.
├── client/
├── docker-compose.yml
└── server/
2 directories, 1 file

▍2. Ho theha seva

Mona, ts'ebetsong ea ho theha seva, re tla ama lintho tse ling tsa mantlha mabapi le Docker.

2a. Ho theha lifaele

Eya ho foldara server 'me u thehe lifaele tse latelang ho eona:

  • faele server.py. E tla ba le khoutu ea seva.
  • faele index.html. Faele ena e tla ba le sengoathoana sa mongolo seo sesebelisoa sa moreki se lokelang ho se hlahisa.
  • faele Dockerfile. Ena ke faele ea Docker e tla ba le litaelo tse hlokahalang ho theha tikoloho ea seva.

Sena ke kamoo likahare tsa foldara ea hau li lokelang ho shebahala kateng server/:

.
├── Dockerfile
├── index.html
└── server.py
0 directories, 3 files

2b. Ho hlophisa faele ea Python.

Kenya faeleng server.py khoutu e latelang:

#!/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()

Khoutu ena e u lumella ho etsa seva e bonolo ea webo. O tla fa bareki faele index.html, likahare tsa tsona hamorao li tla hlahisoa leqepheng la websaete.

2c. Ho hlophisa faele ea HTML

Ho file index.html eketsa mongolo o latelang:

Docker-Compose is magic!

Mongolo ona o tla romelloa ho moreki.

2d. Ho hlophisa Dockerfile

Hona joale re tla etsa faele e bonolo Dockerfile, ke mang ea tla ikarabella bakeng sa ho hlophisa tikoloho ea nako ea ho sebetsa bakeng sa seva sa Python. E le motheo oa setšoantšo se entsoeng, re tla se sebelisa ka tsela ya semmuso, e etselitsoeng ho tsamaisa mananeo a ngotsoeng ka Python. Mona ke litaba tsa 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/

Joale ha re qale ho sebetsa ho moreki.

▍3. Ho theha moreki

Ha re ntse re theha lehlakore la bareki ba projeke ea rona, re tla hopola metheo e meng ea Docker tseleng.

3a. Ho theha lifaele

Eya ho foldara ea projeke ea hau client 'me u thehe lifaele tse latelang ho eona:

  • faele client.py. Khoutu ea bareki e tla fumaneha mona.
  • faele Dockerfile. Faele ena e bapala karolo e ts'oanang le faele e ts'oanang le foldareng ea seva. E leng, e na le litaelo tse hlalosang mokhoa oa ho theha tikoloho ea ho phethahatsa khoutu ea bareki.

Ka lebaka leo, foldara ea hau client/ Tabeng ena, mosebetsi o lokela ho shebahala tjena:

.
├── client.py
└── Dockerfile
0 directories, 2 files

3b. Ho hlophisa faele ea Python

Kenya faeleng client.py khoutu e latelang:

#!/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()

Ka khoutu ena, sesebelisoa sa moreki se ka khoasolla data ho tsoa ho seva ebe se e bonts'a skrineng.

3c. Ho hlophisa Dockerfile

Joaloka tabeng ea seva, re theha e bonolo Dockerfile, e ikarabellang bakeng sa ho theha tikoloho eo kopo ea bareki ba Python e tla sebetsa ho eona. Khoutu ea moreki ke ena Dockerfile:

# То же самое, что и в серверном Dockerfile.

FROM python:latest

# Импортируем 'client.py' в папку '/client/'.

ADD client.py /client/

# Устанавливаем в качестве рабочей директории '/client/'.

WORKDIR /client/

▍4. Docker Compose

Joalokaha mohlomong u hlokometse, re thehile merero e 'meli e fapaneng: seva le moreki. E 'ngoe le e' ngoe ea tsona e na le faele ea eona Dockerfile. Ho fihlela hajoale, tsohle tse etsahetseng ha li so fete metheo ea ho sebetsa le Docker. Joale re qala ka Docker Compose. Ho etsa sena, a re ee ho file docker-compose.yml, e fumanehang foldareng ea motso oa projeke.

Ka kopo hlokomela hore mona ha re leke ho akaretsa ka botlalo litaelo tsohle tse ka sebelisoang ho docker-compose.yml. Sepheo sa rona se seholo ke ho tsamaea ka mohlala o sebetsang o tla u fa tsebo ea motheo ea Docker Compose.

Khoutu eo u lokelang ho e kenya faeleng ke ena 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. Ho aha morero

Kamora ho kena docker-compose.yml Litaelo tsohle tse hlokahalang li kentsoe, morero o hloka ho bokelloa. Mohato ona oa mosebetsi oa rona o tšoana le ho sebelisa taelo docker build, empa taelo e lumellanang e sebetsa litšebeletsong tse 'maloa:

$ docker-compose build

▍6. Ho qala morero

Kaha joale projeke e se e kopane, ke nako ea ho e qala. Mohato ona oa mosebetsi oa rona o lumellana le mohato oo, ha o sebetsa le lijana ka bomong, taelo e etsoa docker run:

$ docker-compose up

Kamora ho etsa taelo ena, mongolo o jarollotsoeng ke moreki ho tsoa ho seva o lokela ho hlaha ho terminal: Docker-Compose is magic!.

Joalokaha ho se ho boletsoe, seva se sebelisa koung ea komporo 1234 ho fana ka litšebeletso tsa bareki. Ka hona, haeba u ea atereseng ho sebatli sa hau http://localhost:1234/, e tla hlahisa leqephe le nang le mongolo Docker-Compose is magic!.

Litaelo tse molemo

Ha re shebeng litaelo tse ling tseo u ka li fumanang li le molemo ha u sebetsa le Docker Compose.

Taelo ena e u lumella ho emisa le ho hlakola lijana le lisebelisoa tse ling tse entsoeng ka taelo docker-compose up:

$ docker-compose down

Taelo ena e hatisa litlaleho tsa litšebeletso:

$ docker-compose logs -f [service name]

Ka mohlala, morerong oa rona e ka sebelisoa ka mokhoa ona: $ docker-compose logs -f [service name].

Ka ho sebelisa taelo ena u ka hlahisa lethathamo la lijana:

$ docker-compose ps

Taelo ena e u lumella ho phethahatsa taelo ka har'a setshelo se sebetsang:

$ docker-compose exec [service name] [command]

Ka mohlala, e ka shebahala tjena: docker-compose exec server ls.

Taelo ena e u lumella ho hlahisa lethathamo la litšoantšo:

$ docker-compose images

Liphello

Re shebile lintlha tsa motheo tsa ho sebetsa le thekenoloji ea Docker Compose, tsebo ea eona e tla u lumella ho sebelisa theknoloji ena, 'me, haeba u lakatsa, u qale ho e ithuta ka botebo. mona polokelo e nang le khoutu ea morero oo re o shebileng mona.

Babali ba ratehang! Na u sebelisa Docker Compose mererong ea hau?

Tataiso ea ho Ngola ea Docker bakeng sa ba qalang

Source: www.habr.com

Eketsa ka tlhaloso