Başlayanlar üçün Docker Bəstələmə Bələdçisi

Bu gün dərc etdiyimiz məqalənin müəllifi deyir ki, bu, Docker Compose proqramını öyrənmək istəyən və Docker-dən istifadə edərək ilk müştəri-server tətbiqini yaratmağa gedən tərtibatçılar üçün nəzərdə tutulub. Bu materialın oxucusunun Docker-in əsasları ilə tanış olduğu güman edilir. Əgər belə deyilsə, baxa bilərsiniz bu materiallar seriyası bu Kubernetes əsasları ilə birlikdə Docker-in əsaslarını əhatə edən yazı və bu yeni başlayanlar üçün məqalə.

Başlayanlar üçün Docker Bəstələmə Bələdçisi

Docker Compose nədir?

Docker Compose Docker-ə daxil olan bir vasitədir. Layihələrin yerləşdirilməsi ilə bağlı problemləri həll etmək üçün nəzərdə tutulmuşdur.

Docker-in əsaslarını öyrənərkən, məsələn, xarici məlumat mənbələrindən və ya müəyyən xidmətlərdən asılı olmayaraq, avtonom işləyən ən sadə proqramların yaradılması ilə rastlaşa bilərsiniz. Təcrübədə bu cür tətbiqlər nadirdir. Həqiqi layihələr adətən birgə proqramların bütün dəstini əhatə edir.

Layihəni yerləşdirərkən Docker Compose istifadə etməyiniz lazım olub-olmadığını necə bilirsiniz? Əslində, çox sadədir. Bu layihəni həyata keçirmək üçün bir neçə xidmətdən istifadə edirsinizsə, Docker Compose faydalı ola bilər. Məsələn, istifadəçinin autentifikasiyasını həyata keçirmək üçün verilənlər bazasına qoşulmalı olan veb sayt yaratdığınız bir vəziyyətdə. Belə bir layihə iki xidmətdən ibarət ola bilər - biri saytın fəaliyyətini təmin edən, digəri isə verilənlər bazasını dəstəkləmək üçün cavabdehdir.

Docker Compose texnologiyası, onu sadələşdirilmiş şəkildə təsvir etsəniz, bir əmrlə bir çox xidməti işə salmağa imkan verir.

Docker və Docker Compose arasındakı fərq

Docker tətbiqi təşkil edən fərdi konteynerləri (xidmətləri) idarə etmək üçün istifadə olunur.

Docker Compose eyni zamanda tətbiqin bir hissəsi olan bir neçə konteyneri idarə etmək üçün istifadə olunur. Bu alət Docker ilə eyni xüsusiyyətləri təklif edir, lakin daha mürəkkəb proqramlarla işləməyə imkan verir.

Başlayanlar üçün Docker Bəstələmə Bələdçisi
Docker (tək konteyner) və Docker Compose (birdən çox konteyner)

Tipik Docker Compose istifadə nümunəsi

Docker Compose, sağ əllərdə, mürəkkəb arxitekturaya malik proqramları tez bir zamanda yerləşdirməyə imkan verən çox güclü bir vasitədir. İndi biz Docker Compose-un praktiki istifadəsinə dair bir nümunəyə baxacağıq, onun təhlili Docker Compose istifadəsinin sizə verəcəyi faydaları qiymətləndirməyə imkan verəcəkdir.

Təsəvvür edin ki, siz veb layihəsinin yaradıcısısınız. Bu layihəyə iki internet saytı daxildir. Birincisi, iş adamlarına bir neçə kliklə onlayn mağazalar yaratmağa imkan verir. İkincisi müştəri dəstəyinə yönəlib. Bu iki sayt eyni verilənlər bazası ilə qarşılıqlı əlaqədədir.

Layihəniz getdikcə populyarlaşır və onun işlədiyi serverin tutumu artıq kifayət etmir. Nəticədə, bütün layihəni başqa bir maşına köçürməyə qərar verdiniz.

Təəssüf ki, siz Docker Compose kimi bir şey istifadə etməmisiniz. Buna görə də, bu iş prosesində heç bir şeyi unutmayacağınıza ümid edərək xidmətləri bir-bir köçürməli və yenidən konfiqurasiya etməli olacaqsınız.

Docker Compose istifadə edirsinizsə, o zaman layihənizi yeni serverə köçürmək bir neçə əmr işlətməklə həll edilə bilən bir problemdir. Layihənin yeni yerə köçürülməsini başa çatdırmaq üçün yalnız bəzi parametrləri etmək və verilənlər bazasının ehtiyat nüsxəsini yeni serverə yükləmək lazımdır.

Docker Compose istifadə edərək müştəri-server tətbiqinin hazırlanması

İndi Docker Compose-dan nə üçün istifadə edəcəyimizi bildiyiniz üçün, bu alətdən istifadə edərək ilk müştəri/server proqramınızı yaratmağın vaxtı gəldi. Məhz, söhbət Python-da mətn fraqmenti ilə fayl yarada bilən kiçik veb-saytın (serverin) hazırlanmasından gedir. Bu fayl serverdən Python-da yazılmış proqram (müştəri) tərəfindən tələb olunur. Faylı serverdən qəbul etdikdən sonra proqram orada saxlanılan mətni ekrana çıxarır.

Nəzərə alın ki, biz sizin Docker-in əsaslarına sahib olduğunuzu və artıq Docker platformasının quraşdırıldığını güman edirik.

Layihə üzərində işə başlayaq.

▍1. Layihə yaradın

İlk müştəri/server tətbiqinizi qurmaq üçün sizə layihə qovluğu yaratmaqla başlamağı təklif edirəm. O, aşağıdakı faylları və qovluqları ehtiva etməlidir:

  • Файл docker-compose.yml. Bu, xidmətləri başlamaq və konfiqurasiya etmək üçün lazım olan təlimatları ehtiva edən Docker Compose faylıdır.
  • Qovluq server. Serverin işləməsi üçün lazım olan faylları ehtiva edəcəkdir.
  • Qovluq client. Müştəri proqram fayllarının yerləşəcəyi yer budur.

Nəticədə, layihənizin əsas qovluğunun məzmunu belə görünməlidir:

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

▍2. Server yaradılması

Burada server yaratma prosesində Docker ilə bağlı bəzi əsas şeylərə toxunacağıq.

2a. Faylların yaradılması

Qovluğa keçin server və orada aşağıdakı faylları yaradın:

  • Файл server.py. O, server kodunu ehtiva edəcək.
  • Файл index.html. Bu faylda müştəri tətbiqinin göstərməli olduğu mətn parçası olacaq.
  • Файл Dockerfile. Bu, server mühitini yaratmaq üçün lazım olan təlimatları ehtiva edən Docker faylıdır.

Qovluqunuzun məzmunu belə görünməlidir server/:

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

2b. Python faylının redaktə edilməsi.

Fayla əlavə edin server.py aşağıdakı kod:

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

Bu kod sadə veb server yaratmağa imkan verir. Müştərilərə bir fayl verəcəkdir index.htmlməzmunu daha sonra veb-səhifədə göstəriləcək.

2c. HTML faylının redaktə edilməsi

Sənədləşdirmək index.html aşağıdakı mətni əlavə edin:

Docker-Compose is magic!

Bu mətn müştəriyə göndəriləcək.

2d. Docker faylının redaktə edilməsi

İndi sadə bir fayl yaradacağıq Dockerfile, Python serveri üçün iş vaxtı mühitinin təşkilinə cavabdeh olacaq. Yaradılan görüntünün əsası olaraq istifadə edəcəyik rəsmi olaraq, Python-da yazılmış proqramları işlətmək üçün nəzərdə tutulmuşdur. Budur Dockerfile məzmunu:

# На всякий случай напоминаю, что 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/

İndi müştəri üzərində işləyək.

▍3. Müştəri yaradın

Layihəmizin müştəri tərəfini yaratarkən, yol boyu bəzi Docker əsaslarını xatırlayacağıq.

3a. Faylların yaradılması

Layihə qovluğuna gedin client və orada aşağıdakı faylları yaradın:

  • Файл client.py. Bu, müştəri kodunun olacağı yerdir.
  • Файл Dockerfile. Bu fayl server qovluğunda oxşar fayl kimi eyni rolu oynayır. Məhz, o, müştəri kodunu icra etmək üçün mühitin necə yaradılacağını təsvir edən bir ifadəni ehtiva edir.

Nəticədə qovluğunuz client/ Bu mərhələdə bu belə görünməlidir:

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

3b. Python faylının redaktə edilməsi

Fayla əlavə edin client.py aşağıdakı kod:

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

Bu kod sayəsində müştəri proqramı serverdən məlumatları yükləyə və ekranda göstərə bilər.

3c. Docker faylının redaktə edilməsi

Server vəziyyətində olduğu kimi, biz müştəri üçün sadə yaradırıq Dockerfile, Python müştəri tətbiqinin işləyəcəyi mühitin formalaşdırılmasına cavabdehdir. Budur müştəri kodu Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Gördüyünüz kimi iki fərqli layihə yaratdıq: server və müştəri. Onların hər birinin öz faylı var Dockerfile. İndiyə qədər baş verən hər şey Docker ilə işləməyin əsaslarından kənara çıxmır. İndi Docker Compose ilə işə başlayaq. Bunu etmək üçün fayla baxın docker-compose.ymllayihənin kök qovluğunda yerləşir.

Nəzərə alın ki, burada istifadə oluna bilən bütün əmrləri əhatə etməyi məqsəd qoymuruq docker-compose.yml. Əsas məqsədimiz sizə Docker Compose haqqında əsas biliklər verən praktiki nümunəni parçalamaqdır.

Budur fayla daxil ediləcək kod 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. Layihə qurmaq

Girişdən sonra docker-compose.yml bütün lazımi təlimatlar verilmişdir, layihənin yığılması lazımdır. İşimizin bu addımı əmrin istifadəsinə bənzəyir docker build, lakin müvafiq əmr bir neçə xidmətlə bağlıdır:

$ docker-compose build

▍6. Layihənin işə salınması

İndi layihə quruldu, onu həyata keçirməyin vaxtı gəldi. İşimizin bu addımı fərdi konteynerlərlə işləyərkən əmrin yerinə yetirildiyi addıma uyğundur docker run:

$ docker-compose up

Bu əmri yerinə yetirdikdən sonra müştərinin serverdən yüklədiyi mətn terminalda görünməlidir: Docker-Compose is magic!.

Artıq qeyd edildiyi kimi, server kompüter portundan istifadə edir 1234 müştəri istəklərinə xidmət etmək. Buna görə də, brauzerdə ünvana getsəniz http://localhost:1234/, o, mətnlə bir səhifə göstərəcək Docker-Compose is magic!.

Faydalı Əmrlər

Docker Compose ilə işləyərkən faydalı ola biləcək bəzi əmrlərə nəzər salaq.

Bu əmr əmrin yaratdığı konteynerləri və digər resursları dayandırmağa və silməyə imkan verir docker-compose up:

$ docker-compose down

Bu əmr xidmət qeydlərini çap edir:

$ docker-compose logs -f [service name]

Məsələn, layihəmizdə bu formada istifadə edilə bilər: $ docker-compose logs -f [service name].

Bu əmrlə siz konteynerlərin siyahısını göstərə bilərsiniz:

$ docker-compose ps

Bu əmr işləyən konteynerdə əmri yerinə yetirməyə imkan verir:

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

Məsələn, bu belə görünə bilər: docker-compose exec server ls.

Bu əmr sizə şəkillərin siyahısını göstərməyə imkan verir:

$ docker-compose images

Nəticələri

Biz Docker Compose texnologiyası ilə işləməyin əsaslarını əhatə etdik, onun bilikləri bu texnologiyadan istifadə etməyə və arzu olunarsa, onu daha dərindən öyrənməyə imkan verəcək. Burada burada nəzərdən keçirdiyimiz layihə kodu ilə depo.

Hörmətli oxucular! Layihələrinizdə Docker Compose istifadə edirsiniz?

Başlayanlar üçün Docker Bəstələmə Bələdçisi

Mənbə: www.habr.com

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