א אָנהייבער גייד צו דאָקקער קאַמפּאָוז

דער מחבר פון דעם אַרטיקל, די איבערזעצונג פון וואָס מיר אַרויסגעבן הייַנט, זאגט אַז עס איז בדעה פֿאַר די דעוועלאָפּערס וואָס ווילן צו לערנען דאָקקער קאַמפּאָוז און מאַך צו שאַפֿן זייער ערשטער קליענט-סערווער אַפּלאַקיישאַן ניצן דאָקער. עס איז אנגענומען אַז דער לייענער פון דעם מאַטעריאַל איז באַקאַנט מיט די באַסיקס פון דאָקער. אויב דאָס איז נישט דער פאַל, איר קענען נעמען אַ קוק בייַ this סעריע פון ​​מאַטעריאַלס אויף this פּאָסטן קאַווערינג דאָקער באַסיקס צוזאמען מיט Kubernetes באַסיקס, און this אַרטיקל פֿאַר ביגינערז.

א אָנהייבער גייד צו דאָקקער קאַמפּאָוז

וואָס איז 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

איצט אַז איר וויסן וואָס מיר וועלן נוצן 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ב. עדיטינג אַ פּיטהאָן טעקע.

לייג צו טעקע 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, וואָס וועט זיין פאַראַנטוואָרטלעך פֿאַר אָרגאַנייזינג די רונטימע סוויווע פֿאַר די פּיטהאָן סערווער. ווי די יקער פֿאַר די באשאפן בילד, מיר וועלן נוצן אויף אַ באַאַמטער שטייגער, דיזיינד צו לויפן מגילה געשריבן אין פּיטהאָן. דאָ איז דער אינהאַלט פון די 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ב. עדיטינג אַ פּיטהאָן טעקע

לייג צו טעקע 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, פאַראַנטוואָרטלעך פֿאַר קריייטינג די סוויווע אין וואָס די פּיטהאָן קליענט אַפּלאַקיישאַן וועט לויפן. דאָ איז דער קליענט קאָד 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 אין דיין פּראַדזשעקס?

א אָנהייבער גייד צו דאָקקער קאַמפּאָוז

מקור: www.habr.com

לייגן אַ באַמערקונג