ዶከር አዘጋጅ ለጀማሪዎች መመሪያ

ዛሬ የምናትመው የጽሁፉ አቅራቢ ዶከር ኮምፖዝ መማር ለሚፈልጉ ገንቢዎች የታሰበ እና ዶከርን በመጠቀም የመጀመሪያውን የደንበኛ አገልጋይ አፕሊኬሽን ለመፍጠር በጉዞ ላይ ናቸው ብሏል። የዚህ ጽሑፍ አንባቢ የዶከር መሰረታዊ ነገሮችን እንደሚያውቅ ይገመታል. ጉዳዩ ይህ ካልሆነ, መመልከት ይችላሉ ይሄ ተከታታይ ቁሳቁሶች ይሄ የዶከርን መሰረታዊ ነገሮች ከኩበርኔትስ መሰረታዊ ነገሮች ጋር የሚሸፍን ልጥፍ እና ይሄ ለጀማሪዎች የሚሆን ጽሑፍ.

ዶከር አዘጋጅ ለጀማሪዎች መመሪያ

Docker Compose ምንድን ነው?

Docker Compose ከ Docker ጋር የተካተተ መሳሪያ ነው። ከፕሮጀክቶች መዘርጋት ጋር የተያያዙ ችግሮችን ለመፍታት የተነደፈ ነው።

የዶከርን መሰረታዊ ነገሮች እየተማርክ ሳለ በራስ ገዝ የሚሰሩ በጣም ቀላል አፕሊኬሽኖች ሲፈጠሩ አጋጥሞህ ይሆናል፣ ለምሳሌ በውጫዊ የመረጃ ምንጮች ወይም በአንዳንድ አገልግሎቶች ላይ አይወሰንም። በተግባር, እንደዚህ ያሉ መተግበሪያዎች እምብዛም አይደሉም. እውነተኛ ፕሮጀክቶች አብዛኛውን ጊዜ አጠቃላይ የትብብር መተግበሪያዎችን ያካትታሉ።

አንድ ፕሮጀክት ሲያሰማሩ Docker Compose መጠቀም እንዳለቦት እንዴት ያውቃሉ? እንደ እውነቱ ከሆነ, በጣም ቀላል ነው. ይህንን ፕሮጀክት ለማስኬድ ብዙ አገልግሎቶችን እየተጠቀሙ ከሆነ Docker Compose ጠቃሚ ሊሆን ይችላል። ለምሳሌ የተጠቃሚ ማረጋገጫን ለማከናወን ከውሂብ ጎታ ጋር መገናኘት ያለበትን ድር ጣቢያ በሚፈጥሩበት ሁኔታ ውስጥ። እንዲህ ዓይነቱ ፕሮጀክት ሁለት አገልግሎቶችን ሊያካትት ይችላል - አንደኛው የጣቢያው አሠራር ያረጋግጣል, እና የውሂብ ጎታውን ለመደገፍ ኃላፊነት ያለው.

Docker Compose ቴክኖሎጂ፣ በቀላል መንገድ ከገለፅክ፣ በአንድ ትዕዛዝ ብዙ አገልግሎቶችን እንድትጀምር ይፈቅድልሃል።

በ Docker እና Docker Compose መካከል ያለው ልዩነት

ዶከር አፕሊኬሽኑን የሚያዘጋጁትን ነጠላ መያዣዎችን (አገልግሎቶችን) ለማስተዳደር ይጠቅማል።

Docker Compose የመተግበሪያ አካል የሆኑ ብዙ ኮንቴይነሮችን በተመሳሳይ ጊዜ ለማስተዳደር ይጠቅማል። ይህ መሳሪያ እንደ Docker ተመሳሳይ ባህሪያትን ያቀርባል, ነገር ግን ይበልጥ ውስብስብ ከሆኑ መተግበሪያዎች ጋር እንዲሰሩ ያስችልዎታል.

ዶከር አዘጋጅ ለጀማሪዎች መመሪያ
ዶከር (ነጠላ መያዣ) እና ዶከር አዘጋጅ (በርካታ መያዣዎች)

የተለመደ ዶከር ጻፍ አጠቃቀም መያዣ

Docker Compose በቀኝ እጆች ውስጥ, ውስብስብ አርክቴክቸር አፕሊኬሽኖችን በፍጥነት ለማሰማራት የሚያስችል በጣም ኃይለኛ መሳሪያ ነው. አሁን Docker Compose ያለውን ተግባራዊ አጠቃቀም ምሳሌ እንመለከታለን, ይህም ትንተና Docker Compose አጠቃቀም የሚሰጣችሁን ጥቅሞች ለመገምገም ያስችላል.

አንተ የድር ፕሮጀክት ገንቢ እንደሆንክ አድርገህ አስብ። ይህ ፕሮጀክት ሁለት ድር ጣቢያዎችን ያካትታል. የመጀመሪያው በመዳፊት ጠቅታዎች ፣ የመስመር ላይ መደብሮች የንግድ ሰዎች እንዲፈጥሩ ያስችላቸዋል። ሁለተኛው ለደንበኛ ድጋፍ ያለመ ነው። እነዚህ ሁለት ጣቢያዎች ከተመሳሳይ የውሂብ ጎታ ጋር ይገናኛሉ.

የእርስዎ ፕሮጀክት ከጊዜ ወደ ጊዜ ተወዳጅ እየሆነ መጥቷል፣ እና የሚሠራበት የአገልጋዩ አቅም ከአሁን በኋላ በቂ እንዳልሆነ ታወቀ። በውጤቱም, ሙሉውን ፕሮጀክት ወደ ሌላ ማሽን ለማዛወር ወስነዋል.

የአጋጣሚ ነገር ሆኖ እንደ Docker Compose ያለ ነገር አልተጠቀምክም። ስለዚህ, በዚህ ስራ ሂደት ውስጥ ምንም ነገር እንደማይረሱ ተስፋ በማድረግ አገልግሎቶችን አንድ በአንድ ማዛወር እና እንደገና ማዋቀር ይኖርብዎታል.

Docker Compose እየተጠቀሙ ከሆነ፣ ፕሮጄክትዎን ወደ አዲስ አገልጋይ ማዛወር ጥቂት ትዕዛዞችን በማስኬድ ሊፈታ የሚችል ጉዳይ ነው። የፕሮጀክቱን ወደ አዲስ ቦታ ለማስተላለፍ አንዳንድ ቅንብሮችን ብቻ ማድረግ እና የውሂብ ጎታውን የመጠባበቂያ ቅጂ ወደ አዲሱ አገልጋይ መስቀል ብቻ ያስፈልግዎታል.

Docker Composeን በመጠቀም የደንበኛ አገልጋይ መተግበሪያን ማዳበር

አሁን Docker Compose የምንጠቀመው ምን እንደሆነ ስላወቁ፣ ይህን መሳሪያ ተጠቅመው የመጀመሪያ ደንበኛዎን/የአገልጋይ መተግበሪያዎን ለመፍጠር ጊዜው አሁን ነው። ይኸውም በፓይዘን ውስጥ ስለ አንድ ትንሽ ድር ጣቢያ (አገልጋይ) እድገት እየተነጋገርን ነው, ይህም ፋይልን ከጽሑፍ ቁርጥራጭ ጋር ማምረት ይችላል. ይህ ፋይል ከአገልጋዩ የተጠየቀው በፕሮግራም (ደንበኛ) ሲሆን በፓይዘን የተፃፈ ነው። ፋይሉን ከአገልጋዩ ከተቀበለ በኋላ, ፕሮግራሙ በእሱ ውስጥ የተከማቸውን ጽሑፍ በማያ ገጹ ላይ ያሳያል.

እባክዎን የዶከር መሰረታዊ ነገሮች እንዳሉዎት እና የዶከር መድረክ እንደተጫነዎት እየገመተዎት መሆኑን ልብ ይበሉ።

በፕሮጀክቱ ላይ መስራት እንጀምር.

▍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. ይህ የአገልጋዩን አካባቢ ለመፍጠር የሚያስፈልጉትን መመሪያዎች የያዘው የዶከር ፋይል ነው።

የአቃፊዎ ይዘት ይህን መምሰል አለበት። 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. የኤችቲኤምኤል ፋይል ማረም

ወደ ፋይል index.html የሚከተለውን ጽሑፍ ጨምር።

Docker-Compose is magic!

ይህ ጽሑፍ ለደንበኛው ይላካል.

2ኛ. Dockerfileን በማስተካከል ላይ

አሁን ቀላል ፋይል እንፈጥራለን Dockerfileለ 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()

ለዚህ ኮድ ምስጋና ይግባውና የደንበኛው መተግበሪያ ከአገልጋዩ ላይ ውሂብ ማውረድ እና በስክሪኑ ላይ ማሳየት ይችላል።

3ሐ. Dockerfileን በማስተካከል ላይ

እንደ አገልጋዩ ሁኔታ, ለደንበኛው ቀላል እንፈጥራለን Dockerfileየ Python ደንበኛ መተግበሪያ የሚሰራበትን አካባቢ የመቅረጽ ኃላፊነት አለበት። የደንበኛ ኮድ እዚህ አለ። Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. ዶከር አዘጋጅ

እንደሚመለከቱት, ሁለት የተለያዩ ፕሮጀክቶችን ፈጠርን: አገልጋይ እና ደንበኛ. እያንዳንዳቸው የራሳቸው ፋይል አላቸው 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ን ይጠቀማሉ?

ዶከር አዘጋጅ ለጀማሪዎች መመሪያ

ምንጭ: hab.com

አስተያየት ያክሉ