Giya sa Docker Compose alang sa mga Nagsugod

Ang tagsulat sa artikulo, nga among gipatik karon, nag-ingon nga kini gituyo alang sa mga nag-develop nga gusto makakat-on sa Docker Compose ug padulong sa paghimo sa ilang una nga aplikasyon sa kliyente-server gamit ang Docker. Gituohan nga ang magbabasa niini nga materyal pamilyar sa mga sukaranan sa Docker. Kung dili kini ang kahimtang, mahimo nimong tan-awon kini serye sa mga materyales kini usa ka post nga naglangkob sa mga sukaranan sa Docker kauban ang mga sukaranan sa Kubernetes, ug kini artikulo alang sa mga nagsugod.

Giya sa Docker Compose alang sa mga Nagsugod

Unsa ang Docker Compose?

Ang Docker Compose usa ka himan nga gilakip sa Docker. Gidisenyo kini aron masulbad ang mga problema nga may kalabotan sa pag-deploy sa mga proyekto.

Samtang nagkat-on sa mga sukaranan sa Docker, tingali nakit-an nimo ang paghimo sa labing yano nga mga aplikasyon nga nagtrabaho nga awtonomiya, dili depende, pananglitan, sa mga gigikanan sa data sa gawas o sa pipila nga mga serbisyo. Sa praktis, ang ingon nga mga aplikasyon talagsa ra. Ang tinuod nga mga proyekto kasagarang naglakip sa tibuok hugpong sa mga aplikasyon sa pagtinabangay.

Giunsa nimo pagkahibal-an kung kinahanglan nimo gamiton ang Docker Compose kung mag-deploy sa usa ka proyekto? Sa pagkatinuod, kini yano kaayo. Kung naggamit ka daghang mga serbisyo aron mapadagan kini nga proyekto, mahimo’g magamit ang Docker Compose. Pananglitan, sa usa ka sitwasyon diin ikaw naghimo og usa ka website nga, aron sa paghimo sa user authentication, kinahanglan nga magkonektar sa usa ka database. Ang ingon nga proyekto mahimong adunay duha ka serbisyo - usa nga nagsiguro sa operasyon sa site, ug usa nga responsable sa pagsuporta sa database.

Ang teknolohiya sa Docker Compose, kung atong gihulagway kini sa usa ka gipayano nga paagi, nagtugot, sa tabang sa usa ka sugo, sa pagsugod sa daghang mga serbisyo.

Ang kalainan tali sa Docker ug Docker Compose

Ang Docker gigamit sa pagdumala sa indibidwal nga mga sudlanan (mga serbisyo) nga naglangkob sa usa ka aplikasyon.

Ang Docker Compose gigamit sa pagdumala sa daghang mga sudlanan nga bahin sa usa ka aplikasyon sa parehas nga oras. Kini nga himan nagtanyag sa parehas nga mga bahin sama sa Docker, apan gitugotan ka nga magtrabaho uban ang labi ka komplikado nga mga aplikasyon.

Giya sa Docker Compose alang sa mga Nagsugod
Docker (usa ka sudlanan) ug Docker Compose (daghang mga sudlanan)

Kasagaran nga Docker Compose use case

Ang Docker Compose kay, sa tuo nga mga kamot, usa ka kusgan kaayo nga himan nga nagtugot kanimo nga dali nga mag-deploy sa mga aplikasyon nga adunay komplikado nga mga arkitektura. Karon atong tan-awon ang usa ka pananglitan sa praktikal nga paggamit sa Docker Compose, ang pag-analisar niini magtugot kanimo sa pagtimbang-timbang sa mga benepisyo nga ihatag kanimo sa paggamit sa Docker Compose.

Hunahunaa nga ikaw ang nag-develop sa usa ka proyekto sa web. Kini nga proyekto naglakip sa duha ka mga website. Ang una nagtugot sa mga negosyante sa paghimo, sa pipila lang ka pag-klik, mga online store. Ang ikaduha gitumong sa suporta sa kustomer. Kining duha ka mga site nakig-interact sa samang database.

Ang imong proyekto nahimong mas ug mas popular, ug kini nahimo nga ang kapasidad sa server diin kini nagtrabaho dili na igo. Ingon usa ka sangputanan, nakahukom ka nga ibalhin ang tibuuk nga proyekto sa lain nga makina.

Ikasubo, wala nimo gigamit ang usa ka butang sama sa Docker Compose. Busa, kinahanglan ka nga molalin ug mag-reconfigure sa mga serbisyo matag usa, nanghinaut nga dili nimo makalimtan ang bisan unsang butang sa proseso sa kini nga trabaho.

Kung gigamit nimo ang Docker Compose, unya ang pagbalhin sa imong proyekto sa usa ka bag-ong server usa ka isyu nga masulbad pinaagi sa pagpadagan sa pipila ka mga mando. Aron makompleto ang pagbalhin sa proyekto ngadto sa usa ka bag-ong lokasyon, kinahanglan ka lang maghimo og pipila ka mga setting ug mag-upload og backup nga kopya sa database ngadto sa bag-ong server.

Pagpalambo sa aplikasyon sa kliyente-server gamit ang Docker Compose

Karon nga nahibal-an na nimo kung unsa ang among gamiton sa Docker Compose, panahon na sa paghimo sa imong una nga aplikasyon sa kliyente / server gamit kini nga himan. Sa ato pa, naghisgot kami bahin sa pag-uswag sa usa ka gamay nga website (server) sa Python, nga makahimo usa ka file nga adunay usa ka tipik sa teksto. Kini nga file gihangyo gikan sa server sa usa ka programa (kliyente), gisulat usab sa Python. Human madawat ang file gikan sa server, gipakita sa programa ang teksto nga gitipigan niini sa screen.

Palihug timan-i nga kami nagtuo nga ikaw adunay mga sukaranan sa Docker ug nga ikaw adunay na-install nga Docker platform.

Magsugod ta sa pagtrabaho sa proyekto.

▍1. Paghimo og proyekto

Aron matukod ang imong una nga aplikasyon sa kliyente / server, gisugyot ko nga magsugod ka pinaagi sa paghimo og folder sa proyekto. Kini kinahanglan nga adunay mga mosunod nga mga file ug folder:

  • file docker-compose.yml. Kini usa ka Docker Compose file nga maglangkob sa mga instruksyon nga gikinahanglan sa pagsugod ug pag-configure sa mga serbisyo.
  • suksukanan sa papel server. Naglangkob kini sa mga file nga gikinahanglan aron magamit ang server.
  • suksukanan sa papel client. Dinhi mahimutang ang mga file sa aplikasyon sa kliyente.

Ingon usa ka sangputanan, ang sulud sa panguna nga folder sa imong proyekto kinahanglan nga ingon niini:

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

▍2. Paghimo sa server

Dinhi kita, sa proseso sa paghimo sa usa ka server, mohikap sa pipila ka mga batakang butang bahin sa Docker.

2a. Paghimo og mga File

Adto sa folder server ug paghimo sa mosunod nga mga file niini:

  • file server.py. Kini naglangkob sa server code.
  • file index.html. Kini nga file maglangkob sa usa ka piraso sa teksto nga kinahanglan ipakita sa aplikasyon sa kliyente.
  • file Dockerfile. Kini ang Docker file nga maglangkob sa mga instruksyon nga gikinahanglan sa paghimo sa palibot sa server.

Ingon niini ang hitsura sa sulud sa imong folder server/:

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

2b. Pag-edit sa usa ka Python file.

Idugang sa file server.py ang mosunod nga code:

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

Kini nga code nagtugot kanimo sa paghimo og usa ka yano nga web server. Hatagan niya og file ang mga kliyente index.html, kansang sulod ipakita unya sa web page.

2c. Pag-edit sa HTML file

Sa pag-file index.html idugang ang mosunod nga teksto:

Docker-Compose is magic!

Kini nga teksto ipadala sa kliyente.

2d. Pag-edit sa Dockerfile

Karon maghimo kami usa ka yano nga file Dockerfile, nga maoy responsable sa pag-organisar sa runtime environment alang sa Python server. Ingon nga basehan sa gibuhat nga imahe, atong gamiton opisyal nga, gidisenyo sa pagpadagan sa mga programa nga gisulat sa Python. Ania ang sulod sa 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/

Karon atong buhaton ang kliyente.

▍3. Paghimo og kliyente

Samtang nagmugna sa kliyente nga bahin sa among proyekto, among mahinumduman ang pipila ka mga sukaranan sa Docker sa dalan.

3a. Paghimo og mga File

Adto sa imong project folder client ug paghimo sa mosunod nga mga file niini:

  • file client.py. Dinhi diin ang code sa kliyente.
  • file Dockerfile. Kini nga file adunay parehas nga papel sa parehas nga file sa folder sa server. Sa ato pa, kini adunay usa ka pahayag nga naghulagway kung giunsa paghimo ang usa ka palibot alang sa pagpatuman sa code sa kliyente.

Ingon usa ka sangputanan, ang imong folder client/ Sa niini nga yugto kini kinahanglan nga tan-awon sama niini:

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

3b. Pag-edit sa usa ka Python File

Idugang sa file client.py ang mosunod nga code:

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

Salamat sa kini nga code, ang aplikasyon sa kliyente maka-download sa data gikan sa server ug ipakita kini sa screen.

3c. Pag-edit sa Dockerfile

Sama sa kaso sa server, naghimo kami nga simple alang sa kliyente Dockerfile, responsable sa paghulma sa palibot diin ang aplikasyon sa kliyente sa Python modagan. Ania ang code sa kliyente Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Sama sa imong nakita, nakahimo kami og duha ka lainlaing mga proyekto: server ug kliyente. Ang matag usa kanila adunay kaugalingon nga file Dockerfile. Sa pagkakaron, ang tanan nga mahitabo dili lapas sa mga sukaranan sa pagtrabaho kauban ang Docker. Karon nagtrabaho na kami sa Docker Compose. Aron mahimo kini, tan-awa ang file docker-compose.ymlnahimutang sa root folder sa proyekto.

Palihug timan-i nga dinhi wala kami magtinguha nga tabonan ang tanan nga mga sugo nga magamit sa docker-compose.yml. Ang among panguna nga katuyoan mao ang pagbungkag sa usa ka praktikal nga pananglitan nga naghatag kanimo sukaranan nga kahibalo sa Docker Compose.

Ania ang code nga ibutang sa file 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. Pagtukod sa proyekto

Pagkahuman sa docker-compose.yml ang tanan nga gikinahanglan nga mga instruksyon nahimo na, ang proyekto kinahanglan nga tipunon. Kini nga lakang sa among trabaho nahisama sa paggamit sa mando docker build, apan ang katugbang nga sugo nalangkit sa daghang serbisyo:

$ docker-compose build

▍6. Paglusad sa proyekto

Karon nga natukod na ang proyekto, panahon na sa pagpadagan niini. Kini nga lakang sa among trabaho katumbas sa lakang diin, kung nagtrabaho kauban ang indibidwal nga mga sudlanan, ang mando gipatuman docker run:

$ docker-compose up

Human sa pagpatuman niini nga sugo, ang teksto nga gikarga sa kliyente gikan sa server kinahanglan nga makita sa terminal: Docker-Compose is magic!.

Sama sa nahisgotan na, ang server naggamit sa computer port 1234 sa pag-alagad sa mga hangyo sa kustomer. Busa, kung moadto ka sa browser sa adres http://localhost:1234/, kini magpakita sa usa ka panid nga adunay teksto Docker-Compose is magic!.

Mapuslanon nga mga Sugo

Atong tan-awon ang pipila sa mga sugo nga mahimo nimong makita nga mapuslanon kung nagtrabaho kauban ang Docker Compose.

Kini nga sugo nagtugot kanimo sa paghunong ug pagtangtang sa mga sudlanan ug uban pang mga kapanguhaan nga gihimo sa sugo docker-compose up:

$ docker-compose down

Kini nga sugo nag-imprinta sa mga log sa serbisyo:

$ docker-compose logs -f [service name]

Pananglitan, sa among proyekto kini magamit sa kini nga porma: $ docker-compose logs -f [service name].

Uban niini nga sugo, mahimo nimong ipakita ang usa ka lista sa mga sudlanan:

$ docker-compose ps

Kini nga sugo nagtugot kanimo sa pagpatuman sa usa ka sugo sa usa ka nagdagan nga sudlanan:

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

Pananglitan, kini mahimong tan-awon sama niini: docker-compose exec server ls.

Kini nga sugo nagtugot kanimo sa pagpakita sa usa ka lista sa mga hulagway:

$ docker-compose images

Mga resulta

Gitabonan namo ang mga sukaranan sa pagtrabaho kauban ang teknolohiya sa Docker Compose, ang kahibalo nga magtugot kanimo sa paggamit niini nga teknolohiya ug, kung gusto, magsugod sa pagtuon niini sa mas lawom. dinhi repository nga adunay code sa proyekto, nga among gikonsiderar dinhi.

Minahal nga magbabasa! Gigamit ba nimo ang Docker Compose sa imong mga proyekto?

Giya sa Docker Compose alang sa mga Nagsugod

Source: www.habr.com

Idugang sa usa ka comment