Жаңадан бастаушыларға арналған Docker құрастыру нұсқаулығы

Аудармасы бүгін біз жариялап отырған мақаланың авторы бұл Docker Compose-ді үйренгісі келетін және Docker көмегімен алғашқы клиент-сервер қосымшасын құруға бет алған әзірлеушілерге арналғанын айтады. Бұл материалдың оқырманы Docker негіздерімен таныс деп болжанады. Бұлай болмаса, қарап шығуға болады бұл бойынша материалдар топтамасы бұл Docker негіздерін және Kubernetes негіздерін қамтитын пост және бұл жаңадан бастаушыларға арналған мақала.

Жаңадан бастаушыларға арналған Docker құрастыру нұсқаулығы

Docker Compose дегеніміз не?

Docker Compose - бұл Docker құрамына кіретін құрал. Ол жобаны орналастыруға байланысты мәселелерді шешуге арналған.

Docker негіздерін үйрену кезінде сіз автономды түрде жұмыс істейтін және мысалы, сыртқы деректер көздеріне немесе белгілі бір қызметтерге тәуелді емес қарапайым қолданбаларды жасауды кездестірген боларсыз. Іс жүзінде мұндай қолданбалар сирек кездеседі. Нақты жобалар әдетте бірге жұмыс істейтін қосымшалардың тұтас жиынтығын қамтиды.

Жобаны орналастыру кезінде Docker Compose пайдалану қажет екенін қалай білуге ​​болады? Бұл шын мәнінде өте қарапайым. Бұл жобаны орындау үшін бірнеше қызметтерді пайдалансаңыз, Docker Compose пайдалы болуы мүмкін. Мысалы, пайдаланушылардың аутентификациясы үшін дерекқорға қосылу қажет веб-сайтты жасайтын жағдайда. Мұндай жоба екі қызметтен тұруы мүмкін - сайттың жұмысын қамтамасыз ететін және деректер базасын жүргізуге жауапты.

Docker Compose технологиясы оны жеңілдетілген түрде сипаттау үшін бір пәрмен арқылы көптеген қызметтерді іске қосуға мүмкіндік береді.

Docker және Docker Compose арасындағы айырмашылық

Docker қолданбаны құрайтын жеке контейнерлерді (қызметтерді) басқару үшін қолданылады.

Docker Compose қолданбаны құрайтын бірнеше контейнерлерді бір уақытта басқару үшін қолданылады. Бұл құрал Docker сияқты мүмкіндіктерді ұсынады, бірақ күрделірек қолданбалармен жұмыс істеуге мүмкіндік береді.

Жаңадан бастаушыларға арналған Docker құрастыру нұсқаулығы
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

2b. 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!

Бұл мәтін клиентке жіберіледі.

2d. Docker файлын өңдеу

Енді біз қарапайым файл жасаймыз 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. Docker файлын өңдеу

Сервер жағдайындағыдай, біз қарапайым жасаймыз 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 құрастыру нұсқаулығы

Ақпарат көзі: www.habr.com

пікір қалдыру