Jagoran Mafari don Shirya Docker

Marubucin labarin, fassarar da muke bugawa a yau, ya ce an yi shi ne ga masu haɓakawa waɗanda ke son koyon Docker Compose kuma suna motsawa zuwa ƙirƙirar aikace-aikacen sabar abokin ciniki na farko ta amfani da Docker. Ana ɗauka cewa mai karatun wannan abu ya san ainihin tushen Docker. Idan ba haka ba, kuna iya dubawa wannan jerin kayan akan wannan Buga rufe bayanan Docker tare da abubuwan yau da kullun na Kubernetes, da wannan labarin don farawa.

Jagoran Mafari don Shirya Docker

Menene Docker Compose?

Docker Compose kayan aiki ne wanda aka haɗa tare da Docker. An tsara shi don magance matsalolin da suka shafi ƙaddamar da aikin.

Yayin koyon tushen Docker, ƙila kun ci karo da ƙirƙirar aikace-aikace masu sauƙi waɗanda ke aiki da kansu kuma ba su dogara ba, alal misali, kan tushen bayanan waje ko kan wasu ayyuka. A aikace, irin waɗannan aikace-aikacen ba su da yawa. Ayyukan gaske yawanci sun haɗa da saitin aikace-aikacen da ke aiki tare.

Ta yaya kuke sanin idan kuna buƙatar amfani da Docker Compose lokacin tura aikin? A zahiri abu ne mai sauqi qwarai. Idan kuna amfani da ayyuka da yawa don sa wannan aikin yayi aiki, to Docker Compose na iya zuwa da amfani. Misali, a cikin yanayin da suke ƙirƙirar gidan yanar gizon da ke buƙatar haɗawa da bayanan bayanai don tantance masu amfani. Irin wannan aikin na iya ƙunshi ayyuka guda biyu - wanda ke tabbatar da aikin rukunin yanar gizon, da kuma wanda ke da alhakin kula da bayanan.

Docker Compose fasaha, don siffanta ta ta hanya mai sauƙi, yana ba ku damar ƙaddamar da ayyuka da yawa tare da umarni ɗaya.

Bambanci tsakanin Docker da Docker Compose

Ana amfani da Docker don sarrafa kowane kwantena (sabis) waɗanda ke yin aikace-aikace.

Ana amfani da Docker Compose don sarrafa kwantena da yawa waɗanda suka haɗa aikace-aikacen lokaci guda. Wannan kayan aikin yana ba da damar iri ɗaya kamar Docker, amma yana ba ku damar aiki tare da ƙarin hadaddun aikace-aikace.

Jagoran Mafari don Shirya Docker
Docker (kwangi ɗaya) da Docker Compose (kwantena da yawa)

Halin amfani na yau da kullun don Docker Compose

Docker Compose shine, a hannun dama, kayan aiki mai ƙarfi wanda ke ba ku damar tura aikace-aikace cikin sauri tare da hadaddun gine-gine. Yanzu za mu dubi misali na amfani da Docker Compose, wanda nazarinsa zai ba ku damar kimanta fa'idodin da yin amfani da Docker Compose zai ba ku.

Ka yi tunanin cewa kai mai haɓaka aikin gidan yanar gizo ne. Wannan aikin ya ƙunshi gidajen yanar gizo guda biyu. Na farko yana bawa 'yan kasuwa damar ƙirƙirar shagunan kan layi tare da dannawa kaɗan kawai. Na biyu yana nufin goyon bayan abokin ciniki. Waɗannan rukunin yanar gizon guda biyu suna hulɗa da bayanai iri ɗaya.

Aikin ku yana ƙara samun farin jini, kuma ya zamana cewa ƙarfin uwar garken da yake aiki a kai bai isa ba. Sakamakon haka, kun yanke shawarar matsar da aikin gaba ɗaya zuwa wata na'ura.

Abin takaici, ba ku yi amfani da wani abu kamar Docker Compose ba. Don haka, dole ne ku canja wuri da sake tsara ayyuka ɗaya bayan ɗaya, kuna fatan ba za ku manta da komai ba a cikin tsari.

Idan kuna amfani da Docker Compose, to matsar da aikin ku zuwa sabon uwar garken lamari ne da za'a iya warware shi ta hanyar aiwatar da ƴan umarni. Domin kammala canja wurin aikin zuwa wani sabon wuri, kawai kuna buƙatar yin wasu saitunan da loda kwafin ajiyar bayanai zuwa sabon uwar garken.

Haɓaka aikace-aikacen uwar garken abokin ciniki ta amfani da Docker Compose

Yanzu da kuka san abin da za mu yi amfani da Docker Compose don, lokaci ya yi da za ku ƙirƙiri aikace-aikacen sabar abokin ciniki na farko ta amfani da wannan kayan aikin. Wato, muna magana ne game da haɓaka ƙaramin gidan yanar gizo (server) a cikin Python wanda zai iya fitar da fayil tare da guntun rubutu. Ana buƙatar wannan fayil ɗin daga uwar garken ta wani shiri (abokin ciniki), wanda kuma aka rubuta cikin Python. Bayan karɓar fayil daga uwar garken, shirin yana nuna rubutun da aka adana a ciki akan allon.

Da fatan za a lura cewa muna ɗauka cewa kuna da ainihin fahimtar Docker kuma kun riga kun shigar da dandamalin Docker.

Bari mu fara aiki akan aikin.

▍ 1. Ƙirƙirar Aiki

Don gina aikace-aikacen uwar garken abokin ciniki na farko, Ina ba da shawarar ku fara da ƙirƙirar babban fayil ɗin aiki. Ya kamata ya ƙunshi fayiloli da manyan fayiloli masu zuwa:

  • fayil docker-compose.yml. Wannan fayil ɗin Docker Compose ne wanda zai ƙunshi umarnin da ake buƙata don farawa da daidaita ayyukan.
  • fayil server. Zai ƙunshi fayilolin da suka wajaba don kiyaye uwar garken yana gudana.
  • fayil client. Fayilolin aikace-aikacen abokin ciniki za su kasance a nan.

Sakamakon haka, abubuwan da ke cikin babban fayil ɗin aikinku yakamata suyi kama da haka:

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

▍2. Ƙirƙirar uwar garken

Anan, yayin ƙirƙirar uwar garken, za mu taɓa wasu mahimman abubuwa game da Docker.

2 a ba. Ƙirƙirar fayiloli

Je zuwa babban fayil server kuma ƙirƙirar fayiloli masu zuwa a ciki:

  • fayil server.py. Zai ƙunshi lambar uwar garken.
  • fayil index.html. Wannan fayil ɗin zai ƙunshi guntun rubutu wanda aikace-aikacen abokin ciniki yakamata ya fitar.
  • fayil Dockerfile. Wannan fayil ɗin Docker ne wanda zai ƙunshi umarnin da ake buƙata don ƙirƙirar yanayin uwar garken.

Wannan shine abin da ya kamata abubuwan da ke cikin babban fayil ɗinku suyi kama server/:

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

2 b. Gyara fayil ɗin Python.

Ƙara zuwa fayil server.py code mai zuwa:

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

Wannan lambar tana ba ku damar ƙirƙirar sabar gidan yanar gizo mai sauƙi. Zai ba abokan ciniki fayil ɗin index.html, abubuwan da ke ciki daga baya za a nuna su a shafin yanar gizon.

2c ku. Gyara fayil ɗin HTML

Don fayil index.html ƙara rubutu mai zuwa:

Docker-Compose is magic!

Za a aika wannan rubutu ga abokin ciniki.

2d. Gyara Dockerfile

Yanzu za mu ƙirƙiri fayil mai sauƙi Dockerfile, wanda zai dauki nauyin tsara yanayin lokacin aiki don uwar garken Python. A matsayin tushen tushen hoton da aka halicce, za mu yi amfani da shi a hukumance, wanda aka tsara don gudanar da shirye-shiryen da aka rubuta cikin Python. Ga abun cikin 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/

Yanzu bari mu fara aiki a kan abokin ciniki.

▍3. Ƙirƙirar abokin ciniki

Yayin ƙirƙirar gefen abokin ciniki na aikinmu, za mu tuna da wasu mahimman abubuwan Docker a hanya.

3 a ba. Ƙirƙirar fayiloli

Je zuwa babban fayil ɗin aikin ku client kuma ƙirƙirar fayiloli masu zuwa a ciki:

  • fayil client.py. Lambar abokin ciniki za ta kasance a nan.
  • fayil Dockerfile. Wannan fayil ɗin yana taka rawa iri ɗaya da fayil iri ɗaya a cikin babban fayil ɗin uwar garken. Wato, ya ƙunshi umarni waɗanda ke bayyana yadda ake ƙirƙirar yanayi don aiwatar da lambar abokin ciniki.

Sakamakon haka, babban fayil ɗin ku client/ A wannan mataki na aiki ya kamata ya kasance kamar haka:

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

3 b. Gyara fayil ɗin Python

Ƙara zuwa fayil client.py code mai zuwa:

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

Tare da wannan lambar, aikace-aikacen abokin ciniki na iya zazzage bayanai daga uwar garken kuma ya nuna shi akan allon.

3c ku. Gyara Dockerfile

Kamar yadda yake a cikin yanayin uwar garke, muna ƙirƙirar sauƙi Dockerfile, alhakin ƙirƙirar yanayin da aikace-aikacen abokin ciniki na Python zai gudana. Ga lambar abokin ciniki Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Rubuta

Kamar yadda wataƙila kun lura, mun ƙirƙiri ayyuka daban-daban guda biyu: uwar garken da abokin ciniki. Kowannen su yana da nasa fayil Dockerfile. Ya zuwa yanzu, duk abin da ya faru bai wuce tushen aiki tare da Docker ba. Yanzu mun fara da Docker Compose. Don yin wannan, je zuwa fayil ɗin docker-compose.yml, dake cikin babban fayil tushen aikin.

Lura cewa a nan ba muna ƙoƙarin rufe dukkan umarnin da za a iya amfani da su a ciki ba docker-compose.yml. Babban burinmu shine tafiya ta hanyar misali mai amfani wanda zai ba ku ainihin ilimin Docker Compose.

Ga lambar da za a saka a cikin fayil ɗin 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. Gina aikin

Bayan shiga docker-compose.yml An shigar da duk umarnin da suka dace, ana buƙatar haɗa aikin. Wannan mataki na aikinmu yayi kama da amfani da umarni docker build, amma umarnin da ya dace ya dace da ayyuka da yawa:

$ docker-compose build

▍ 6. Kaddamar da aikin

Yanzu da aka hada aikin, lokaci ya yi da za a kaddamar da shi. Wannan mataki na aikinmu ya dace da matakin da, lokacin aiki tare da kwantena guda ɗaya, ana aiwatar da umarnin docker run:

$ docker-compose up

Bayan aiwatar da wannan umarni, rubutun da abokin ciniki ya sauke daga uwar garken yakamata ya bayyana a cikin tashar: Docker-Compose is magic!.

Kamar yadda aka riga aka ambata, uwar garken yana amfani da tashar kwamfuta 1234 zuwa sabis na buƙatun abokin ciniki. Don haka, idan kun je adireshin da ke cikin burauzar ku http://localhost:1234/, zai nuna shafi mai rubutu Docker-Compose is magic!.

Umarni masu amfani

Bari mu kalli wasu umarni waɗanda za ku iya samun amfani yayin aiki tare da Docker Compose.

Wannan umarnin yana ba ku damar tsayawa da share kwantena da sauran albarkatun da umarnin ya ƙirƙira docker-compose up:

$ docker-compose down

Wannan umarnin yana buga rajistan ayyukan sabis:

$ docker-compose logs -f [service name]

Misali, a cikin aikinmu ana iya amfani da shi ta wannan tsari: $ docker-compose logs -f [service name].

Amfani da wannan umarni zaku iya nuna jerin kwantena:

$ docker-compose ps

Wannan umarnin yana ba ku damar aiwatar da umarni a cikin akwati mai gudana:

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

Misali, yana iya zama kamar haka: docker-compose exec server ls.

Wannan umarnin yana ba ku damar nuna jerin hotuna:

$ docker-compose images

Sakamakon

Mun duba tushen yin aiki tare da fasahar Docker Compose, wanda ilimin da zai ba ku damar amfani da wannan fasaha kuma, idan ana so, fara nazarin ta cikin zurfi. a nan wurin ajiya mai lambar aikin da muka duba anan.

Ya ku masu karatu! Kuna amfani da Docker Compose a cikin ayyukanku?

Jagoran Mafari don Shirya Docker

source: www.habr.com

Add a comment