Docker Compose-ի սկսնակների ուղեցույց

Հոդվածի հեղինակը, որի թարգմանությունը հրապարակում ենք այսօր, ասում է, որ այն նախատեսված է այն ծրագրավորողների համար, ովքեր ցանկանում են սովորել Docker Compose և շարժվում են դեպի Docker-ի միջոցով իրենց առաջին հաճախորդ-սերվեր հավելվածի ստեղծմանը։ Ենթադրվում է, որ այս նյութի ընթերցողը ծանոթ է Docker-ի հիմունքներին։ Եթե ​​դա այդպես չէ, կարող եք դիտել սա է վերաբերյալ նյութերի շարքը սա է գրառում, որը ներառում է Docker-ի հիմունքները Kubernetes-ի հիմունքների հետ միասին, և սա է հոդված սկսնակների համար.

Docker Compose-ի սկսնակների ուղեցույց

Ի՞նչ է Docker Compose-ը:

Docker Compose-ը Docker-ի հետ ներառված գործիք է: Այն նախատեսված է ծրագրի տեղակայման հետ կապված խնդիրները լուծելու համար:

Docker-ի հիմունքները սովորելիս դուք կարող եք հանդիպել պարզ հավելվածների ստեղծմանը, որոնք աշխատում են ինքնուրույն և կախված չեն, օրինակ, տվյալների արտաքին աղբյուրներից կամ որոշակի ծառայություններից: Գործնականում նման դիմումները հազվադեպ են: Իրական նախագծերը սովորաբար ներառում են մի ամբողջ շարք հավելվածներ, որոնք աշխատում են միասին:

Ինչպե՞ս գիտեք, որ նախագիծը տեղակայելիս անհրաժեշտ է օգտագործել Docker Compose-ը: Դա իրականում շատ պարզ է: Եթե ​​այս նախագիծն աշխատեցնելու համար օգտագործում եք բազմաթիվ ծառայություններ, ապա Docker Compose-ը կարող է օգտակար լինել: Օրինակ, մի իրավիճակում, երբ նրանք ստեղծում են վեբկայք, որը պետք է միանա տվյալների շտեմարանին՝ օգտատերերի իսկությունը հաստատելու համար: Նման նախագիծը կարող է բաղկացած լինել երկու ծառայություններից՝ այն, որն ապահովում է կայքի աշխատանքը, և այն, որը պատասխանատու է տվյալների բազայի պահպանման համար։

Docker Compose տեխնոլոգիան, այն պարզեցված ձևով նկարագրելու համար, թույլ է տալիս գործարկել բազմաթիվ ծառայություններ մեկ հրամանով:

Տարբերությունը Docker-ի և Docker Compose-ի միջև

Docker-ն օգտագործվում է հավելվածը կազմող առանձին բեռնարկղերի (ծառայությունների) կառավարման համար:

Docker Compose-ն օգտագործվում է հավելվածը կազմող բազմաթիվ կոնտեյներներ միաժամանակ կառավարելու համար: Այս գործիքն առաջարկում է նույն հնարավորությունները, ինչ Docker-ը, սակայն թույլ է տալիս աշխատել ավելի բարդ հավելվածների հետ:

Docker Compose-ի սկսնակների ուղեցույց
Docker (մեկ կոնտեյներ) և Docker Compose (մի քանի բեռնարկղեր)

Docker Compose-ի տիպիկ օգտագործման դեպք

Docker Compose-ը ճիշտ ձեռքերում շատ հզոր գործիք է, որը թույլ է տալիս շատ արագ տեղակայել բարդ ճարտարապետություններով հավելվածներ: Այժմ մենք կանդրադառնանք Docker Compose-ի գործնական օգտագործման օրինակին, որի վերլուծությունը թույլ կտա գնահատել Docker Compose-ի կիրառման առավելությունները:

Պատկերացրեք, որ դուք վեբ նախագծի մշակող եք: Այս նախագիծը ներառում է երկու կայք. Առաջինը թույլ է տալիս գործարարներին ստեղծել առցանց խանութներ ընդամենը մի քանի կտտոցով: Երկրորդը ուղղված է հաճախորդների աջակցությանը: Այս երկու կայքերը փոխազդում են նույն տվյալների բազայի հետ:

Ձեր նախագիծն ավելի ու ավելի հայտնի է դառնում, և պարզվում է, որ սերվերի հզորությունը, որի վրա այն աշխատում է, այլևս բավարար չէ։ Արդյունքում դուք որոշում եք ամբողջ նախագիծը տեղափոխել մեկ այլ մեքենա:

Ցավոք, դուք չեք օգտագործել Docker Compose-ի նման մի բան: Հետևաբար, դուք ստիպված կլինեք փոխանցել և վերակազմավորել ծառայությունները մեկ առ մեկ՝ հուսալով, որ գործընթացում ոչինչ չեք մոռանա:

Եթե ​​դուք օգտագործում եք Docker Compose, ապա ձեր նախագիծը նոր սերվեր տեղափոխելը խնդիր է, որը կարող է լուծվել մի քանի հրամանների միջոցով: Նախագծի տեղափոխումը նոր վայր ավարտելու համար անհրաժեշտ է միայն որոշ կարգավորումներ կատարել և տվյալների բազայի կրկնօրինակը վերբեռնել նոր սերվեր:

Հաճախորդ-սերվեր հավելվածի մշակում Docker Compose-ի միջոցով

Այժմ, երբ դուք գիտեք, թե ինչի համար ենք մենք օգտագործելու Docker Compose-ը, ժամանակն է ստեղծել ձեր առաջին հաճախորդ-սերվեր հավելվածը՝ օգտագործելով այս գործիքը: Մասնավորապես, խոսքը Python-ում փոքրիկ կայք (սերվեր) մշակելու մասին է, որը կարող է տեքստի հատվածով ֆայլ դուրս բերել։ Այս ֆայլը սերվերից պահանջվում է ծրագրի (հաճախորդի) կողմից, որը նույնպես գրված է Python-ով։ Սերվերից ֆայլ ստանալուց հետո ծրագիրը էկրանին ցուցադրում է դրանում պահված տեքստը։

Խնդրում ենք նկատի ունենալ, որ մենք ենթադրում ենք, որ դուք ունեք Docker-ի հիմնական պատկերացումները և որ դուք արդեն տեղադրել եք Docker հարթակը:

Սկսենք աշխատել նախագծի վրա։

▍1. Նախագծի ստեղծում

Ձեր առաջին հաճախորդ-սերվեր հավելվածը ստեղծելու համար առաջարկում եմ սկսել նախագծի թղթապանակ ստեղծելով: Այն պետք է պարունակի հետևյալ ֆայլերը և թղթապանակները.

  • ֆայլ docker-compose.yml. Սա Docker Compose ֆայլ է, որը կպարունակի ծառայությունները սկսելու և կարգավորելու համար անհրաժեշտ հրահանգները:
  • Թղթապանակ server. Այն կպարունակի ֆայլեր, որոնք անհրաժեշտ են սերվերի աշխատանքը պահպանելու համար:
  • Թղթապանակ client. Հաճախորդի դիմումի ֆայլերը կգտնվեն այստեղ:

Արդյունքում, ձեր նախագծի հիմնական թղթապանակի բովանդակությունը պետք է նման լինի.

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

▍2. Սերվերի ստեղծում

Այստեղ, սերվեր ստեղծելու գործընթացում, մենք կանդրադառնանք Docker-ի հետ կապված որոշ հիմնական բաների:

2 ա. Ֆայլերի ստեղծում

Գնացեք թղթապանակ server և դրանում ստեղծեք հետևյալ ֆայլերը.

  • ֆայլ server.py. Այն կպարունակի սերվերի կոդը:
  • ֆայլ index.html. Այս ֆայլը կպարունակի տեքստի մի հատված, որը պետք է թողարկի հաճախորդի հավելվածը:
  • ֆայլ Dockerfile. Սա Docker ֆայլ է, որը կպարունակի սերվերի միջավայր ստեղծելու համար անհրաժեշտ հրահանգները:

Ահա թե ինչպիսին պետք է լինի ձեր թղթապանակի բովանդակությունը server/:

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

2բ. Python ֆայլի խմբագրում:

Ավելացնել ֆայլին server.py հետևյալ կոդը.

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

Այս կոդը թույլ է տալիս ստեղծել պարզ վեբ սերվեր: Նա հաճախորդներին կտա ֆայլը index.html, որի բովանդակությունը հետագայում կցուցադրվի վեբ էջում։

2c. HTML ֆայլի խմբագրում

Ներկայացնելու համար index.html ավելացնել հետևյալ տեքստը.

Docker-Compose is magic!

Այս տեքստը կուղարկվի հաճախորդին:

2դ. Dockerfile-ի խմբագրում

Այժմ մենք կստեղծենք պարզ ֆայլ Dockerfile, ով պատասխանատու կլինի Python սերվերի համար գործարկման միջավայրի կազմակերպման համար։ Որպես ստեղծված պատկերի հիմք՝ մենք կօգտագործենք պաշտոնական կարգով, նախատեսված է Python-ով գրված ծրագրեր գործարկելու համար։ Ահա 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/

Հիմա եկեք սկսենք աշխատել հաճախորդի վրա:

▍3. Հաճախորդի ստեղծում

Մեր նախագծի հաճախորդի կողմը ստեղծելիս մենք ճանապարհին կհիշենք Docker-ի որոշ հիմունքներ:

3 ա. Ֆայլերի ստեղծում

Գնացեք ձեր նախագծի թղթապանակ client և դրանում ստեղծեք հետևյալ ֆայլերը.

  • ֆայլ client.py. Հաճախորդի կոդը կգտնվի այստեղ:
  • ֆայլ Dockerfile. Այս ֆայլը կատարում է նույն դերը, ինչ սերվերի թղթապանակում գտնվող նմանատիպ ֆայլը: Մասնավորապես, այն պարունակում է հրահանգներ, որոնք նկարագրում են, թե ինչպես ստեղծել միջավայր՝ հաճախորդի կոդը գործարկելու համար:

Արդյունքում ձեր թղթապանակը client/ աշխատանքի այս փուլում այն ​​պետք է այսպիսի տեսք ունենա.

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

3բ. Python ֆայլի խմբագրում

Ավելացնել ֆայլին client.py հետևյալ կոդը.

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

Այս կոդով հաճախորդի հավելվածը կարող է տվյալներ ներբեռնել սերվերից և ցուցադրել դրանք էկրանին:

3c. Dockerfile-ի խմբագրում

Ինչպես սերվերի դեպքում, մենք ստեղծում ենք պարզ Dockerfile, պատասխանատու է միջավայրի ստեղծման համար, որտեղ կաշխատի Python հաճախորդի հավելվածը։ Ահա հաճախորդի կոդը Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Ինչպես նկատեցիք, մենք ստեղծեցինք երկու տարբեր նախագծեր՝ սերվեր և հաճախորդ: Նրանցից յուրաքանչյուրն ունի իր սեփական ֆայլը Dockerfile. Մինչ այժմ այն ​​ամենը, ինչ տեղի է ունեցել, դուրս չի եկել Docker-ի հետ աշխատելու հիմունքներից: Այժմ մենք սկսում ենք Docker Compose-ը: Դա անելու համար եկեք գնանք ֆայլ docker-compose.yml, որը գտնվում է նախագծի արմատային պանակում:

Խնդրում ենք նկատի ունենալ, որ այստեղ մենք չենք փորձում ծածկել բացարձակապես բոլոր հրամանները, որոնք կարող են օգտագործվել docker-compose.yml. Մեր հիմնական նպատակն է քայլել գործնական օրինակով, որը ձեզ կտա Docker Compose-ի հիմնական գիտելիքները:

Ահա ֆայլում տեղադրելու կոդը 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. Նախագծի կառուցում

ներսից հետո docker-compose.yml Բոլոր անհրաժեշտ հրահանգները մուտքագրված են, նախագիծը պետք է հավաքվի։ Մեր աշխատանքի այս քայլը նման է հրամանի օգտագործմանը docker build, սակայն համապատասխան հրամանը վերաբերում է մի քանի ծառայությունների.

$ docker-compose build

▍6. Նախագծի մեկնարկը

Այժմ, երբ նախագիծը հավաքվել է, ժամանակն է սկսել այն: Մեր աշխատանքի այս քայլը համապատասխանում է այն քայլին, երբ անհատական ​​կոնտեյներների հետ աշխատելիս հրամանը կատարվում է docker run:

$ docker-compose up

Այս հրամանը կատարելուց հետո հաճախորդի կողմից սերվերից ներբեռնված տեքստը պետք է հայտնվի տերմինալում. Docker-Compose is magic!.

Ինչպես արդեն նշվեց, սերվերն օգտագործում է համակարգչային պորտը 1234 սպասարկել հաճախորդների պահանջները: Հետեւաբար, եթե դուք գնում եք ձեր բրաուզերի հասցեին http://localhost:1234/, այն կցուցադրի տեքստով էջ Docker-Compose is magic!.

Օգտակար հրամաններ

Դիտարկենք մի քանի հրամաններ, որոնք կարող եք օգտակար լինել Docker Compose-ի հետ աշխատելիս:

Այս հրամանը թույլ է տալիս դադարեցնել և ջնջել հրամանով ստեղծված կոնտեյներները և այլ ռեսուրսները docker-compose up:

$ docker-compose down

Այս հրամանը տպում է ծառայության մատյանները.

$ docker-compose logs -f [service name]

Օրինակ, մեր նախագծում այն ​​կարող է օգտագործվել այս ձևով. $ docker-compose logs -f [service name].

Օգտագործելով այս հրամանը, կարող եք ցուցադրել բեռնարկղերի ցանկը.

$ docker-compose ps

Այս հրամանը թույլ է տալիս կատարել հրամանը գործող կոնտեյներով.

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

Օրինակ, այն կարող է այսպիսի տեսք ունենալ. docker-compose exec server ls.

Այս հրամանը թույլ է տալիս ցուցադրել պատկերների ցանկը.

$ docker-compose images

Արդյունքները

Մենք դիտարկել ենք Docker Compose տեխնոլոգիայի հետ աշխատելու հիմունքները, որոնց իմացությունը թույլ կտա օգտագործել այս տեխնոլոգիան և, ցանկության դեպքում, սկսել այն ավելի խորը ուսումնասիրել: Այստեղ պահեստ՝ նախագծի կոդով, որը մենք նայեցինք այստեղ:

Հարգելի ընթերցողներ: Դուք օգտագործում եք Docker Compose-ը ձեր նախագծերում:

Docker Compose-ի սկսնակների ուղեցույց

Source: www.habr.com

Добавить комментарий