Docker Compose-ren hastapenerako gida

Artikuluaren egileak, zeinaren itzulpena gaur argitaratzen ari garen, dio Docker Compose ikasi nahi duten eta Docker erabiliz euren lehen bezero-zerbitzari aplikazioa sortzera doazela garatzaileei zuzenduta dagoela. Material honen irakurleak Docker-en oinarriak ezagutzen dituela suposatzen da. Horrela ez bada, begirada bat eman dezakezu hau material sorta gainean hau Dockerren oinarriak Kubernetesekin batera biltzen dituen argitalpena, eta hau hasiberrientzako artikulua.

Docker Compose-ren hastapenerako gida

Zer da Docker Compose?

Docker Compose Docker-ekin batera doan tresna bat da. Proiektuaren hedapenarekin lotutako arazoak konpontzeko diseinatuta dago.

Dockerren oinarriak ikasten ari zaren bitartean, agian modu autonomoan funtzionatzen duten eta, adibidez, kanpoko datu-iturrien edo zerbitzu jakin batzuen mendekoak ez diren aplikazio sinpleak sortzearekin topo egin izana. Praktikan, horrelako aplikazioak arraroak dira. Benetako proiektuek, normalean, aplikazio multzo oso bat elkarrekin lan egiten dute.

Nola dakizu Docker Compose erabili behar duzun proiektu bat zabaltzean? Egia esan, oso erraza da. Proiektu hau funtzionatzeko hainbat zerbitzu erabiltzen badituzu, baliteke Docker Compose erabilgarria izatea. Adibidez, erabiltzaileak autentifikatu ahal izateko datu-base batera konektatu behar den webgune bat sortzen duten egoera batean. Proiektu horrek bi zerbitzu izan ditzake: gunearen funtzionamendua bermatzen duena eta datu-basea mantentzeaz arduratzen dena.

Docker Compose teknologiak, modu sinplifikatuan deskribatzeko, zerbitzu asko komando batekin abiarazteko aukera ematen du.

Docker eta Docker Compose arteko aldea

Docker aplikazio bat osatzen duten banakako edukiontzi (zerbitzuak) kudeatzeko erabiltzen da.

Docker Compose aplikazio bat osatzen duten hainbat edukiontzi aldi berean kudeatzeko erabiltzen da. Tresna honek Dockerren gaitasun berdinak eskaintzen ditu, baina aplikazio konplexuagoekin lan egiteko aukera ematen du.

Docker Compose-ren hastapenerako gida
Docker (edukiontzi bakarra) eta Docker Compose (edukiontzi anitz)

Docker Compose-ren ohiko erabilera kasua

Docker Compose, esku egokietan, oso tresna indartsua da, arkitektura konplexuko aplikazioak oso azkar zabaltzeko aukera ematen duena. Orain Docker Compose-ren erabilera praktikoaren adibide bat ikusiko dugu, eta horren analisiak Docker Compose erabiltzeak emango dizkizuen onurak ebaluatzeko aukera emango dizu.

Imajinatu web proiektu baten garatzailea zarela. Proiektu honek bi webgune biltzen ditu. Lehenengoari esker, negozioek lineako dendak sortu ditzakete klik gutxirekin. Bigarrena bezeroen laguntzari zuzenduta dago. Bi gune hauek datu-base berarekin elkarreragiten dute.

Zure proiektua gero eta ezagunagoa da, eta exekutatzen duen zerbitzariaren boterea ez da nahikoa. Ondorioz, proiektu osoa beste makina batera eramatea erabakitzen duzu.

Zoritxarrez, ez duzu Docker Compose bezalako zerbait erabili. Hori dela eta, zerbitzuak banan-banan transferitu eta birkonfiguratu beharko dituzu, prozesuan ezer ahaztuko ez duzulakoan.

Docker Compose erabiltzen baduzu, orduan zure proiektua zerbitzari berri batera mugitzea komando batzuk exekutatuta konpon daitekeen kontua da. Proiektua kokapen berri batera transferitzea burutzeko, ezarpen batzuk egin eta datu-basearen babeskopia bat zerbitzari berrira kargatu besterik ez duzu behar.

Bezero-zerbitzari aplikazio bat garatzea Docker Compose erabiliz

Docker Compose zertarako erabiliko dugun badakizu orain, tresna hau erabiliz zure lehen bezero-zerbitzari aplikazioa sortzeko garaia da. Hots, Python-en webgune txiki bat (zerbitzaria) garatzeaz ari gara, testu zati batekin fitxategi bat atera dezakeena. Fitxategi hau Python-en idatzitako programa batek (bezeroa) eskatzen dio zerbitzariari. Zerbitzaritik fitxategi bat jaso ondoren, programak bertan gordetako testua pantailan erakusten du.

Kontuan izan Docker-en oinarrizko ezagutza duzula eta dagoeneko Docker plataforma instalatuta duzula.

Has gaitezen proiektua lantzen.

▍1. Proiektu bat sortzea

Zure lehen bezero-zerbitzariaren aplikazioa eraikitzeko, proiektuaren karpeta bat sortzen hastea proposatzen dizut. Fitxategi eta karpeta hauek eduki behar ditu:

  • fitxategia docker-compose.yml. Zerbitzuak abiarazteko eta konfiguratzeko behar diren argibideak izango dituen Docker Compose fitxategia da.
  • Folder server. Zerbitzaria martxan mantentzeko beharrezkoak diren fitxategiak edukiko ditu.
  • Folder client. Bezeroaren aplikazio fitxategiak hemen kokatuko dira.

Ondorioz, zure proiektuaren karpeta nagusiaren edukiak honela izan beharko luke:

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

▍2. Zerbitzari bat sortzea

Hemen, zerbitzari bat sortzeko prozesuan, Dockerri buruzko oinarrizko gauza batzuk ukituko ditugu.

2a. Fitxategiak sortzea

Joan karpetara server eta sortu bertan fitxategi hauek:

  • fitxategia server.py. Zerbitzariaren kodea edukiko du.
  • fitxategia index.html. Fitxategi honek bezeroaren aplikazioak atera behar duen testu zati bat edukiko du.
  • fitxategia Dockerfile. Hau Docker fitxategi bat da, zerbitzariaren ingurunea sortzeko beharrezkoak diren argibideak izango dituena.

Hau da zure karpetaren edukiak nolakoa izan behar duen server/:

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

2b. Python fitxategi bat editatzen.

Gehitu fitxategira server.py honako kodea:

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

Kode honek web zerbitzari soil bat sortzeko aukera ematen du. Bezeroei fitxategia emango die index.html, zeinaren edukia geroago web orrian agertuko da.

2c. HTML fitxategi bat editatzea

Fitxatzeko index.html gehitu testu hau:

Docker-Compose is magic!

Testu hau bezeroari bidaliko zaio.

2d. Dockerfile-a editatzen

Orain fitxategi sinple bat sortuko dugu Dockerfile, Python zerbitzariaren exekuzio-ingurunea antolatzeaz arduratuko dena. Sortutako irudiaren oinarri gisa, erabiliko dugu modu ofizialean, Python-en idatzitako programak exekutatzeko diseinatua. Hona hemen Dockerfile-ren edukia:

# На всякий случай напоминаю, что 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/

Orain has gaitezen bezeroarekin lanean.

▍3. Bezero bat sortzea

Gure proiektuaren bezero aldea sortzen dugun bitartean, bidean Dockerren oinarri batzuk gogoratuko ditugu.

3a. Fitxategiak sortzea

Joan zure proiektuaren karpetara client eta sortu bertan fitxategi hauek:

  • fitxategia client.py. Bezeroaren kodea hemen kokatuko da.
  • fitxategia Dockerfile. Fitxategi honek zerbitzariaren karpetako antzeko fitxategi baten funtzio bera betetzen du. Hain zuzen, bezeroaren kodea exekutatzeko ingurune bat nola sortu deskribatzen duten argibideak ditu.

Ondorioz, zure karpeta client/ lanaren fase honetan honelakoa izan beharko litzateke:

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

3b. Python fitxategi bat editatzea

Gehitu fitxategira client.py honako kodea:

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

Kode honekin, bezeroaren aplikazioak zerbitzaritik datuak deskargatu eta pantailan bistaratu ditzake.

3c. Dockerfile-a editatzen

Zerbitzariaren kasuan bezala, sinple bat sortzen dugu Dockerfile, Python bezeroaren aplikazioa exekutatzeko ingurunea sortzeaz arduratzen dena. Hona hemen bezeroaren kodea Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Konturatuko zinetenez, bi proiektu ezberdin sortu ditugu: zerbitzari bat eta bezero bat. Horietako bakoitzak bere fitxategia du Dockerfile. Orain arte, gertatutako guztia ez da Dockerrekin lan egiteko oinarrietatik haratago joan. Orain Docker Compose-rekin hasiko gara. Horretarako, goazen fitxategira docker-compose.yml, proiektuaren erro karpetan dago.

Kontuan izan hemen ez garela saiatzen erabil daitezkeen komando guztiak guztiz estaltzen docker-compose.yml. Gure helburu nagusia Docker Compose-ren oinarrizko ezagutzak emango dizkizuen adibide praktiko batean ibiltzea da.

Hona hemen fitxategian jartzeko kodea 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. Proiektua eraikitzea

Sartu ondoren docker-compose.yml Beharrezko argibide guztiak sartu dira, proiektua muntatu behar da. Gure lanaren urrats hau komandoa erabiltzearen antzekoa da docker build, baina dagokion komandoa hainbat zerbitzuri dagokio:

$ docker-compose build

▍6. Proiektua abian jartzea

Proiektua muntatuta dagoenean, martxan jartzeko garaia da. Gure lanaren urrats hau, banakako edukiontziekin lan egitean komandoa exekutatzen den urratsari dagokio docker run:

$ docker-compose up

Komando hau exekutatu ondoren, bezeroak zerbitzaritik deskargatutako testua agertu beharko litzateke terminalean: Docker-Compose is magic!.

Esan bezala, zerbitzariak ordenagailuaren ataka erabiltzen du 1234 bezeroen eskaerei erantzuteko. Hori dela eta, zure nabigatzailean helbidera joaten bazara http://localhost:1234/, orrialde bat bistaratuko du testuarekin Docker-Compose is magic!.

Komando erabilgarriak

Ikus ditzagun Docker Compose-rekin lan egitean erabilgarriak izan daitezkeen komando batzuk.

Komando honek komandoak sortutako edukiontziak eta beste baliabide batzuk gelditzeko eta ezabatzeko aukera ematen du docker-compose up:

$ docker-compose down

Komando honek zerbitzuen erregistroak inprimatzen ditu:

$ docker-compose logs -f [service name]

Adibidez, gure proiektuan forma honetan erabil daiteke: $ docker-compose logs -f [service name].

Komando hau erabiliz edukiontzien zerrenda bistaratu dezakezu:

$ docker-compose ps

Komando honek exekutatzen ari den edukiontzi batean komando bat exekutatzeko aukera ematen du:

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

Adibidez, honelakoa izan daiteke: docker-compose exec server ls.

Komando honek irudien zerrenda bistaratzeko aukera ematen du:

$ docker-compose images

Emaitzak

Docker Compose teknologiarekin lan egiteko oinarriak aztertu ditugu, eta horren ezagutzak teknologia hau erabiltzeko aukera emango dizu eta, nahi izanez gero, sakonago aztertzen hasteko. Hemen hemen aztertu dugun proiektuaren kodea duen biltegi bat.

Irakurle maitea! Docker Compose erabiltzen al duzu zure proiektuetan?

Docker Compose-ren hastapenerako gida

Iturria: www.habr.com

Gehitu iruzkin berria