Canllaw Cyfansoddi Docker i Ddechreuwyr

Dywed awdur yr erthygl, yr ydym yn ei chyhoeddi heddiw, ei bod wedi'i bwriadu ar gyfer y datblygwyr hynny sydd am ddysgu Docker Compose ac sydd ar eu ffordd i greu eu cymhwysiad cleient-gweinydd cyntaf gan ddefnyddio Docker. Tybir bod darllenydd y deunydd hwn yn gyfarwydd â hanfodion Docker. Os nad yw hyn yn wir, gallwch edrych ar hyn cyfres o ddeunyddiau hyn swydd yn ymdrin â hanfodion Docker ynghyd â hanfodion Kubernetes, a hyn erthygl i ddechreuwyr.

Canllaw Cyfansoddi Docker i Ddechreuwyr

Beth yw Docker Compose?

Mae Docker Compose yn offeryn sydd wedi'i gynnwys gyda Docker. Fe'i cynlluniwyd i ddatrys problemau sy'n ymwneud â defnyddio prosiectau.

Wrth ddysgu hanfodion Docker, efallai eich bod wedi dod ar draws creu'r cymwysiadau symlaf sy'n gweithio'n annibynnol, nid yn dibynnu, er enghraifft, ar ffynonellau data allanol neu ar rai gwasanaethau. Yn ymarferol, mae ceisiadau o'r fath yn brin. Mae prosiectau go iawn fel arfer yn cynnwys set gyfan o gymwysiadau cydweithredol.

Sut ydych chi'n gwybod a oes angen i chi ddefnyddio Docker Compose wrth ddefnyddio prosiect? Mewn gwirionedd, mae'n syml iawn. Os ydych chi'n defnyddio gwasanaethau lluosog i redeg y prosiect hwn, yna efallai y bydd Docker Compose yn ddefnyddiol. Er enghraifft, mewn sefyllfa lle rydych chi'n creu gwefan sydd, er mwyn cyflawni dilysiad defnyddiwr, angen cysylltu â chronfa ddata. Gall prosiect o'r fath gynnwys dau wasanaeth - un sy'n sicrhau gweithrediad y safle, ac un sy'n gyfrifol am gefnogi'r gronfa ddata.

Mae technoleg Docker Compose, os ydych chi'n ei ddisgrifio mewn ffordd symlach, yn caniatáu ichi gychwyn llawer o wasanaethau gydag un gorchymyn.

Gwahaniaeth rhwng Docker a Docker Compose

Defnyddir Dociwr i reoli'r cynwysyddion unigol (gwasanaethau) sy'n rhan o gais.

Defnyddir Docker Compose i reoli cynwysyddion lluosog sy'n rhan o gais ar yr un pryd. Mae'r offeryn hwn yn cynnig yr un nodweddion â Docker, ond mae'n caniatáu ichi weithio gyda chymwysiadau mwy cymhleth.

Canllaw Cyfansoddi Docker i Ddechreuwyr
Dociwr (cynhwysydd sengl) a Docker Compose (cynwysyddion lluosog)

Achos defnydd nodweddiadol Docker Compose

Mae Docker Compose, yn y dwylo iawn, yn offeryn pwerus iawn sy'n eich galluogi i ddefnyddio cymwysiadau â phensaernïaeth gymhleth yn gyflym. Nawr byddwn yn edrych ar enghraifft o'r defnydd ymarferol o Docker Compose, y bydd ei ddadansoddiad yn caniatáu ichi werthuso'r buddion y bydd defnyddio Docker Compose yn eu rhoi i chi.

Dychmygwch mai chi yw datblygwr prosiect gwe. Mae'r prosiect hwn yn cynnwys dwy wefan. Mae'r cyntaf yn caniatáu i bobl fusnes greu, gyda dim ond ychydig o gliciau, siopau ar-lein. Mae'r ail wedi'i anelu at gymorth cwsmeriaid. Mae'r ddau safle hyn yn rhyngweithio â'r un gronfa ddata.

Mae eich prosiect yn dod yn fwy a mwy poblogaidd, ac mae'n ymddangos nad yw gallu'r gweinydd y mae'n gweithio arno bellach yn ddigon. O ganlyniad, rydych chi'n penderfynu trosglwyddo'r prosiect cyfan i beiriant arall.

Yn anffodus, nid ydych wedi defnyddio rhywbeth fel Docker Compose. Felly, bydd yn rhaid ichi fudo ac ad-drefnu gwasanaethau un ar y tro, gan obeithio na fyddwch yn anghofio dim yn y broses o wneud y gwaith hwn.

Os ydych chi'n defnyddio Docker Compose, yna mae mudo'ch prosiect i weinydd newydd yn broblem y gellir ei datrys trwy redeg ychydig o orchmynion. I gwblhau trosglwyddiad y prosiect i leoliad newydd, dim ond rhai gosodiadau sydd angen i chi eu gwneud a llwytho copi wrth gefn o'r gronfa ddata i'r gweinydd newydd.

Datblygu cymhwysiad cleient-gweinydd gan ddefnyddio Docker Compose

Nawr eich bod chi'n gwybod ar gyfer beth rydyn ni'n mynd i fod yn defnyddio Docker Compose, mae'n bryd creu eich cais cleient / gweinydd cyntaf gan ddefnyddio'r offeryn hwn. Sef, rydym yn sôn am ddatblygiad gwefan fach (gweinydd) yn Python, a all gynhyrchu ffeil gyda darn testun. Gofynnir am y ffeil hon gan y gweinydd gan raglen (cleient), sydd hefyd wedi'i ysgrifennu yn Python. Ar ôl derbyn y ffeil gan y gweinydd, mae'r rhaglen yn dangos y testun sydd wedi'i storio ynddo ar y sgrin.

Sylwch ein bod yn cymryd bod gennych chi hanfodion Docker a bod gennych chi'r platfform Docker eisoes wedi'i osod.

Gadewch i ni ddechrau gweithio ar y prosiect.

▍1. Creu prosiect

Er mwyn adeiladu eich cais cleient / gweinydd cyntaf, rwy'n awgrymu ichi ddechrau trwy greu ffolder prosiect. Dylai gynnwys y ffeiliau a'r ffolderi canlynol:

  • file docker-compose.yml. Ffeil Docker Compose yw hon a fydd yn cynnwys y cyfarwyddiadau sydd eu hangen i gychwyn a ffurfweddu'r gwasanaethau.
  • Ffolder server. Bydd yn cynnwys y ffeiliau angenrheidiol i wneud i'r gweinydd weithio.
  • Ffolder client. Dyma lle bydd y ffeiliau cais cleient yn cael eu lleoli.

O ganlyniad, dylai cynnwys prif ffolder eich prosiect edrych fel hyn:

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

▍2. Creu gweinydd

Yma byddwn ni, yn y broses o greu gweinydd, yn cyffwrdd â rhai pethau sylfaenol ynglŷn â Docker.

2a. Creu Ffeiliau

Ewch i'r ffolder server a chreu'r ffeiliau canlynol ynddo:

  • file server.py. Bydd yn cynnwys cod y gweinydd.
  • file index.html. Bydd y ffeil hon yn cynnwys darn o destun y dylai'r rhaglen cleient ei arddangos.
  • file Dockerfile. Dyma'r ffeil Docker a fydd yn cynnwys y cyfarwyddiadau sydd eu hangen i greu amgylchedd y gweinydd.

Dyma sut y dylai cynnwys eich ffolder edrych server/:

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

2b. Wrthi'n golygu ffeil Python.

Ychwanegu at ffeil server.py y cod canlynol:

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

Mae'r cod hwn yn caniatáu ichi greu gweinydd gwe syml. Bydd yn rhoi ffeil i gleientiaid index.html, y bydd eu cynnwys yn cael ei arddangos yn ddiweddarach ar y dudalen we.

2c. Wrthi'n golygu ffeil HTML

I ffeilio index.html ychwanegu'r testun canlynol:

Docker-Compose is magic!

Bydd y testun hwn yn cael ei anfon at y cleient.

2d. Wrthi'n golygu'r Dockerfile

Nawr byddwn yn creu ffeil syml Dockerfile, a fydd yn gyfrifol am drefnu'r amgylchedd amser rhedeg ar gyfer y gweinydd Python. Fel sail y ddelwedd a grëwyd, byddwn yn defnyddio yn swyddogol, a gynlluniwyd i redeg rhaglenni a ysgrifennwyd yn Python. Dyma gynnwys y 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/

Nawr gadewch i ni weithio ar y cleient.

▍3. Creu cleient

Wrth greu ochr cleient ein prosiect, byddwn yn cofio rhai o hanfodion Docker ar hyd y ffordd.

3a. Creu Ffeiliau

Ewch i'ch ffolder prosiect client a chreu'r ffeiliau canlynol ynddo:

  • file client.py. Dyma lle bydd y cod cleient.
  • file Dockerfile. Mae'r ffeil hon yn chwarae'r un rôl â ffeil debyg yn ffolder y gweinydd. Sef, mae'n cynnwys datganiad sy'n disgrifio sut i greu amgylchedd ar gyfer gweithredu cod cleient.

O ganlyniad, eich ffolder client/ Ar y cam hwn dylai edrych fel hyn:

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

3b. Golygu Ffeil Python

Ychwanegu at ffeil client.py y cod canlynol:

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

Diolch i'r cod hwn, gall y rhaglen cleient lawrlwytho data o'r gweinydd a'i arddangos ar y sgrin.

3c. Wrthi'n golygu'r Dockerfile

Fel yn achos y gweinydd, rydym yn creu syml ar gyfer y cleient Dockerfile, yn gyfrifol am siapio'r amgylchedd y bydd y cais cleient Python yn rhedeg ynddo. Dyma'r cod cleient Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Cyfansoddi Docker

Fel y gwelwch, rydym wedi creu dau brosiect gwahanol: gweinydd a chleient. Mae gan bob un ohonynt ei ffeil ei hun Dockerfile. Hyd yn hyn, nid yw popeth sy'n digwydd yn mynd y tu hwnt i hanfodion gweithio gyda Docker. Nawr rydyn ni'n dod i weithio gyda Docker Compose. I wneud hyn, cyfeiriwch at y ffeil docker-compose.ymllleoli yn y ffolder gwraidd y prosiect.

Sylwch nad ydym yn anelu at gwmpasu'n llwyr yr holl orchmynion y gellir eu defnyddio ynddynt docker-compose.yml. Ein prif nod yw chwalu enghraifft ymarferol sy'n rhoi gwybodaeth sylfaenol i chi am Docker Compose.

Dyma'r cod i'w roi yn y ffeil 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. Adeiladu prosiect

Ar ôl i mewn docker-compose.yml mae'r holl gyfarwyddiadau angenrheidiol wedi'u gwneud, mae angen cydosod y prosiect. Mae'r cam hwn o'n gwaith yn debyg i ddefnyddio'r gorchymyn docker build, ond mae'r gorchymyn cyfatebol yn gysylltiedig â sawl gwasanaeth:

$ docker-compose build

▍6. Lansio'r prosiect

Nawr bod y prosiect wedi'i adeiladu, mae'n bryd ei redeg. Mae'r cam hwn o'n gwaith yn cyfateb i'r cam y gweithredir y gorchymyn, wrth weithio gyda chynwysyddion unigol docker run:

$ docker-compose up

Ar ôl gweithredu'r gorchymyn hwn, dylai'r testun a lwythwyd gan y cleient o'r gweinydd ymddangos yn y derfynell: Docker-Compose is magic!.

Fel y soniwyd eisoes, mae'r gweinydd yn defnyddio'r porthladd cyfrifiadur 1234 i wasanaethu ceisiadau cwsmeriaid. Felly, os ewch chi yn y porwr i'r cyfeiriad http://localhost:1234/, bydd yn arddangos tudalen gyda thestun Docker-Compose is magic!.

Gorchmynion Defnyddiol

Gadewch i ni edrych ar rai o'r gorchmynion a allai fod yn ddefnyddiol i chi wrth weithio gyda Docker Compose.

Mae'r gorchymyn hwn yn caniatáu ichi stopio a dileu cynwysyddion ac adnoddau eraill a grëwyd gan y gorchymyn docker-compose up:

$ docker-compose down

Mae'r gorchymyn hwn yn argraffu'r logiau gwasanaeth:

$ docker-compose logs -f [service name]

Er enghraifft, yn ein prosiect gellir ei ddefnyddio yn y ffurflen hon: $ docker-compose logs -f [service name].

Gyda'r gorchymyn hwn, gallwch chi arddangos rhestr o gynwysyddion:

$ docker-compose ps

Mae'r gorchymyn hwn yn caniatáu ichi weithredu gorchymyn mewn cynhwysydd rhedeg:

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

Er enghraifft, gallai edrych fel hyn: docker-compose exec server ls.

Mae'r gorchymyn hwn yn caniatáu ichi arddangos rhestr o ddelweddau:

$ docker-compose images

Canlyniadau

Rydym wedi ymdrin â hanfodion gweithio gyda thechnoleg Docker Compose, y bydd ei gwybodaeth yn caniatáu ichi ddefnyddio'r dechnoleg hon ac, os dymunir, dechrau ei hastudio'n fanylach. Yma ystorfa gyda chod y prosiect, a ystyriwyd gennym yma.

Annwyl ddarllenwyr! Ydych chi'n defnyddio Docker Compose yn eich prosiectau?

Canllaw Cyfansoddi Docker i Ddechreuwyr

Ffynhonnell: hab.com

Ychwanegu sylw