Compose liht­sus­tab ra­ken­duste ska­lee­ri­mist ja ka­su­tuse­le­võttu Dockeris, au­to­ma­ti­see­ri­des kon­tei­ne­rite haldamise. Meie juhendis kä­sit­le­takse põh­ja­li­kult Docker Compose’i sea­dis­ta­mist ja ka­su­ta­mist, et muuta teie ra­ken­duste ka­su­tuse­le­võtu protsess su­ju­va­maks.

Mis on Docker Compose?

Docker Compose’i ka­su­ta­takse ra­ken­duste hal­da­miseks ja kon­tei­ne­riaren­duse tõhususe suu­ren­da­miseks. Kon­fi­gu­rat­sioo­nid mää­rat­le­takse ühes YAML-failis, mis muudab ra­ken­duste koos­ta­mise ja ska­lee­ri­mise lihtsaks. Docker Compose’i ka­su­ta­takse sageli kohaliku keskkonna sea­dis­ta­miseks. Samas võib see olla ka osa pideva in­teg­ree­ri­mise ja pideva väl­jas­ta­mise (CI/CD) töövoost. Arendajad saavad mää­rat­leda konk­reetse kon­tei­ne­ri­ver­siooni tes­ti­miseks või konk­reet­se­teks to­ru­juhtme etap­pi­deks. See liht­sus­tab prob­leemide tu­vas­ta­mist ja vigade pa­ran­da­mist enne rakenduse tootmisse viimist.

Docker Compose’i nõuded

Kon­tei­ne­rite koor­di­nee­ri­miseks on vaja nii Docker Engine’i kui ka Docker Compose’i. Veendu, et su süsteemis on ins­tal­li­tud üks järg­mis­test:

  • Docker Engine ja Docker Compose: neid saab ins­tal­lida eraldi käi­vi­ta­ta­vate failidena.
  • Docker Desktop: graa­fi­lise ka­su­ta­ja­lii­de­sega aren­dus­kesk­kond, mis sisaldab Docker Engine’i ja Docker Compose’i.
Tip

Vaata meie ju­hen­di­test, kuidas ins­tal­lida Docker Compose eri­ne­va­tele ope­rat­sioo­ni­süs­teemi­dele:

Juhend Docker Compose’i ka­su­ta­miseks samm-sammult

Järg­ne­valt näitame, kuidas kasutada Docker Compose’i lihtsa Python-vee­bi­ra­ken­duse puhul, mis kasutab kü­las­tuste loendurit. Selleks kasutame Python Flask-raa­mis­tikku ja Redis-mä­lu­põ­hist and­me­ba­asi. Teil pole vaja Pythoni ega Redist ins­tal­lida, kuna need on saadaval Docker-piltidena.

1. samm: Projekti failide loomine

Käivita terminal ja loo pro­jek­tile uus kaust.

$ mkdir composedemo
shell

Mine sellesse kataloogi.

$ cd composedemo
shell

Loo selles kaustas fail app.py ja lisa sellesse järgmine kood:

import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I was here {} times.\n'.format(count)
python

Meie sea­dis­tuses kasutame Redis-teenusega ühenduse loomiseks hostinime redis ja vaikimisi porti 6379. Lisaks määrame, et funkt­sioon get_hit_count() peaks teenusega mitu korda ühendust proovima. Seda soo­vi­ta­takse juhul, kui Redis ei pruugi rakenduse käi­vi­ta­misel kohe kät­te­saa­dav olla või kui töötamise ajal võivad esineda ajutised ühen­dus­prob­lee­mid.

Loo fail requi­re­ments.txt, milles on kirjas sõl­tu­vu­sed:

flask
redis
plaintext

2. samm: Doc­ker­file’i sea­dis­ta­mine

Doc­ker­file’i ka­su­ta­takse Docker-pildi loomiseks. See määrab kindlaks kõik sõl­tu­vu­sed, mida Python-rakendus vajab.

# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
shell

Me anname Dockerile käsu kasutada Python 3.7-i kujutist. Lisaks sea­dis­tame Flask-käsu jaoks vajalikud kesk­kon­na­muu­tu­jad. apk add abil ins­tal­lime olulised sõl­tu­vu­sed, seal­hul­gas gcc. Et konteiner saaks jälgida porti 5000, määrame EXPOSE. COPY abil kopeerime praeguse kausta sisu kon­tei­neri töökausta /code. Lõpuks valime kon­tei­neri vaikimisi käskuks flask run.

Veendu, et Doc­ker­file sal­vestati ilma fai­li­laien­dita, kuna mõned teks­ti­re­dak­to­rid lisavad au­to­maat­selt laiendi .txt.

3. samm: Loo YAML-fail

Failis docker-compose.yml sea­dis­tame teenused „redis“ ja „web“.

version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:5000"
    redis:
        image: "redis:alpine"
yaml

Vee­bi­tee­nus on loodud Doc­ker­file’i abil loodud Docker-pildi abil. See seob kon­tei­neri ja host-arvuti pordiga 8000, samal ajal kui Flask-vee­bi­ser­ver töötab pordil 5000. Redis-pilt aga laa­di­takse alla otse amet­li­kust Docker Hubist.

4. samm: Käivita rakendus Compose’iga

Käivita rakendus oma pro­jek­ti­kausta kaudu.

docker compose up
shell

Ava oma brauseris aadress http://localhost:8000. Võid sisestada ka aadressi http://127.0.0.1:8000.

Te peaksite nägema järgmist teadet:

Image: Docker Compose Application: Output the number of visits in the browser
You’ll see the number of times you have visited the browser.

Värskenda lehekülge. Vaadete arv peaks nüüd olema kasvanud ühe võrra.

Image: Calling the Docker Compose application again
The number of visits increased by 1.

Sulge rakendus järg­mi­selt:

$ docker compose down
shell

Rakenduse töötamise lõ­pe­ta­miseks piisab, kui vajutad ter­mi­na­lis klah­vi­kom­bi­nat­siooni Ctrl + C.

5. samm: Lisa süm­bo­li­line mount

Kui soovid vee­bi­tee­nu­sele lisada bind-mounti, saad seda teha failis docker-compose.yml.

version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:5000"
        volumes:
            - .:/code
        environment:
            FLASK_DEBUG: "true"
    redis:
        image: "redis:alpine"
yaml

Jaotises „Volumes“ määrame praeguse pro­jek­ti­kausta ühen­da­mise kon­tei­neri sees asuva ka­ta­loo­giga /code. See võimaldab koodi sujuvalt muuta, ilma et oleks vaja pilti uuesti luua. Muutuja FLASK_DEBUG annab käsu flask run töötada aren­dus­re­žii­mis.

6. samm: Rakenduse uuesti koos­ta­mine ja käi­vi­ta­mine

Sisesta terminali järgmine käsk, et Compose-fail uuesti koostada:

docker compose up
shell

7. samm: Rakenduse uuen­da­mine

Nüüd, kui kasutate oma ra­ken­duses bind-mounti, saate muuta koodi ja näha muudatusi au­to­maat­selt, ilma et peaksite pilti uuesti ehitama.

Kirjuta faili app.py uus ter­vi­tus­test.

return 'Hello from Docker! I was here {} times.\n'.format(count)
python

Värskenda brauserit, et kont­rol­lida, kas muu­da­tu­sed on ra­ken­du­nud.

Image: Docker Compose application: modified welcome text
The welcome text in the Python app­lica­tion has been modified

8. samm: muud käsud

--help va­li­ku­või­ma­lust loetlevad Docker Compose’i käsud:

docker compose --help
shell

Et käivitada Docker Compose taustal, võid lisada argumendi -d:

docker compose up -d
shell

Kasuta down, et eemaldada kõik kon­tei­ne­rid. Käsk --volumes kustutab Redis-kon­tei­neri poolt ka­su­ta­ta­vad mahud.

docker compose down --volumes
shell
Go to Main Menu