Docker Compose Guide for begyndere

Forfatteren til artiklen, som vi udgiver i dag, siger, at den er beregnet til de udviklere, der ønsker at lære Docker Compose og er på vej til at skabe deres første klient-server-applikation ved hjælp af Docker. Det antages, at læseren af ​​dette materiale er bekendt med det grundlæggende i Docker. Hvis dette ikke er tilfældet, kan du tage et kig på dette række materialer dette et indlæg, der dækker det grundlæggende i Docker sammen med det grundlæggende i Kubernetes, og dette artikel for begyndere.

Docker Compose Guide for begyndere

Hvad er Docker Compose?

Docker Compose er et værktøj, der følger med Docker. Det er designet til at løse problemer i forbindelse med implementeringen af ​​projekter.

Mens du lærer det grundlæggende i Docker, kan du være stødt på skabelsen af ​​de enkleste applikationer, der fungerer selvstændigt, ikke afhængige af for eksempel eksterne datakilder eller visse tjenester. I praksis er sådanne applikationer sjældne. Reelle projekter involverer normalt et helt sæt af samarbejdsapplikationer.

Hvordan ved du, om du skal bruge Docker Compose, når du implementerer et projekt? Faktisk er det meget enkelt. Hvis du bruger flere tjenester til at køre dette projekt, kan Docker Compose måske komme til nytte. For eksempel i en situation, hvor du opretter en hjemmeside, der for at kunne udføre brugergodkendelse skal oprette forbindelse til en database. Et sådant projekt kan bestå af to tjenester - en, der sikrer driften af ​​siden, og en, der er ansvarlig for at understøtte databasen.

Docker Compose-teknologi, hvis du beskriver det på en forenklet måde, giver dig mulighed for at starte mange tjenester med en enkelt kommando.

Forskellen mellem Docker og Docker Compose

Docker bruges til at administrere de individuelle containere (tjenester), der udgør en applikation.

Docker Compose bruges til at administrere flere containere, der er en del af en applikation på samme tid. Dette værktøj tilbyder de samme funktioner som Docker, men giver dig mulighed for at arbejde med mere komplekse applikationer.

Docker Compose Guide for begyndere
Docker (enkelt container) og Docker Compose (flere containere)

Typisk Docker Compose use case

Docker Compose er, i de rigtige hænder, et meget kraftfuldt værktøj, der giver dig mulighed for hurtigt at implementere applikationer med komplekse arkitekturer. Nu vil vi se på et eksempel på den praktiske brug af Docker Compose, hvis analyse vil give dig mulighed for at evaluere de fordele, som brugen af ​​Docker Compose vil give dig.

Forestil dig, at du er udvikler af et webprojekt. Dette projekt omfatter to hjemmesider. Den første giver forretningsfolk mulighed for med blot et par klik at oprette onlinebutikker. Den anden er rettet mod kundesupport. Disse to websteder interagerer med den samme database.

Dit projekt bliver mere og mere populært, og det viser sig, at kapaciteten på den server, det fungerer på, ikke længere er nok. Som et resultat beslutter du dig for at overføre hele projektet til en anden maskine.

Desværre har du ikke brugt noget som Docker Compose. Derfor bliver du nødt til at migrere og omkonfigurere tjenester en ad gangen i håb om, at du ikke glemmer noget i processen med dette arbejde.

Hvis du bruger Docker Compose, så er migrering af dit projekt til en ny server et problem, der kan løses ved at køre et par kommandoer. For at fuldføre overførslen af ​​projektet til en ny lokation skal du kun foretage nogle indstillinger og uploade en sikkerhedskopi af databasen til den nye server.

Udvikling af en klient-server-applikation ved hjælp af Docker Compose

Nu hvor du ved, hvad vi skal bruge Docker Compose til, er det tid til at oprette din første klient/server-applikation ved hjælp af dette værktøj. Vi taler nemlig om udviklingen af ​​en lille hjemmeside (server) i Python, som kan producere en fil med et tekstfragment. Denne fil anmodes fra serveren af ​​et program (klient), også skrevet i Python. Efter at have modtaget filen fra serveren, viser programmet den tekst, der er gemt i den, på skærmen.

Bemærk venligst, at vi antager, at du har det grundlæggende i Docker, og at du allerede har Docker-platformen installeret.

Lad os begynde at arbejde på projektet.

▍1. Opret et projekt

For at bygge din første klient/server-applikation, foreslår jeg, at du starter med at oprette en projektmappe. Det skal indeholde følgende filer og mapper:

  • fil docker-compose.yml. Dette er en Docker Compose-fil, der vil indeholde de instruktioner, der er nødvendige for at starte og konfigurere tjenesterne.
  • Folder server. Det vil indeholde de nødvendige filer for at få serveren til at fungere.
  • Folder client. Det er her klientapplikationsfilerne vil blive placeret.

Som et resultat skal indholdet af hovedmappen i dit projekt se sådan ud:

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

▍2. Server oprettelse

Her vil vi, i gang med at oprette en server, berøre nogle grundlæggende ting vedrørende Docker.

2a. Oprettelse af filer

Gå til mappe server og opret følgende filer i den:

  • fil server.py. Den vil indeholde serverkoden.
  • fil index.html. Denne fil vil indeholde et stykke tekst, som klientapplikationen skal vise.
  • fil Dockerfile. Dette er Docker-filen, der vil indeholde de instruktioner, der er nødvendige for at oprette servermiljøet.

Sådan skal indholdet af din mappe se ud server/:

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

2b. Redigering af en Python-fil.

Tilføj til fil server.py følgende kode:

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

Denne kode giver dig mulighed for at oprette en simpel webserver. Han vil give kunderne en fil index.html, hvis indhold senere vil blive vist på websiden.

2c. Redigering af en HTML-fil

Til at arkivere index.html tilføje følgende tekst:

Docker-Compose is magic!

Denne tekst vil blive sendt til kunden.

2d. Redigering af Dockerfilen

Nu vil vi oprette en simpel fil Dockerfile, som vil være ansvarlig for at organisere runtime-miljøet for Python-serveren. Som grundlag for det oprettede billede vil vi bruge officielt, designet til at køre programmer skrevet i Python. Her er indholdet af Dockerfilen:

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

Lad os nu arbejde på klienten.

▍3. Opret en klient

Mens vi opretter klientsiden af ​​vores projekt, vil vi huske nogle Grundlæggende Docker undervejs.

3a. Oprettelse af filer

Gå til din projektmappe client og opret følgende filer i den:

  • fil client.py. Det er her klientkoden vil være.
  • fil Dockerfile. Denne fil spiller den samme rolle som en lignende fil i servermappen. Den indeholder nemlig en erklæring, der beskriver, hvordan man laver et miljø til at udføre klientkode.

Som et resultat, din mappe client/ På dette stadium skulle det se sådan ud:

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

3b. Redigering af en Python-fil

Tilføj til fil client.py følgende kode:

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

Takket være denne kode kan klientapplikationen downloade data fra serveren og vise dem på skærmen.

3c. Redigering af Dockerfilen

Som i tilfældet med serveren, opretter vi for klienten en enkel Dockerfile, ansvarlig for at forme det miljø, hvori Python-klientapplikationen skal køre. Her er klientkoden Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Som du kan se, har vi lavet to forskellige projekter: server og klient. Hver af dem har sin egen fil Dockerfile. Indtil videre går alt, hvad der sker, ikke ud over det grundlæggende ved at arbejde med Docker. Nu begynder vi at arbejde med Docker Compose. For at gøre dette, se filen docker-compose.ymlplaceret i projektets rodmappe.

Bemærk venligst, at her sigter vi ikke på at dække absolut alle de kommandoer, der kan bruges i docker-compose.yml. Vores hovedmål er at nedbryde et praktisk eksempel, der giver dig grundlæggende viden om Docker Compose.

Her er koden til at sætte i filen 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. Projekt opbygning

Efter i docker-compose.yml alle nødvendige instruktioner er lavet, projektet skal samles. Dette trin i vores arbejde ligner brugen af ​​kommandoen docker build, men den tilsvarende kommando er relateret til flere tjenester:

$ docker-compose build

▍6. Lancering af projektet

Nu hvor projektet er bygget, er det tid til at køre det. Dette trin i vores arbejde svarer til det trin, hvor kommandoen udføres, når du arbejder med individuelle containere docker run:

$ docker-compose up

Efter at have udført denne kommando, skal teksten indlæst af klienten fra serveren vises i terminalen: Docker-Compose is magic!.

Som allerede nævnt bruger serveren computerporten 1234 at betjene kundernes ønsker. Derfor, hvis du går i browseren til adressen http://localhost:1234/, vil den vise en side med tekst Docker-Compose is magic!.

Nyttige kommandoer

Lad os tage et kig på nogle af de kommandoer, som du kan finde nyttige, når du arbejder med Docker Compose.

Denne kommando giver dig mulighed for at stoppe og slette containere og andre ressourcer oprettet af kommandoen docker-compose up:

$ docker-compose down

Denne kommando udskriver servicelogfilerne:

$ docker-compose logs -f [service name]

For eksempel kan det i vores projekt bruges i denne form: $ docker-compose logs -f [service name].

Med denne kommando kan du vise en liste over containere:

$ docker-compose ps

Denne kommando giver dig mulighed for at udføre en kommando i en kørende container:

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

For eksempel kan det se sådan ud: docker-compose exec server ls.

Denne kommando giver dig mulighed for at vise en liste over billeder:

$ docker-compose images

Resultaterne af

Vi har dækket det grundlæggende i at arbejde med Docker Compose-teknologi, hvis viden vil give dig mulighed for at bruge denne teknologi og, hvis det ønskes, begynde at studere den mere i dybden. her repository med projektkoden, som vi overvejede her.

Kære læsere! Bruger du Docker Compose i dine projekter?

Docker Compose Guide for begyndere

Kilde: www.habr.com

Tilføj en kommentar