Treoir do Chumadóireacht Docker do Thosaitheoirí

Deir údar an ailt, a bhfuil an t-aistriúchán á fhoilsiú againn inniu, go bhfuil sé beartaithe do na forbróirí sin atá ag iarraidh Docker Compose a fhoghlaim agus atá ag bogadh i dtreo a gcéad iarratas cliant-freastalaí a chruthú ag baint úsáide as Docker. Glactar leis go bhfuil léitheoir an ábhair seo eolach ar bhunghnéithe Docker. Mura bhfuil sé seo amhlaidh, is féidir leat breathnú ar seo sraith ábhar ar seo post a chlúdaíonn bunús Docker chomh maith le bunghnéithe Kubernetes, agus seo alt do thosaitheoirí.

Treoir do Chumadóireacht Docker do Thosaitheoirí

Cad is Docker Compose ann?

Is uirlis é Docker Compose atá san áireamh le Docker. Tá sé deartha chun fadhbanna a bhaineann le himscaradh tionscadal a réiteach.

Agus bunghnéithe Docker á bhfoghlaim agat, b’fhéidir gur tháinig tú trasna ar chruthú feidhmchláir shimplí a oibríonn go huathrialach agus nach mbraitheann, mar shampla, ar fhoinsí sonraí seachtracha nó ar sheirbhísí áirithe. Go praiticiúil, tá iarratais den sórt sin annamh. Is iondúil go mbíonn sraith iomlán feidhmchlár ag obair le chéile i gceist le fíorthionscadail.

Cén chaoi a bhfuil a fhios agat más gá duit Docker Compose a úsáid agus tionscadal á imscaradh agat? Tá sé an-simplí i ndáiríre. Má úsáideann tú seirbhísí iolracha chun an tionscadal seo a oibriú, seans go mbeidh Docker Compose áisiúil. Mar shampla, i gcás ina gcruthaíonn siad suíomh Gréasáin a chaithfidh nascadh le bunachar sonraí chun úsáideoirí a fhíordheimhniú. Féadfaidh dhá sheirbhís a bheith i dtionscadal den sórt sin - an ceann a áirithíonn oibriú an tsuímh, agus an ceann atá freagrach as an mbunachar sonraí a chothabháil.

Ligeann teicneolaíocht Docker Compose, chun cur síos a dhéanamh air ar bhealach simplithe, duit go leor seirbhísí a sheoladh ag baint úsáide as ordú amháin.

Difríocht idir Docker agus Docker Compose

Úsáidtear docker chun na coimeádáin aonair (seirbhísí) a chomhdhéanann iarratas a bhainistiú.

Úsáidtear Docker Compose chun coimeádáin iolracha a chomhdhéanann feidhmchlár a bhainistiú ag an am céanna. Tugann an uirlis seo na cumais chéanna le Docker, ach ligeann duit oibriú le hiarratais níos casta.

Treoir do Chumadóireacht Docker do Thosaitheoirí
Docker (coimeádán singil) agus Docker Compose (coimeádáin iolracha)

Cás úsáide tipiciúil le haghaidh Docker Compose

Uirlis thar a bheith cumhachtach is ea Docker Compose a ligeann duit feidhmchláir a bhfuil ailtireachtaí casta acu a imscaradh go han-tapa. Anois féachfaimid ar shampla d'úsáid phraiticiúil Docker Compose, agus ligfidh an anailís duit na buntáistí a bhaineann le húsáid Docker Compose a mheas.

Samhlaigh gur forbróir tú ar thionscadal gréasáin. Cuimsíonn an tionscadal seo dhá shuíomh Gréasáin. Ligeann an chéad cheann do dhaoine gnó siopaí ar líne a chruthú gan ach cúpla cad a tharlaíonn. Tá an dara ceann dírithe ar thacaíocht do chustaiméirí. Idirghníomhaíonn an dá shuíomh seo leis an mbunachar sonraí céanna.

Tá do thionscadal ag éirí níos mó agus níos mó tóir, agus tharla sé go bhfuil an chumhacht an fhreastalaí ar a ritheann sé a thuilleadh go leor. Mar thoradh air sin, socraíonn tú an tionscadal ar fad a aistriú chuig meaisín eile.

Ar an drochuair, níor úsáid tú rud éigin cosúil le Docker Compose. Mar sin, beidh ort seirbhísí a aistriú agus a athchumrú ceann ag an am, ag súil nach ndéanfaidh tú dearmad ar rud ar bith sa phróiseas.

Má úsáideann tú Docker Compose, ansin is féidir do thionscadal a aistriú chuig freastalaí nua is féidir a réiteach trí roinnt orduithe a rith. Chun aistriú an tionscadail chuig suíomh nua a chríochnú, ní gá duit ach roinnt socruithe a dhéanamh agus cóip chúltaca den bhunachar sonraí a uaslódáil chuig an bhfreastalaí nua.

Feidhmchlár cliant-freastalaí a fhorbairt ag baint úsáide as Docker Compose

Anois go bhfuil a fhios agat cad chuige a n-úsáidfimid Docker Compose, tá sé in am agat do chéad iarratas cliant-freastalaí a chruthú ag baint úsáide as an uirlis seo. Eadhon, táimid ag caint faoi shuíomh Gréasáin beag (freastalaí) a fhorbairt i Python a fhéadfaidh comhad a aschur le blúire téacs. Iarrtar an comhad seo ón bhfreastalaí ag clár (cliant), atá scríofa i Python freisin. Tar éis comhad a fháil ón bhfreastalaí, taispeánann an clár an téacs atá stóráilte ann ar an scáileán.

Tabhair faoi deara go nglacfaimid leis go bhfuil tuiscint bhunúsach agat ar Docker agus go bhfuil an t-ardán Docker suiteáilte agat cheana féin.

A ligean ar tosú ag obair ar an tionscadal.

▍1. Tionscadal a Chruthú

Chun do chéad iarratas cliant-freastalaí a thógáil, molaim duit tosú trí fhillteán tionscadail a chruthú. Ba cheart go mbeadh na comhaid agus na fillteáin seo a leanas ann:

  • comhad docker-compose.yml. Comhad Docker Compose é seo ina mbeidh na treoracha is gá chun na seirbhísí a thosú agus a chumrú.
  • Fillteán server. Beidh na comhaid ann atá riachtanach chun an freastalaí a choinneáil ag rith.
  • Fillteán client. Beidh comhaid iarratais an chliaint lonnaithe anseo.

Mar thoradh air sin, ba cheart go mbeadh cuma mar seo ar a bhfuil i bpríomhfhillteán do thionscadail:

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

▍2. Freastalaí a chruthú

Anseo, agus muid ag cruthú freastalaí, déanfaimid teagmháil le roinnt rudaí bunúsacha maidir le Docker.

2a. Comhaid a chruthú

Téigh go dtí an fillteán server agus cruthaigh na comhaid seo a leanas ann:

  • comhad server.py. Beidh cód an fhreastalaí ann.
  • comhad index.html. Beidh píosa téacs sa chomhad seo ba cheart don fheidhmchlár cliant a aschur.
  • comhad Dockerfile. Is comhad Docker é seo ina mbeidh na treoracha is gá chun timpeallacht an fhreastalaí a chruthú.

Seo an chuma ar cheart a bheith ar ábhar d'fhillteáin server/:

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

2b. Comhad Python á chur in eagar.

Cuir leis an gcomhad server.py an cód seo a leanas:

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

Ligeann an cód seo duit freastalaí gréasáin simplí a chruthú. Tabharfaidh sé an comhad do chliaint index.html, a thaispeánfar a bhfuil ann níos déanaí ar an leathanach gréasáin.

2c. Comhad HTML á chur in eagar

A chomhdú index.html cuir an téacs seo a leanas leis:

Docker-Compose is magic!

Seolfar an téacs seo chuig an gcliant.

2d. Ag cur an Dockerfile in eagar

Anois cruthóimid comhad simplí Dockerfile, a bheidh freagrach as an timpeallacht rite a eagrú don fhreastalaí Python. Mar bhunús don íomhá cruthaithe, úsáidfimid ar mhodh oifigiúil, atá deartha chun cláir scríofa i Python a rith. Seo é ábhar an 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/

Anois, a ligean ar tosú ag obair ar an gcliant.

▍3. Cliant a chruthú

Agus taobh cliaint ár dtionscadal á gcruthú againn, cuimhnímid ar roinnt bunúsacha Docker ar an mbealach.

3a. Comhaid a chruthú

Téigh go dtí d'fhillteán tionscadail client agus cruthaigh na comhaid seo a leanas ann:

  • comhad client.py. Beidh an cód cliant lonnaithe anseo.
  • comhad Dockerfile. Tá an ról céanna ag an gcomhad seo agus atá ag comhad comhchosúil san fhillteán freastalaí. Eadhon, tá treoracha ann a chuireann síos ar conas timpeallacht a chruthú chun cód cliant a fhorghníomhú.

Mar thoradh air sin, d'fhillteán client/ ag an gcéim seo den obair ba chóir go mbeadh cuma mar seo air:

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

3b. Comhad Python á Eagarthóireacht

Cuir leis an gcomhad client.py an cód seo a leanas:

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

Leis an gcód seo, is féidir leis an bhfeidhmchlár cliant sonraí a íoslódáil ón bhfreastalaí agus é a thaispeáint ar an scáileán.

3c. Ag cur an Dockerfile in eagar

Mar atá i gcás an fhreastalaí, cruthaímid simplí Dockerfile, atá freagrach as an timpeallacht a chruthú ina reáchtálfar an t-iarratas cliant Python. Seo é an cód cliant Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Mar is féidir a bheith tugtha faoi deara agat, chruthaigh muid dhá thionscadal éagsúla: freastalaí agus cliant. Tá a chomhad féin ag gach ceann acu Dockerfile. Go dtí seo, níl gach rud a tharla imithe thar na bunghnéithe a bhaineann le bheith ag obair le Docker. Anois cuirimid tús le Docker Compose. Chun seo a dhéanamh, a ligean ar dul go dtí an comhad docker-compose.yml, atá suite i bhfillteán fréimhe an tionscadail.

Tabhair faoi deara nach bhfuilimid ag iarraidh na horduithe go léir is féidir a úsáid i docker-compose.yml. Is é an príomhaidhm atá againn ná siúl trí shampla praiticiúil a thabharfaidh an t-eolas bunúsach duit ar Docker Compose.

Seo é an cód le cur sa chomhad 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. Tógáil an tionscadail

Tar éis isteach docker-compose.yml Tá na treoracha riachtanacha go léir curtha isteach, ní mór an tionscadal a chur le chéile. Tá an chéim seo dár gcuid oibre cosúil leis an ordú a úsáid docker build, ach tá an t-ordú comhfhreagrach ábhartha do roinnt seirbhísí:

$ docker-compose build

▍6. Seoladh an tionscadail

Anois go bhfuil an tionscadal curtha le chéile, tá sé in am é a sheoladh. Freagraíonn an chéim seo dár gcuid oibre don chéim ina ndéantar, agus muid ag obair le coimeádáin aonair, an t-ordú a fhorghníomhú docker run:

$ docker-compose up

Tar éis an t-ordú seo a fheidhmiú, ba chóir go mbeadh an téacs a d'íoslódáil an cliant ón bhfreastalaí le feiceáil sa teirminéal: Docker-Compose is magic!.

Mar a luadh cheana, úsáideann an freastalaí an port ríomhaire 1234 chun iarratais cliant a sheirbhísiú. Dá bhrí sin, má théann tú chuig an seoladh i do bhrabhsálaí http://localhost:1234/, taispeánfaidh sé leathanach le téacs Docker-Compose is magic!.

Orduithe Úsáideacha

Breathnaímid ar roinnt orduithe a d'fhéadfadh a bheith úsáideach duit agus tú ag obair le Docker Compose.

Ligeann an t-ordú seo duit coimeádáin agus acmhainní eile a chruthaigh an t-ordú a stopadh agus a scriosadh docker-compose up:

$ docker-compose down

Priontálann an t-ordú seo logaí seirbhíse:

$ docker-compose logs -f [service name]

Mar shampla, inár dtionscadal is féidir é a úsáid san fhoirm seo: $ docker-compose logs -f [service name].

Leis an ordú seo is féidir leat liosta coimeádán a thaispeáint:

$ docker-compose ps

Ligeann an t-ordú seo duit ordú a rith i gcoimeádán reatha:

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

Mar shampla, d'fhéadfadh sé breathnú mar seo: docker-compose exec server ls.

Ligeann an t-ordú seo duit liosta íomhánna a thaispeáint:

$ docker-compose images

Torthaí

D'fhéachamar ar na bunghnéithe a bhaineann le bheith ag obair le teicneolaíocht Docker Compose, a ligfidh eolas air duit an teicneolaíocht seo a úsáid agus, más mian leat, tosú ar staidéar níos doimhne a dhéanamh air. Anseo stór leis an gcód don tionscadal ar bhreathnaíomar air anseo.

Léitheoirí a chara! An úsáideann tú Docker Compose i do thionscadail?

Treoir do Chumadóireacht Docker do Thosaitheoirí

Foinse: will.com

Add a comment