Mwongozo wa Kutunga Docker kwa Kompyuta

Mwandishi wa nakala hiyo, ambayo tunachapisha leo, anasema kwamba imekusudiwa kwa watengenezaji wale ambao wanataka kujifunza Docker Compose na wako njiani kuunda programu yao ya kwanza ya seva ya mteja kwa kutumia Docker. Inachukuliwa kuwa msomaji wa nyenzo hii anafahamu misingi ya Docker. Ikiwa hii sio hivyo, unaweza kuangalia hii mfululizo wa vifaa hii chapisho linalofunika misingi ya Docker pamoja na misingi ya Kubernetes, na hii makala kwa Kompyuta.

Mwongozo wa Kutunga Docker kwa Kompyuta

Docker Compose ni nini?

Docker Compose ni zana iliyojumuishwa na Docker. Imeundwa kutatua matatizo yanayohusiana na kupelekwa kwa miradi.

Wakati wa kujifunza misingi ya Docker, unaweza kuwa umekutana na uundaji wa programu rahisi zaidi zinazofanya kazi kwa uhuru, bila kutegemea, kwa mfano, vyanzo vya data vya nje au huduma fulani. Katika mazoezi, maombi hayo ni nadra. Miradi halisi kwa kawaida huhusisha seti nzima ya maombi shirikishi.

Unajuaje ikiwa unahitaji kutumia Docker Compose wakati wa kupeleka mradi? Kwa kweli, ni rahisi sana. Ikiwa unatumia huduma nyingi kuendesha mradi huu, basi Docker Compose inaweza kukusaidia. Kwa mfano, katika hali ambapo unaunda tovuti ambayo, ili kufanya uthibitishaji wa mtumiaji, inahitaji kuunganisha kwenye hifadhidata. Mradi kama huo unaweza kuwa na huduma mbili - moja ambayo inahakikisha utendakazi wa tovuti, na moja ambayo ina jukumu la kusaidia hifadhidata.

Teknolojia ya Kutunga Docker, ikiwa unaielezea kwa njia iliyorahisishwa, inakuwezesha kuanza huduma nyingi kwa amri moja.

Tofauti kati ya Docker na Docker Compose

Docker hutumiwa kudhibiti vyombo vya mtu binafsi (huduma) vinavyounda programu.

Docker Compose hutumiwa kudhibiti vyombo vingi ambavyo ni sehemu ya programu kwa wakati mmoja. Chombo hiki hutoa huduma sawa na Docker, lakini hukuruhusu kufanya kazi na programu ngumu zaidi.

Mwongozo wa Kutunga Docker kwa Kompyuta
Docker (chombo kimoja) na Docker Compose (vyombo vingi)

Kawaida Docker Tunga kesi ya utumiaji

Utungaji wa Docker ni, katika mikono ya kulia, zana yenye nguvu sana ambayo hukuruhusu kupeleka programu haraka na usanifu tata. Sasa tutaangalia mfano wa matumizi ya vitendo ya Docker Compose, uchambuzi ambao utakuwezesha kutathmini faida ambazo matumizi ya Docker Compose itakupa.

Fikiria kuwa wewe ni msanidi wa mradi wa wavuti. Mradi huu unajumuisha tovuti mbili. Ya kwanza inaruhusu wafanyabiashara kuunda, kwa kubofya mara chache tu, maduka ya mtandaoni. Ya pili inalenga usaidizi wa wateja. Tovuti hizi mbili zinaingiliana na hifadhidata moja.

Mradi wako unazidi kuwa maarufu zaidi, na zinageuka kuwa uwezo wa seva ambayo inafanya kazi haitoshi tena. Matokeo yake, unaamua kuhamisha mradi mzima kwenye mashine nyingine.

Kwa bahati mbaya, haujatumia kitu kama Docker Compose. Kwa hivyo, itabidi uhamishe na upange upya huduma moja baada ya nyingine, ukitumaini kwamba hutasahau chochote katika mchakato wa kazi hii.

Ikiwa unatumia Docker Compose, basi kuhamisha mradi wako kwa seva mpya ni suala ambalo linaweza kutatuliwa kwa kutekeleza amri chache. Ili kukamilisha uhamishaji wa mradi hadi eneo jipya, unahitaji tu kufanya mipangilio fulani na kupakia nakala rudufu ya hifadhidata kwenye seva mpya.

Kuendeleza programu ya seva ya mteja kwa kutumia Docker Compose

Sasa kwa kuwa unajua tutatumia Docker Compose kwa nini, ni wakati wa kuunda programu yako ya kwanza ya seva ya mteja kwa kutumia zana hii. Yaani, tunazungumza juu ya kukuza tovuti ndogo (seva) katika Python ambayo inaweza kutoa faili na kipande cha maandishi. Faili hii imeombwa kutoka kwa seva na programu (mteja), iliyoandikwa pia kwa Python. Baada ya kupokea faili kutoka kwa seva, programu inaonyesha maandishi yaliyohifadhiwa ndani yake kwenye skrini.

Tafadhali kumbuka kuwa tunadhania kuwa unayo misingi ya Docker na kwamba tayari umesakinisha jukwaa la Docker.

Wacha tuanze kufanya kazi kwenye mradi.

▍1. Unda mradi

Ili kuunda programu yako ya kwanza ya seva ya mteja, ninapendekeza uanze kwa kuunda folda ya mradi. Inapaswa kuwa na faili na folda zifuatazo:

  • file docker-compose.yml. Hii ni faili ya Kutunga Docker ambayo itakuwa na maagizo yanayohitajika ili kuanza na kusanidi huduma.
  • Folder server. Itakuwa na faili zinazohitajika kufanya seva ifanye kazi.
  • Folder client. Hapa ndipo faili za maombi ya mteja zitapatikana.

Kama matokeo, yaliyomo kwenye folda kuu ya mradi wako inapaswa kuonekana kama hii:

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

▍2. Kuunda seva

Hapa, katika mchakato wa kuunda seva, tutagusa mambo kadhaa ya kimsingi kuhusu Docker.

2a. Kuunda Faili

Nenda kwenye folda server na unda faili zifuatazo ndani yake:

  • file server.py. Itakuwa na msimbo wa seva.
  • file index.html. Faili hii itakuwa na kipande cha maandishi ambacho programu ya mteja inapaswa kuonyesha.
  • file Dockerfile. Hii ndio faili ya Docker ambayo itakuwa na maagizo yanayohitajika kuunda mazingira ya seva.

Hivi ndivyo yaliyomo kwenye folda yako yanapaswa kuonekana kama server/:

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

2b. Kuhariri faili ya Python.

Ongeza kwenye faili server.py kanuni ifuatayo:

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

Nambari hii hukuruhusu kuunda seva rahisi ya wavuti. Atawapa wateja faili index.html, ambayo maudhui yake yataonyeshwa baadaye kwenye ukurasa wa wavuti.

2c. Kuhariri faili ya HTML

Ili faili index.html ongeza maandishi yafuatayo:

Docker-Compose is magic!

Maandishi haya yatatumwa kwa mteja.

2d. Kuhariri faili ya Docker

Sasa tutaunda faili rahisi Dockerfile, ambayo itakuwa na jukumu la kupanga mazingira ya wakati wa kukimbia kwa seva ya Python. Kama msingi wa picha iliyoundwa, tutatumia rasmi, iliyoundwa ili kuendesha programu zilizoandikwa katika Python. Hapa kuna yaliyomo kwenye 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/

Sasa hebu tufanye kazi kwa mteja.

▍3. Unda mteja

Wakati wa kuunda upande wa mteja wa mradi wetu, tutakumbuka misingi kadhaa ya Docker njiani.

3a. Kuunda Faili

Nenda kwenye folda ya mradi wako client na unda faili zifuatazo ndani yake:

  • file client.py. Hapa ndipo msimbo wa mteja utakuwa.
  • file Dockerfile. Faili hii ina jukumu sawa na faili sawa kwenye folda ya seva. Yaani, ina taarifa inayoelezea jinsi ya kuunda mazingira ya kutekeleza nambari ya mteja.

Kama matokeo, folda yako client/ Katika hatua hii inapaswa kuonekana kama hii:

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

3b. Kuhariri Faili ya Python

Ongeza kwenye faili client.py kanuni ifuatayo:

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

Shukrani kwa nambari hii, programu ya mteja inaweza kupakua data kutoka kwa seva na kuionyesha kwenye skrini.

3c. Kuhariri faili ya Docker

Kama ilivyo kwa seva, tunaunda rahisi Dockerfile, inayohusika na kuunda mazingira ambayo programu ya mteja wa Python itaendesha. Hapa kuna nambari ya mteja Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Tunga

Kama unaweza kuwa umeona, tuliunda miradi miwili tofauti: seva na mteja. Kila mmoja wao ana faili yake mwenyewe Dockerfile. Kufikia sasa, kila kitu kinachotokea hakiendi zaidi ya misingi ya kufanya kazi na Docker. Sasa tunaanza kufanya kazi na Docker Compose. Ili kufanya hivyo, hebu tuende kwenye faili docker-compose.ymliko kwenye folda ya mizizi ya mradi.

Tafadhali kumbuka kuwa hapa hatulengi kufunika kabisa amri zote zinazoweza kutumika docker-compose.yml. Lengo letu kuu ni kuvunja mfano wa vitendo ambao hukupa maarifa ya kimsingi ya Docker Compose.

Hapa kuna nambari ya kuweka kwenye faili 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. Ujenzi wa mradi

Baada ya ndani docker-compose.yml maagizo yote muhimu yamefanywa, mradi unahitaji kukusanyika. Hatua hii ya kazi yetu inafanana na matumizi ya amri docker build, lakini amri inayolingana inahusiana na huduma kadhaa:

$ docker-compose build

▍6. Uzinduzi wa mradi huo

Sasa mradi umejengwa, ni wakati wa kuuendesha. Hatua hii ya kazi yetu inalingana na hatua ambayo, wakati wa kufanya kazi na vyombo vya mtu binafsi, amri inatekelezwa docker run:

$ docker-compose up

Baada ya kutekeleza amri hii, maandishi yaliyopakiwa na mteja kutoka kwa seva yanapaswa kuonekana kwenye terminal: Docker-Compose is magic!.

Kama ilivyoelezwa tayari, seva hutumia bandari ya kompyuta 1234 kuhudumia maombi ya mteja. Kwa hivyo, ukienda kwa anwani kwenye kivinjari chako http://localhost:1234/, itaonyesha ukurasa wenye maandishi Docker-Compose is magic!.

Amri Muhimu

Wacha tuangalie maagizo kadhaa ambayo unaweza kupata muhimu wakati wa kufanya kazi na Docker Compose.

Amri hii hukuruhusu kusimamisha na kufuta vyombo na rasilimali zingine zilizoundwa na amri docker-compose up:

$ docker-compose down

Amri hii inachapisha kumbukumbu za huduma:

$ docker-compose logs -f [service name]

Kwa mfano, katika mradi wetu inaweza kutumika katika fomu hii: $ docker-compose logs -f [service name].

Kwa amri hii, unaweza kuonyesha orodha ya vyombo:

$ docker-compose ps

Amri hii hukuruhusu kutekeleza amri kwenye chombo kinachoendesha:

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

Kwa mfano, inaweza kuonekana kama hii: docker-compose exec server ls.

Amri hii hukuruhusu kuonyesha orodha ya picha:

$ docker-compose images

Matokeo ya

Tumezingatia misingi ya kufanya kazi na teknolojia ya Docker Compose, ujuzi ambao utakuwezesha kutumia teknolojia hii na, ikiwa inataka, anza kuisoma kwa kina zaidi. Hapa hazina iliyo na nambari ya mradi, ambayo tulizingatia hapa.

Ndugu wasomaji! Unatumia Docker Compose katika miradi yako?

Mwongozo wa Kutunga Docker kwa Kompyuta

Chanzo: mapenzi.com

Kuongeza maoni