Docker Compose guide for begyndere

Forfatteren af artiklen, hvis oversættelse vi i dag offentliggør, siger, at den er rettet mod de udviklere, der ønsker at lære Docker Compose og stræber efter at oprette deres første klient-server-applikation ved brug af Docker. Det forudsættes, at læseren af dette materiale har kendskab til grundlæggende Docker. Hvis ikke — kan du se på denne en række materialer, om denne en publikation, hvor grundlæggende Docker diskuteres sammen med grundlæggende Kubernetes, samt denne en artikel for begyndere.

Docker Compose guide for begyndere

Hvad er Docker Compose?

Docker Compose er et værktøj, der er en del af Docker. Det er designet til at håndtere opgaver relateret til implementering af projekter.

Når du studerer grundlæggende Docker, kunne du være stødt på at oprette enkle applikationer, der fungerer autonomt, uden at de for eksempel er afhængige af eksterne datakilder eller tjenester. I praksis er sådanne applikationer sjældne. Reelle projekter inkluderer typisk en hel række samarbejdende applikationer.

Hvordan kan du finde ud af, om du skal bruge Docker Compose til at implementere et bestemt projekt? Faktisk er det meget simpelt. Hvis projektet kræver flere tjenester for at fungere, kan Docker Compose være nyttigt for dig. For eksempel i en situation, hvor der oprettes en hjemmeside, der for at autentificere brugere skal oprette forbindelse til en database. Et sådant projekt kan bestå af to tjenester - den, der driver hjemmesiden, og den, der håndterer databaseunderstøttelsen.

Docker Compose-teknologien, hvis den skal beskrives enkelt, gør det muligt, med en enkelt kommando, at starte mange tjenester.

Forskellen mellem Docker og Docker Compose

Docker bruges til at administrere individuelle containere (tjenester), som en applikation består af.

Docker Compose bruges til samtidig at administrere flere containere, der indgår i applikationen. Dette værktøj tilbyder de samme funktioner som Docker, men giver mulighed for at arbejde med mere komplekse applikationer.

Docker Compose guide for begyndere
Docker (enkel container) og Docker Compose (flere containere)

Et typisk anvendelsesscenario for Docker Compose

Docker Compose er, i dygtige hænder, et meget effektivt værktøj, der muliggør hurtig implementering af applikationer med kompleks arkitektur. Nu vil vi gennemgå et eksempel på praktisk brug af Docker Compose, som vil give dig en bedre forståelse af de fordele, det kan give dig.

Forestil dig, at du er udvikler af et webprojekt. Dette projekt omfatter to hjemmesider. Den første giver erhvervsdrivende mulighed for at oprette deres egne online butikker med blot et par klik. Den anden har til formål at støtte kunderne. Disse to hjemmesider interagerer med den samme database.

Dit projekt bliver stadig mere populært, og det viser sig, at serverkapaciteten, som det kører på, ikke længere er tilstrækkelig. Som resultat beslutter du at flytte hele projektet til en anden maskine.

Desværre har du ikke brugt noget som Docker Compose. Derfor skal du flytte og omkonfigurere tjenester én ad gangen i håbet om, at du ikke glemmer noget undervejs.

Hvis du derimod bruger Docker Compose, er overførslen af dit projekt til en ny server et spørgsmål om at køre et par kommandoer. For at afslutte flytningen af projektet til den nye placering, skal du blot foretage nogle indstillinger og uploade en backup af databasen til den nye server.

Udvikling af en klient-server applikation med Docker Compose

Nu hvor du ved, hvorfor vi skal bruge Docker Compose, er det tid til at oprette din første klient-server applikation ved hjælp af dette værktøj. Det handler specifikt om at udvikle en lille webserver i Python, der kan levere en fil med en tekstuddrag. Denne fil anmodes om af et program (klient), også skrevet i Python. Efter at have modtaget filen fra serveren viser programmet teksten i den på skærmen.

Bemærk, at vi forudsætter, at du har en grundlæggende forståelse af Docker, og at du allerede har installeret Docker-platformen.

Lad os gå i gang med arbejdet på projektet.

▍1. Oprettelse af projekt

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

  • Fil docker-compose.yml. Dette er en Docker Compose-fil, der indeholder de nødvendige instruktioner til at starte og konfigurere tjenesterne.
  • Mappe server. Den vil indeholde de filer, der er nødvendige for at sikre serverens drift.
  • Mappe client. Her vil der være filer til klientapplikationen.

Som resultat skal indholdet i din hovedmappe se således ud:

.
├── client/
├── docker-compose.yml
└── server/
2 mapper, 1 fil

▍2. Oprettelse af server

Her berører vi nogle grundlæggende ting om Docker, mens vi opretter serveren.

2a. Oprettelse af filer

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

  • Fil server.py. I denne fil vil serverens kode befinde sig.
  • Fil index.html. I denne fil vil der være en tekststreng, som klientapplikationen skal vise.
  • Fil Dockerfile. Dette er en Docker-fil, der vil indeholde de nødvendige instruktioner til at oprette serverens miljø.

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

.
├── Dockerfile
├── index.html
└── server.py
0 mapper, 3 filer

2b. Redigering af Python-fil.

Vi tilføjer følgende kode til filen server.py :

#!/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 gør det muligt at oprette en simpel webserver. Den vil levere filen index.html, hvis indhold senere vil blive vist på websiden.

2c. Redigering af HTML-fil

Vi tilføjer følgende tekst til filen index.html :

Docker-Compose er magisk!

Denne tekst vil blive sendt til klienten.

2d. Redigering af Dockerfile

Nu opretter vi en simpel fil Dockerfile, som vil være ansvarlig for at organisere runtime-miljøet for Python-serveren. Som basis for det oprettede billede vil vi bruge det officielle billede, der er beregnet til at køre programmer skrevet i Python. Her er indholdet af 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/

Nu går vi i gang med arbejdet med klienten.

▍3. Oprettelse af klient

Når vi opretter klientdelen af vores projekt, vil vi også genopfriske nogle grundlæggende aspekter af Docker.

3a. Oprettelse af filer

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

  • Fil client.py. Her vil koden til klienten befinde sig.
  • Fil Dockerfile. Denne fil har samme rolle som den tilsvarende fil i servermappen. Den indeholder praktisk talt en instruktion, der beskriver oprettelsen af miljøet til at køre klientkoden.

Som resultat skal din mappe client/ på dette stadium af arbejdet se således ud:

.
├── client.py
└── Dockerfile
0 mapper, 2 filer

3b. Redigering af Python-fil

Vi tilføjer følgende kode til filen client.py :

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

Ved hjælp af denne kode kan klientapplikationen hente data fra serveren og vise dem på skærmen.

3c. Redigering af Dockerfile

Som med serveren opretter vi en enkel Dockerfile, som er ansvarlig for at skabe det miljø, hvor klientens Python-applikation vil køre. Her er koden til klienten Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Som du har bemærket, har vi oprettet to forskellige projekter: server og klient. Hvert af dem har sin egen fil Dockerfile. Indtil nu har alt, hvad der er sket, været inden for rammerne af grundlæggende arbejde med Docker. Nu begynder vi at arbejde med Docker Compose. For dette vil vi se på filen docker-compose.yml, der ligger i rodmappen af projektet.

Bemærk, at vi ikke har til hensigt at gennemgå alle de kommandoer, der kan bruges i docker-compose.yml. Vores hovedmål er at gennemgå et praktisk eksempel, der giver dig grundlæggende viden om Docker Compose.

Her er koden, du skal placere 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. Bygning af projektet

Efter at alle nødvendige instruktioner er blevet tilføjet til docker-compose.yml , skal projektet bygges. Dette trin i vores arbejde minder om at bruge kommandoen docker build, men den relevante kommando handler om flere tjenester:

$ docker-compose build

▍6. Kørsel 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, når man arbejder med separate containere, der udføres kommandoen docker run:

$ docker-compose up

Når denne kommando er udført, skal der i terminalen vises tekst, der er indlæst af klienten fra serveren: Docker-Compose er magisk!.

Som nævnt bruger serveren den computerport 1234 til at betjene klientens anmodninger. Derfor, hvis man går til adressen i browseren http://localhost:1234/, vil der blive vist en side med teksten Docker-Compose er magisk!.

Nyttige kommandoer

Lad os se på nogle kommandoer, der kan være nyttige for dig, når du arbejder med Docker Compose.

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

$ docker-compose down

Denne kommando viser logfilerne for tjenesterne:

$ docker-compose logs -f [service name]

For eksempel kan den bruges i vores projekt på følgende måde: $ docker-compose logs -f [service name].

Med en sådan kommando kan du få 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 den se sådan ud: docker-compose exec server ls.

Denne kommando gør det muligt at vise en liste over billeder:

$ docker-compose images

Resumé

Vi har gennemgået grundlæggende arbejde med teknologien Docker Compose, hvilket vil give dig mulighed for at bruge denne teknologi og, hvis du ønsker det, begynde at studere den mere dybdegående. Her er repository med projektkoden, som vi har gennemgået her.

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

Docker Compose guide for begyndere

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster