Докер бичих эхлэгчдэд зориулсан гарын авлага

Өнөөдрийн бидний орчуулгыг нийтэлж буй нийтлэлийн зохиогч хэлэхдээ, энэ нь Docker Compose програмыг сурахыг хүсч байгаа бөгөөд Docker ашиглан анхны клиент-сервер програмаа бүтээхээр зорьж буй хөгжүүлэгчдэд зориулагдсан болно. Энэ материалыг уншигч Docker-ийн үндсийг мэддэг гэж үздэг. Хэрэв тийм биш бол та харж болно энэ нь цуврал материалууд дээр энэ нь Докерын үндсийг Kubernetes-ийн үндсүүдийн хамт багтаасан нийтлэл, мөн энэ нь эхлэгчдэд зориулсан нийтлэл.

Докер бичих эхлэгчдэд зориулсан гарын авлага

Docker Compose гэж юу вэ?

Docker Compose нь Docker-д багтсан хэрэгсэл юм. Энэ нь төслийг хэрэгжүүлэхтэй холбоотой асуудлыг шийдвэрлэх зорилготой юм.

Docker-ийн үндсийг сурч байхдаа та бие даасан байдлаар ажилладаг, жишээлбэл, гадаад мэдээллийн эх сурвалж эсвэл зарим үйлчилгээнээс хамаардаггүй энгийн програмуудыг бүтээхтэй тулгарч магадгүй юм. Практикт ийм програмууд ховор байдаг. Бодит төслүүд нь ихэвчлэн хамтдаа ажилладаг бүхэл бүтэн програмуудыг хамардаг.

Төслийг ашиглахдаа Docker Compose ашиглах шаардлагатай эсэхийг яаж мэдэх вэ? Энэ нь үнэндээ маш энгийн. Хэрэв та энэ төслийг хэрэгжүүлэхийн тулд олон үйлчилгээ ашигладаг бол Docker Compose хэрэг болно. Жишээлбэл, тэд хэрэглэгчдийг баталгаажуулахын тулд мэдээллийн санд холбогдох шаардлагатай вэб сайтыг үүсгэсэн нөхцөлд. Ийм төсөл нь сайтын ажиллагааг хангах, мэдээллийн санг хадгалах үүрэгтэй гэсэн хоёр үйлчилгээнээс бүрдэж болно.

Үүнийг хялбаршуулсан байдлаар тайлбарлахын тулд Docker Compose технологи нь нэг тушаалаар олон үйлчилгээг эхлүүлэх боломжийг олгодог.

Docker болон Docker Compose хоёрын ялгаа

Докер нь програмыг бүрдүүлдэг тусдаа контейнеруудыг (үйлчилгээ) удирдахад ашиглагддаг.

Docker Compose нь програмыг бүрдүүлдэг олон контейнерийг нэгэн зэрэг удирдахад ашиглагддаг. Энэ хэрэгсэл нь 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

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!

Энэ текстийг үйлчлүүлэгч рүү илгээх болно.

2d. Докер файлыг засварлаж байна

Одоо бид энгийн файл үүсгэх болно 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. Үйлчлүүлэгч үүсгэх

Төслийн үйлчлүүлэгчийн талыг бий болгохдоо бид Докерын зарим үндсийг санах болно.

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, Python клиент програмыг ажиллуулах орчныг бүрдүүлэх үүрэгтэй. Энд үйлчлүүлэгчийн код байна Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Та анзаарсан байх, бид хоёр өөр төсөл бий болгосон: сервер болон үйлчлүүлэгч. Тэд тус бүр өөрийн гэсэн файлтай Dockerfile. Одоогоор болсон бүх зүйл Докертой ажиллах үндсэн зарчмаас хэтрээгүй байна. Одоо бид 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 ашигладаг уу?

Докер бичих эхлэгчдэд зориулсан гарын авлага

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх