I-Docker Compose Guide yabaqalayo

Umbhali we-athikili, okuhunyushiwe kwakho esiyishicilela namuhla, uthi ihloselwe labo bathuthukisi abafuna ukufunda i-Docker Compose futhi abasondela ekudaleni uhlelo lwabo lokuqala lweseva yeklayenti besebenzisa i-Docker. Kucatshangwa ukuthi umfundi wale nto ujwayelene nezisekelo ze-Docker. Uma kungenjalo, ungabheka lokhu uchungechunge lwezinto zokwakha lokhu okuthunyelwe okumboza izisekelo ze-Docker kanye nezisekelo ze-Kubernetes, kanye lokhu isihloko sabaqalayo.

I-Docker Compose Guide yabaqalayo

Iyini i-Docker Compose?

I-Docker Compose iyithuluzi elifakwe ne-Docker. Yakhelwe ukuxazulula izinkinga ezihlobene nokuthunyelwa kwephrojekthi.

Ngenkathi ufunda izisekelo ze-Docker, ungase ubhekane nokudalwa kwezinhlelo zokusebenza ezilula ezisebenza ngokuzenzakalelayo futhi ezingancikile, isibonelo, emithonjeni yedatha yangaphandle noma kumasevisi athile. Empeleni, izicelo ezinjalo azivamile. Amaphrojekthi wangempela ngokuvamile ahlanganisa isethi yonke yezinhlelo zokusebenza ezisebenza ndawonye.

Wazi kanjani uma udinga ukusebenzisa i-Docker Compose lapho uthumela iphrojekthi? Empeleni ilula kakhulu. Uma usebenzisa izinsiza eziningi ukwenza le phrojekthi isebenze, i-Docker Compose ingase isebenze. Isibonelo, esimweni lapho bakha iwebhusayithi edinga ukuxhuma kusizindalwazi ukuze kugunyazwe abasebenzisi. Iphrojekthi enjalo ingase ibe nezinkonzo ezimbili - leyo eqinisekisa ukusebenza kwesayithi, futhi leyo enesibopho sokugcina isizindalwazi.

I-Docker Compose technology, ukuyichaza ngendlela elula, ikuvumela ukuthi uqalise izinsiza eziningi ngomyalo owodwa.

Umehluko phakathi kwe-Docker ne-Docker Compose

I-Docker isetshenziselwa ukuphatha iziqukathi ngazinye (izinsizakalo) ezakha uhlelo lokusebenza.

I-Docker Compose isetshenziselwa ukuphatha ngesikhathi esisodwa iziqukathi eziningi ezakha uhlelo lokusebenza. Leli thuluzi linikeza amandla afanayo njenge-Docker, kodwa likuvumela ukuthi usebenze nezinhlelo zokusebenza eziyinkimbinkimbi.

I-Docker Compose Guide yabaqalayo
I-Docker (isitsha esisodwa) kanye ne-Docker Compose (iziqukathi eziningi)

Ikesi elijwayelekile lokusebenzisa i-Docker Compose

I-Docker Compose, ezandleni ezifanele, iyithuluzi elinamandla kakhulu elikuvumela ukuthi usebenzise ngokushesha izinhlelo zokusebenza ezinezakhiwo eziyinkimbinkimbi. Manje sizobheka isibonelo sokusetshenziswa okusebenzayo kwe-Docker Compose, ukuhlaziya okuzokuvumela ukuthi uhlole izinzuzo ozokunikeza zona usebenzisa i-Docker Compose.

Zicabange ungumthuthukisi wephrojekthi yewebhu. Le phrojekthi ihlanganisa amawebhusayithi amabili. Esokuqala sivumela abantu bebhizinisi ukuthi bakhe izitolo eziku-inthanethi ngokuchofoza okumbalwa nje. Eyesibili ihloselwe ukusekelwa kwamakhasimende. Lezi zingosi zombili zisebenzisana nesizindalwazi esifanayo.

Iphrojekthi yakho iya ngokuya iduma, futhi kuvele ukuthi amandla eseva esebenza kuwo awasaneli. Ngenxa yalokho, unquma ukuhambisa yonke iphrojekthi komunye umshini.

Ngeshwa, awuzange usebenzise into efana ne-Docker Compose. Ngakho-ke, kuzodingeka udlulise futhi ulungise kabusha izinsizakalo ngesikhathi esisodwa, ngethemba lokuthi ngeke ukhohlwe lutho kule nqubo.

Uma usebenzisa i-Docker Compose, bese uhambisa iphrojekthi yakho kuseva entsha yindaba engaxazululwa ngokusebenzisa imiyalo embalwa. Ukuze uqedele ukudluliselwa kwephrojekthi endaweni entsha, udinga kuphela ukwenza izilungiselelo ezithile futhi ulayishe ikhophi eyisipele yesizindalwazi kuseva entsha.

Ukuthuthukisa uhlelo lokusebenza lweseva yeklayenti kusetshenziswa i-Docker Compose

Manje njengoba uyazi ukuthi sizosebenziselani i-Docker Compose, sekuyisikhathi sokudala uhlelo lwakho lokusebenza lokuqala lweseva yeklayenti usebenzisa leli thuluzi. Okungukuthi, sikhuluma ngokwakha iwebhusayithi encane (iseva) kuPython engakhipha ifayela ngesiqephu sombhalo. Leli fayela licelwa kuseva ngohlelo (iklayenti), nalo elibhalwe ngePython. Ngemva kokuthola ifayela elivela kuseva, uhlelo lubonisa umbhalo ogcinwe kulo esikrinini.

Sicela uqaphele ukuthi sicabanga ukuthi unokuqonda okuyisisekelo kwe-Docker nokuthi usunayo inkundla ye-Docker efakiwe.

Ake siqale ukusebenza kuphrojekthi.

▍1. Ukudala Iphrojekthi

Ukwakha uhlelo lwakho lokusebenza lokuqala lweseva yeklayenti, ngiphakamisa ukuthi uqale ngokwakha ifolda yephrojekthi. Kufanele iqukathe amafayela namafolda alandelayo:

  • Файл docker-compose.yml. Leli yifayela le-Docker Compose elizoqukatha imiyalelo edingekayo ukuze kuqalwe futhi kulungiselelwe izinsizakalo.
  • Ifolda server. Izoqukatha amafayela adingekayo ukuze kugcinwe iseva isebenza.
  • Ifolda client. Amafayela ohlelo lweklayenti azotholakala lapha.

Ngenxa yalokho, okuqukethwe kwefolda eyinhloko yephrojekthi yakho kufanele kubukeke kanje:

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

▍2. Idala iseva

Lapha, ohlelweni lokudala iseva, sizothinta ezinye izinto eziyisisekelo mayelana ne-Docker.

2a. Idala amafayela

Iya kufolda server futhi udale amafayela alandelayo kuyo:

  • Файл server.py. Izoqukatha ikhodi yeseva.
  • Файл index.html. Leli fayela lizoqukatha ucezu lombhalo uhlelo lokusebenza lweklayenti okufanele lukhiphe.
  • Файл Dockerfile. Leli yifayela le-Docker elizoqukatha imiyalelo edingekayo ukuze kwakhiwe indawo yeseva.

Yilokhu okuqukethwe kwefolda yakho okufanele kubukeke ngayo server/:

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

2b. Ukuhlela ifayela lePython.

Engeza kufayela server.py ikhodi elandelayo:

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

Le khodi ikuvumela ukuthi udale iseva yewebhu elula. Uzonikeza amaklayenti ifayela index.html, okuqukethwe kwakho okuzovezwa kamuva ekhasini lewebhu.

2c. Ukuhlela Ifayela le-HTML

Ukuze ifayela index.html engeza umbhalo olandelayo:

Docker-Compose is magic!

Lo mbhalo uzothunyelwa kuklayenti.

2d. Ukuhlela i-Dockerfile

Manje sizokwakha ifayela elilula Dockerfile, ozoba nesibopho sokuhlela indawo yesikhathi sokusebenza yeseva yePython. Njengesisekelo sesithombe esidaliwe, sizosebenzisa ngendlela esemthethweni, eklanyelwe ukusebenzisa izinhlelo ezibhalwe ngePython. Nakhu okuqukethwe kwe-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/

Manje ake siqale ukusebenza kuklayenti.

▍3. Ukudala iklayenti

Ngenkathi sidala uhlangothi lweklayenti lwephrojekthi yethu, sizokhumbula ezinye izisekelo ze-Docker endleleni.

3a. Idala amafayela

Iya kufolda yephrojekthi yakho client futhi udale amafayela alandelayo kuyo:

  • Файл client.py. Ikhodi yeklayenti izotholakala lapha.
  • Файл Dockerfile. Leli fayela lidlala indima efanayo njengefayela elifanayo kufolda yeseva. Okungukuthi, iqukethe imiyalelo echaza indlela yokudala indawo yokusebenzisa ikhodi yeklayenti.

Ngenxa yalokho, ifolda yakho client/ kulesi sigaba somsebenzi kufanele kubukeke kanje:

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

3b. Ukuhlela Ifayela lePython

Engeza kufayela client.py ikhodi elandelayo:

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

Ngale khodi, uhlelo lokusebenza lweklayenti lungalanda idatha kuseva futhi luyibonise esikrinini.

3c. Ukuhlela i-Dockerfile

Njengasendabeni yeseva, sakha elula Dockerfile, enesibopho sokudala indawo lapho uhlelo lweklayenti lePython luzosebenza khona. Nali ikhodi yeklayenti Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. I-Docker Qamba

Njengoba kungenzeka ukuthi ubonile, sidale amaphrojekthi amabili ahlukene: iseva neklayenti. Ngamunye wabo unefayela lakhe Dockerfile. Kuze kube manje, konke okwenzekile akuhambanga ngale kwezisekelo zokusebenza ne-Docker. Manje sesiqala nge-Docker Compose. Ukwenza lokhu, ake siye kufayela docker-compose.yml, etholakala kufolda yempande yephrojekthi.

Sicela uqaphele ukuthi lapha asizami ukumboza ngokuphelele yonke imiyalo engasetshenziswa kuyo docker-compose.yml. Umgomo wethu oyinhloko ukuhamba ngesibonelo esisebenzayo esizokunikeza ulwazi oluyisisekelo lwe-Docker Compose.

Nali ikhodi okufanele uyifake efayelini 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. Ukwakha iphrojekthi

Ngemva kokungena docker-compose.yml Yonke imiyalelo edingekayo ifakiwe, iphrojekthi idinga ukuqoqwa. Lesi sinyathelo somsebenzi wethu siyefana nokusebenzisa umyalo docker build, kodwa umyalo ohambisanayo ubalulekile ezinsizeni ezimbalwa:

$ docker-compose build

▍6. Ukwethulwa kwephrojekthi

Manje njengoba iphrojekthi isihlanganisiwe, yisikhathi sokuyethula. Lesi sinyathelo somsebenzi wethu sihambisana nesinyathelo lapho, lapho usebenza neziqukathi ngazinye, umyalo ukhishwa docker run:

$ docker-compose up

Ngemva kokwenza lo myalo, umbhalo olandwe iklayenti kuseva kufanele uvele kutheminali: Docker-Compose is magic!.

Njengoba sekushiwo, iseva isebenzisa imbobo yekhompyutha 1234 ekuhlinzekeni izicelo zeklayenti. Ngakho-ke, uma uya ekhelini esipheqululini sakho http://localhost:1234/, izoveza ikhasi elinombhalo Docker-Compose is magic!.

Imiyalo ewusizo

Ake sibheke eminye imiyalo ongayithola iwusizo lapho usebenza ne-Docker Compose.

Lo myalo ikuvumela ukuthi umise futhi ususe iziqukathi nezinye izinsiza ezidalwe ngomyalo docker-compose up:

$ docker-compose down

Lo myalo uphrinta amalogi wesevisi:

$ docker-compose logs -f [service name]

Isibonelo, kuphrojekthi yethu ingasetshenziswa kuleli fomu: $ docker-compose logs -f [service name].

Ngokusebenzisa lo myalo ungabonisa uhlu lweziqukathi:

$ docker-compose ps

Lo myalo ikuvumela ukuthi wenze umyalo esitsheni esisebenzayo:

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

Ngokwesibonelo, kungase kubukeke kanje: docker-compose exec server ls.

Lo myalo ikuvumela ukuba ubonise uhlu lwezithombe:

$ docker-compose images

Imiphumela

Sibheke izinto eziyisisekelo zokusebenza nobuchwepheshe be-Docker Compose, ulwazi oluzokuvumela ukuthi usebenzise lobu buchwepheshe futhi, uma uthanda, uqale ukubufunda ngokujula okwengeziwe. Lapha inqolobane enekhodi yephrojekthi esiyibuke lapha.

Bafundi abathandekayo! Ingabe usebenzisa i-Docker Compose kumaphrojekthi akho?

I-Docker Compose Guide yabaqalayo

Source: www.habr.com

Engeza amazwana