Gwida għall-Bidu għal Docker Compose

L-awtur tal-artiklu, li t-traduzzjoni tiegħu qed nippubblikaw illum, jgħid li huwa maħsub għal dawk l-iżviluppaturi li jixtiequ jitgħallmu Docker Compose u qed jimxu lejn il-ħolqien tal-ewwel applikazzjoni klijent-server tagħhom bl-użu ta 'Docker. Huwa preżunt li l-qarrej ta 'dan il-materjal huwa familjari mal-baŜi ta' Docker. Jekk dan ma jkunx il-każ, tista 'tagħti ħarsa lejn dan serje ta 'materjali fuq dan post li jkopri l-baŜi ta' Docker flimkien mal-baŜi ta' Kubernetes, u dan artikolu għal dawk li jibdew.

Gwida għall-Bidu għal Docker Compose

X'inhu Docker Compose?

Docker Compose hija għodda inkluża ma 'Docker. Hija mfassla biex issolvi problemi relatati mal-iskjerament tal-proġett.

Waqt li tgħallem il-baŜi ta 'Docker, jista' jkun li ltqajt mal-ħolqien ta 'applikazzjonijiet sempliċi li jaħdmu b'mod awtonomu u ma jiddependux, pereżempju, fuq sorsi ta' dejta esterni jew fuq ċerti servizzi. Fil-prattika, applikazzjonijiet bħal dawn huma rari. Proġetti reali normalment jinvolvu sett sħiħ ta 'applikazzjonijiet li jaħdmu flimkien.

Kif tkun taf jekk għandekx bżonn tuża Docker Compose meta tuża proġett? Huwa fil-fatt sempliċi ħafna. Jekk tuża diversi servizzi biex tagħmel dan il-proġett jaħdem, allura Docker Compose jista 'jkun utli. Per eżempju, f'sitwazzjoni fejn joħolqu websajt li jeħtieġ li tikkonnettja ma 'database sabiex jawtentikaw l-utenti. Proġett bħal dan jista 'jikkonsisti f'żewġ servizzi - dak li jiżgura t-tħaddim tas-sit, u dak li huwa responsabbli għaż-żamma tad-database.

It-teknoloġija Docker Compose, biex tiddeskriviha b'mod simplifikat, tippermettilek tniedi ħafna servizzi b'kmand wieħed.

Differenza bejn Docker u Docker Compose

Docker jintuża biex jimmaniġġja l-kontenituri individwali (servizzi) li jiffurmaw applikazzjoni.

Docker Compose jintuża biex jimmaniġġja simultanjament kontenituri multipli li jiffurmaw applikazzjoni. Din l-għodda toffri l-istess kapaċitajiet bħal Docker, iżda tippermettilek taħdem ma 'applikazzjonijiet aktar kumplessi.

Gwida għall-Bidu għal Docker Compose
Docker (kontenitur wieħed) u Docker Compose (kontenituri multipli)

Każ ta' użu tipiku għal Docker Compose

Docker Compose huwa, f'idejn it-tajba, għodda b'saħħitha ħafna li tippermettilek tiskjera malajr ħafna applikazzjonijiet b'arkitetturi kumplessi. Issa se nħarsu lejn eżempju ta 'użu prattiku ta' Docker Compose, li l-analiżi tiegħu tippermettilek tevalwa l-benefiċċji li tagħtik l-użu ta 'Docker Compose.

Immaġina li inti żviluppatur ta 'proġett tal-web. Dan il-proġett jinkludi żewġ websajts. L-ewwel jippermetti lin-nies tan-negozju biex joħolqu ħwienet online bi ftit klikks biss. It-tieni huwa mmirat għall-appoġġ tal-klijent. Dawn iż-żewġ siti jinteraġixxu mal-istess database.

Il-proġett tiegħek qed isir aktar u aktar popolari, u jirriżulta li l-qawwa tas-server li fuqu taħdem m'għadhiex biżżejjed. Bħala riżultat, tiddeċiedi li tmexxi l-proġett kollu għal magna oħra.

Sfortunatament, ma użajtx xi ħaġa bħal Docker Compose. Għalhekk, ser ikollok tittrasferixxi u tikkonfigura s-servizzi wieħed kull darba, bit-tama li ma tinsa xejn fil-proċess.

Jekk tuża Docker Compose, allura ċaqliq il-proġett tiegħek għal server ġdid hija kwistjoni li tista 'tiġi solvuta billi tmexxi ftit kmandi. Sabiex tlesti t-trasferiment tal-proġett għal post ġdid, għandek bżonn biss tagħmel xi settings u ttella 'kopja ta' backup tad-database fuq is-server il-ġdid.

L-iżvilupp ta' applikazzjoni klijent-server bl-użu ta' Docker Compose

Issa li taf għalxiex se nużaw Docker Compose, wasal iż-żmien li toħloq l-ewwel applikazzjoni klijent-server tiegħek billi tuża din l-għodda. Jiġifieri, qed nitkellmu dwar l-iżvilupp ta 'websajt żgħira (server) f'Python li jista' joħroġ fajl bi framment ta 'test. Dan il-fajl huwa mitlub mis-server minn programm (klijent), miktub ukoll f'Python. Wara li jirċievi fajl mis-server, il-programm juri t-test maħżun fih fuq l-iskrin.

Jekk jogħġbok innota li nassumu li għandek fehim bażiku ta 'Docker u li diġà għandek il-pjattaforma Docker installata.

Ejja nibdew naħdmu fuq il-proġett.

▍1. Ħolqien ta 'Proġett

Biex tibni l-ewwel applikazzjoni klijent-server tiegħek, nissuġġerixxi li tibda billi toħloq folder tal-proġett. Għandu jkun fih il-fajls u folders li ġejjin:

  • fajl docker-compose.yml. Dan huwa fajl Docker Compose li se jkun fih l-istruzzjonijiet meħtieġa biex jibdew u jiġu kkonfigurati s-servizzi.
  • Folder server. Se jkun fih il-fajls meħtieġa biex iżomm is-server jaħdem.
  • Folder client. Il-fajls tal-applikazzjoni tal-klijenti se jkunu jinsabu hawn.

Bħala riżultat, il-kontenut tal-folder prinċipali tal-proġett tiegħek għandu jidher bħal dan:

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

▍2. Ħolqien ta' server

Hawnhekk, fil-proċess tal-ħolqien ta 'server, se nmissu xi affarijiet bażiċi dwar Docker.

2a. Ħolqien ta 'fajls

Mur fil-folder server u oħloq il-fajls li ġejjin fiha:

  • fajl server.py. Se jkun fih il-kodiċi tas-server.
  • fajl index.html. Dan il-fajl se jkun fih biċċa test li l-applikazzjoni tal-klijent għandha toħroġ.
  • fajl Dockerfile. Dan huwa fajl Docker li se jkun fih l-istruzzjonijiet meħtieġa biex jinħoloq l-ambjent tas-server.

Dan huwa kif għandu jidher il-kontenut tal-folder tiegħek server/:

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

2b. Editjar ta 'fajl Python.

Żid mal-fajl server.py il-kodiċi li ġej:

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

Dan il-kodiċi jippermettilek li toħloq web server sempliċi. Huwa se jagħti lill-klijenti l-fajl index.html, li l-kontenut tiegħu se jintwera aktar tard fuq il-paġna web.

2c. Editjar ta' Fajl HTML

Biex fajl index.html żid it-test li ġej:

Docker-Compose is magic!

Dan it-test jintbagħat lill-klijent.

2d. Editjar tal-Dockerfile

Issa se noħolqu fajl sempliċi Dockerfile, li se jkun responsabbli biex jorganizza l-ambjent tar-runtime għas-server Python. Bħala l-bażi għall-immaġni maħluqa, se nużaw b’mod uffiċjali, iddisinjat biex imexxi programmi miktuba f'Python. Hawn hu l-kontenut tad-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/

Issa ejja nibdew naħdmu fuq il-klijent.

▍3. Ħolqien ta 'klijent

Filwaqt li noħolqu n-naħa tal-klijent tal-proġett tagħna, aħna se niftakru xi punti bażiċi ta 'Docker tul it-triq.

3a. Ħolqien ta 'fajls

Mur fil-folder tal-proġett tiegħek client u oħloq il-fajls li ġejjin fiha:

  • fajl client.py. Il-kodiċi tal-klijent se jkun jinsab hawn.
  • fajl Dockerfile. Dan il-fajl għandu l-istess rwol bħal fajl simili fil-folder tas-server. Jiġifieri, fih struzzjonijiet li jiddeskrivu kif jinħoloq ambjent għall-eżekuzzjoni tal-kodiċi tal-klijent.

Bħala riżultat, folder tiegħek client/ f'dan l-istadju tax-xogħol għandu jidher bħal dan:

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

3b. Editjar ta 'Python File

Żid mal-fajl client.py il-kodiċi li ġej:

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

B'dan il-kodiċi, l-applikazzjoni tal-klijent tista' tniżżel id-dejta mis-server u turiha fuq l-iskrin.

3c. Editjar tal-Dockerfile

Bħal fil-każ tas-server, noħolqu sempliċi Dockerfile, responsabbli għall-ħolqien tal-ambjent li fih se taħdem l-applikazzjoni tal-klijent Python. Hawn hu l-kodiċi tal-klijent Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Ikkomponi

Kif forsi innotajt, ħloqna żewġ proġetti differenti: server u klijent. Kull wieħed minnhom għandu l-fajl tiegħu Dockerfile. S'issa, dak kollu li ġara ma marx lil hinn mill-baŜi tal-ħidma ma' Docker. Issa nibdew b'Docker Compose. Biex tagħmel dan, ejja mmorru għall-fajl docker-compose.yml, li jinsab fil-folder tal-għeruq tal-proġett.

Jekk jogħġbok innota li hawn mhux qed nippruvaw inkopru assolutament il-kmandi kollha li jistgħu jintużaw fihom docker-compose.yml. L-għan ewlieni tagħna huwa li nimxu permezz ta 'eżempju prattiku li jagħtik l-għarfien bażiku ta' Docker Compose.

Hawn hu l-kodiċi biex tpoġġi fil-fajl 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. Bini tal-proġett

Wara fi docker-compose.yml L-istruzzjonijiet kollha meħtieġa ġew imdaħħla, il-proġett jeħtieġ li jiġi mmuntat. Dan il-pass tax-xogħol tagħna huwa simili għall-użu tal-kmand docker build, iżda l-kmand korrispondenti huwa rilevanti għal diversi servizzi:

$ docker-compose build

▍6. Tnedija tal-proġett

Issa li l-proġett huwa mmuntat, wasal iż-żmien li tniedi. Dan il-pass tax-xogħol tagħna jikkorrispondi għall-pass li fih, meta taħdem ma 'kontenituri individwali, il-kmand jiġi esegwit docker run:

$ docker-compose up

Wara li tesegwixxi dan il-kmand, it-test imniżżel mill-klijent mis-server għandu jidher fit-terminal: Docker-Compose is magic!.

Kif diġà ssemma, is-server juża l-port tal-kompjuter 1234 biex taqdi t-talbiet tal-klijenti. Għalhekk, jekk tmur fl-indirizz fil-browser tiegħek http://localhost:1234/, se juri paġna bit-test Docker-Compose is magic!.

Kmandi Utli

Ejja nħarsu lejn xi kmandi li tista' ssib utli meta taħdem ma' Docker Compose.

Dan il-kmand jippermettilek tieqaf u tħassar kontenituri u riżorsi oħra maħluqa mill-kmand docker-compose up:

$ docker-compose down

Dan il-kmand jistampa r-reġistri tas-servizz:

$ docker-compose logs -f [service name]

Per eżempju, fil-proġett tagħna jista 'jintuża f'din il-forma: $ docker-compose logs -f [service name].

Billi tuża dan il-kmand tista’ turi lista ta’ kontenituri:

$ docker-compose ps

Dan il-kmand jippermettilek tesegwixxi kmand f'kontenitur li qed jaħdem:

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

Per eżempju, jista 'jidher bħal dan: docker-compose exec server ls.

Dan il-kmand jippermettilek turi lista ta’ immaġini:

$ docker-compose images

Riżultati ta '

Ħaresna lejn il-baŜi tal-ħidma mat-teknoloġija Docker Compose, li l-għarfien tagħha jippermettilek tuża din it-teknoloġija u, jekk mixtieq, tibda tistudjaha f'aktar fond. Hawnhekk repożitorju bil-kodiċi għall-proġett li ħares lejn hawn.

Għeżież qarrejja! Tuża Docker Compose fil-proġetti tiegħek?

Gwida għall-Bidu għal Docker Compose

Sors: www.habr.com

Żid kumment