Docker Compose veiledning for nybegynnere

Artikkelen vi publiserer oversettelsen av, er skrevet av en forfatter som sier at den er ment for utviklere som ønsker å lære om Docker Compose og som jobber mot å lage sin første klient-server-applikasjon med Docker. Det antas at leseren av dette materialet er kjent med det grunnleggende om Docker. Hvis ikke, kan dere ta en titt på denne serien av materialer, på denne publikasjonen som tar for seg det grunnleggende om Docker sammen med grunnleggende om Kubernetes, og på denne artikkelen for nybegynnere.

Docker Compose veiledning for nybegynnere

Hva er Docker Compose?

Docker Compose er et verktøy som er en del av Docker. Det er utviklet for å håndtere oppgaver relatert til distribusjon av prosjekter.

Når du studerer det grunnleggende om Docker, kan du ha kommet over det å lage enkle applikasjoner som kjører frittstående, uten avhengighet fra eksterne datakilder eller tjenester. I praksis er slike applikasjoner sjeldne. Reelle prosjekter inkluderer vanligvis en hel serie av samvirkende applikasjoner.

Hvordan kan du vite om du bør bruke Docker Compose ved distribusjonen av et prosjekt? Faktisk er det ganske enkelt. Hvis prosjektet krever flere tjenester for å fungere, kan Docker Compose være nyttig. For eksempel, i en situasjon der man bygger en nettside som, for å utføre brukerautentisering, må kobles til en database. Et slikt prosjekt kan bestå av to tjenester: en som driver nettsiden, og en som er ansvarlig for databaseadministrasjonen.

Docker Compose-teknologien, om vi forenkler den, lar deg starte flere tjenester med kun én kommando.

Forskjellen mellom Docker og Docker Compose

Docker brukes til å administrere enkeltcontainere (tjenester) som utgjør applikasjonen.

Docker Compose brukes til samtidig administrering av flere containere som inngår i applikasjonen. Dette verktøyet tilbyr de samme mulighetene som Docker, men lar deg jobbe med mer komplekse applikasjoner.

Docker Compose veiledning for nybegynnere
Docker (enkel container) og Docker Compose (flere containere)

Typisk brukstilfelle for Docker Compose

Docker Compose er, i dyktige hender, et meget kraftig verktøy som lar deg raskt sette opp applikasjoner med kompleks arkitektur. Nå skal vi se på et praktisk eksempel på bruken av Docker Compose, hvis analyse vil gjøre deg i stand til å vurdere de fordelene som bruken av Docker Compose kan gi deg.

Forest ill deg at du er utvikler for et nettprosjekt. Dette prosjektet inkluderer to nettsteder. Det første lar folk som driver virksomhet opprette nettbutikker med bare noen få klikk. Det andre er rettet mot kundestøtte. Disse to nettstedene interagerer med den samme databasen.

Prosjektet ditt blir mer og mer populært, og det viser seg at serverkapasiteten den kjører på ikke lenger er tilstrekkelig. Som resultat bestemmer du deg for å flytte hele prosjektet til en annen maskin.

Dessverre har du ikke brukt noe som Docker Compose. Derfor må du flytte og omkonfigurere tjenestene én etter én, og håpe at du ikke glemmer noe i prosessen.

Hvis du derimot bruker Docker Compose, er flyttingen av prosjektet ditt til en ny server en oppgave som kan løses med kun noen få kommandoer. For å fullføre overføringen av prosjektet trenger du bare å gjøre noen innstillinger og laste opp en sikkerhetskopi av databasen til den nye serveren.

Utvikle et klient-server-program ved bruk av Docker Compose

Nå som du vet hva vi skal bruke Docker Compose til, er det på tide å lage din første klient-server-applikasjon med hjelp av dette verktøyet. Det handler om å utvikle et lite nettsted (server) i Python, som kan gi en fil med et tekstutdrag. Denne filen blir forespurt av et program (klient), også skrevet i Python. Etter å ha mottatt filen fra serveren, viser programmet teksten som ligger i den på skjermen.

Vær oppmerksom på at vi forutsetter at du har grunnleggende kunnskap om Docker, og at du allerede har installert Docker-plattformen.

La oss begynne å jobbe med prosjektet.

▍1. Opprette prosjektet

For å bygge din første klient-server-applikasjon foreslår jeg at vi starter med å lage en prosjektmappe. Den skal inneholde følgende filer og mapper:

  • Fil docker-compose.ymlDette er en Docker Compose-fil som vil inneholde instruksjoner nødvendig for å starte og konfigurere tjenestene.
  • Mappen serverDen vil inneholde filene som er nødvendige for å sikre serverens drift.
  • Mappen klientHer vil filene for klientapplikasjonen bli plassert.

Som et resultat bør innholdet i hovedmappen til prosjektet ditt se slik ut:

.
├── klient/
├── docker-compose.yml
└── server/
2 kataloger, 1 fil

▍2. Oppretting av server

Her, i prosessen med å opprette serveren, vil vi berøre noen grunnleggende ting om Docker.

2a. Oppretting av filer

Gå til mappen server og opprett følgende filer der:

  • Fil server.py. Den vil inneholde serverens kode.
  • Fil index.html. I denne filen vil det være en tekstbit som klientapplikasjonen skal vise.
  • Fil Dockerfile. Dette er en Docker-fil som vil inneholde instruksjoner nødvendig for å opprette servermiljøet.

Slik skal innholdet i mappen din se ut: server/:

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

2b. Redigering av Python-fil.

La oss legge til følgende kode i 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 koden lar deg opprette en enkel webserver. Den vil gi klientene filen index.html, innholdet av hvilket senere vil bli vist på nettsiden.

2c. Redigering av HTML-fil

I filen index.html legger vi til følgende tekst:

Docker-Compose er magi!

Denne teksten vil bli sendt til klienten.

2d. Redigering av Dockerfile

Nå vil vi lage en enkel fil Dockerfile, som vil være ansvarlig for å organisere kjøringsmiljøet for Python-serveren. Vi vil bruke det offisielle bildet, beregnet for å kjøre programmer skrevet i Python. Her er innholdet i 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/

La oss nå jobbe med klienten.

▍3. Oppretting av klient

Når vi lager klientsiden av prosjektet vårt, vil vi samtidig gjenta noen grunnleggende konsepter om Docker.

3a. Oppretting av filer

Gå til prosjektmappen din klient og opprett følgende filer der:

  • Fil klient.py. Her vil klientens kode bli plassert.
  • Fil Dockerfile. Denne filen har samme rolle som den tilsvarende filen i servermappen. Nemlig, den inneholder instruksjonen som beskriver opprettingen av miljøet for å kjøre klientkoden.

Som et resultat bør mappen din klient/ på dette stadiet av arbeidet se slik ut:

.
├── klient.py
└── Dockerfile
0 kataloger, 2 filer

3b. Redigering av Python-fil.

La oss legge til følgende kode i filen klient.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()

Takket være denne koden kan klientapplikasjonen laste ned data fra serveren og vise dem på skjermen.

3c. Redigering av Dockerfile

Som i tilfellet med serveren lager vi for kunden en enkel Dockerfile, ansvarlig for å skape miljøet der kundens Python-applikasjon skal kjø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 kanskje har lagt merke til, har vi opprettet to forskjellige prosjekter: server og klient. Hvert av dem har sin egen fil Dockerfile. Så langt har alt som har skjedd vært innenfor rammen av grunnleggende arbeid med Docker. Nå begynner vi å jobbe med Docker Compose. For dette vil vi se på filen docker-compose.yml, som ligger i rotmappen til prosjektet.

Merk at her har vi ikke som mål å se på absolutt alle kommandoene som kan brukes i docker-compose.yml. Vårt hovedmål er å gå gjennom et praktisk eksempel som gir deg grunnleggende kunnskap om Docker Compose.

Her er koden som må plasseres 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. Bygge prosjektet

Etter at alle nødvendige instruksjoner er lagt til i docker-compose.yml , må prosjektet bygges. Dette steget i arbeidet vårt ligner på å bruke kommandoen docker build, men den tilsvarende kommandoen angår flere tjenester:

$ docker-compose build

▍6. Kjøre prosjektet

Nå som prosjektet er bygget, er det på tide å kjøre det. Dette steget i arbeidet vårt tilsvarer steget der, når vi arbeider med separate containere, kjøres kommandoen docker run:

$ docker-compose up

Etter å ha kjørt denne kommandoen, skal terminalen vise teksten lastet ned av klienten fra serveren: Docker-Compose er magi!.

Som allerede nevnt, bruker serveren datamaskinens port 1234 for å håndtere klientens forespørsel. Så, hvis du går til nettleseren og skriver inn adressen http://localhost:1234/, vil den vise en side med teksten Docker-Compose er magi!.

Nyttige kommandoer

La oss se på noen kommandoer som kan være nyttige når du arbeider med Docker Compose.

Denne kommandoen lar deg stoppe og slette containere og andre ressurser opprettet av kommandoen docker-compose up:

$ docker-compose down

Denne kommandoen viser tjenestelogger:

$ docker-compose logs -f [service name]

For eksempel, i vårt prosjekt kan den brukes slik: $ docker-compose logs -f [service name].

Med denne kommandoen kan du vise en liste over containere:

$ docker-compose ps

Denne kommandoen lar deg utføre en kommando i en kjørende beholder:

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

For eksempel kan det se slik ut: docker-compose exec server ls.

Denne kommandoen lar deg vise en liste over bilder:

$ docker-compose images

Resultater

Vi har gått gjennom grunnleggende om arbeid med Docker Compose, kunnskap om dette vil la deg bruke teknologien og, om ønskelig, begynne å studere den mer dyptgående. Her er lagring med koden til prosjektet vi har gjennomgått her.

Kjære lesere! Bruker du Docker Compose i prosjektene dine?

Docker Compose veiledning for nybegynnere

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster