# Kaip naudoti „Docker Compose“ daugiakonteinerinėms programoms

„Compose“ supaprastina programų mastelio keitimą ir diegimą „Docker“ aplinkoje, automatizuodama **konteinerių valdymą**. Mūsų pamoka išsamiai nagrinėja „Docker Compose“ nustatymą ir naudojimą, siekiant optimizuoti jūsų programų diegimo procesą.

## Kas yra „Docker Compose“?

„Docker Compose“ naudojamas programoms valdyti ir konteinerių kūrimo efektyvumui didinti. Konfigūracijos apibrėžiamos viename YAML faile, todėl programas lengva kurti ir mastelinti. „Docker Compose“ dažnai naudojamas vietinei aplinkai sukonfigūruoti. Tačiau jis taip pat gali būti **nuolatinės integracijos ir nuolatinio pristatymo (CI/CD) darbo eigos** dalis. Kūrėjai gali apibrėžti konkrečią konteinerio versiją testavimui arba konkrečioms procesų grandinės fazėms. Tai leidžia lengviau nustatyti problemas ir ištaisyti klaidas prieš programai patekant į gamybą.

## „Docker Compose“ reikalavimai

**Konteinerių koordinavimui** reikalingi tiek „Docker Engine“, tiek „Docker Compose“. Įsitikinkite, kad jūsų sistemoje yra įdiegta viena iš šių programų:

- **„Docker Engine“ ir „Docker Compose**“: galima įdiegti kaip atskirus vykdomuosius failus.
- **„Docker Desktop**“: kūrimo aplinka su grafinė vartotojo sąsaja, įskaitant „Docker Engine“ ir „Docker Compose“.

Tip Mūsų pamokose sužinosite, kaip įdiegti „Docker Compose“ įvairiose operacinėse sistemose:

- [„Docker Compose“ įdiegimas „Ubuntu“](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/docker-compose-ubuntu-sistemoje/)
- [„Docker Compose“ įdiegimas „macOS“](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/docker-compose-mac-kompiuteryje/)
- [„Docker Compose“ įdiegimas „Windows“](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/idiekite-docker-compose-windows-sistemoje/)

## Išsamus vadovas, kaip naudoti „Docker Compose“

Toliau parodysime, kaip naudoti „Docker Compose“ su paprasta **„Python“ žiniatinklio programa**, kurioje naudojamas apsilankymų skaitiklis. Tam pasitelksime „Python Flask“ sistemą ir atminties duomenų bazę „Redis“. „Python“ ar „Redis“ diegti nereikia, nes jie pateikiami kaip „Docker“ atvaizdai.

### 1 žingsnis: Sukurkite projekto failus

Paleiskite terminalą ir sukurkite naują aplanką projektui.

```shell
$ mkdir composedemo
```

Pereikite į tą katalogą.

```shell
$ cd composedemo
```

Šiame aplanke sukurkite failą *„app.py“* ir į jį įterpkite šį kodą:

```python
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)
```

Mūsų konfigūracijoje naudojame `redis` kaip kompiuterio vardą ir numatytąjį `6379` prievadą prisijungimui prie „Redis“ paslaugos. Be to, nurodome, kad funkcija `get_hit_count()` turėtų atlikti kelis prisijungimo prie paslaugos bandymus. Tai rekomenduojama tais atvejais, kai „Redis“ gali būti ne iš karto pasiekiama paleidus programą arba kai vykdymo metu gali kilti laikini ryšio sutrikimai.

Sukurkite failą *„requirements.txt“* su priklausomybėmis:

```plaintext
flask
redis
```

### 2 žingsnis: Sukurkite „Dockerfile“ failą

**„Dockerfile“** naudojamas Docker atvaizdui sukurti. Jame nurodomos visos Python programai reikalingos priklausomybės.

```shell
# 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"]
```

Nurodome „Docker“ naudoti „Python 3.7“ atvaizdą. Be to, nustatome reikiamas aplinkos kintamuosius **komandai „flask**“. Naudodami `apk add`, įdiegiame būtinas priklausomybes, įskaitant „gcc“. Kad konteineris galėtų stebėti 5000 prievadą, nurodome `EXPOSE`. Naudodami `COPY`, perkeliame dabartinio aplanko turinį į darbo katalogą */code* konteinerio viduje. Galiausiai kaip numatytąją komandą konteineriui pasirenkame `flask run`.

Patikrinkite, ar failas „Dockerfile“ buvo išsaugotas be failo plėtinio, nes kai kurie redaktoriai automatiškai prideda plėtinį *.txt*.

### 3 žingsnis: Sukurkite YAML failą

Failo ***„docker-compose.yml“*** konfigūruojame paslaugas „redis“ ir „web“.

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

Ši žiniatinklio paslauga sukurta naudojant „Dockerfile“ sukurtą „Docker“ atvaizdą. Ji susieja konteinerį ir pagrindinį kompiuterį su 8000 prievadu, o **„Flask“ žiniatinklio serveris** veikia 5000 prievade. Tuo tarpu „Redis“ atvaizdas gaunamas tiesiogiai iš oficialaus „Docker Hub“.

### 4 žingsnis: Paleiskite programą naudodami „Compose“

Paleiskite programą iš savo projekto aplanko.

```shell
docker compose up
```

Naršyklėje atidarykite puslapį *http://localhost:8000*. Taip pat galite įvesti adresą *http://127.0.0.1:8000*.

Turėtumėte pamatyti tokį pranešimą:

[![Image: Docker Compose Application: Output the number of visits in the browser](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/d/1/csm_docker-compose-hit-counter_f6e8af7148.webp "Docker Compose Application: Output the number of visits in the browser")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter.png) You’ll see the number of times you have visited the browser. Atnaujinkite puslapį. Peržiūrų skaičius dabar turėtų būti padidėjęs 1.

[![Image: Calling the Docker Compose application again](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/7/8/csm_docker-compose-hit-counter-updated_58c6be39f6.webp "Calling the Docker Compose application again")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-updated.png) The number of visits increased by 1. Uždarykite programą naudodami:

```shell
$ docker compose down
```

Norėdami sustabdyti programos veikimą, terminale tiesiog įveskite `Ctrl` + `C`.

### 5 žingsnis: Pridėkite „bind“ montavimą

Jei norite pridėti **pririšamąjį montavimą** žiniatinklio paslaugai, tai galite padaryti faile *„docker-compose.yml*“.

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

Skyriuje **„Volumes“** nurodome, kad dabartinis projekto aplankas turi būti priskirtas konteinerio viduje esančiam katalogui */code*. Tai leidžia sklandžiai keisti kodą be būtinybės iš naujo kurti atvaizdą. Kintamasis `FLASK_DEBUG` nurodo `flask run` veikti kūrimo režimu.

### 6 žingsnis: Atkurti ir paleisti programą

Terminale įveskite šią komandą, kad perkompiliuotumėte „Compose“ failą:

```shell
docker compose up
```

### 7 žingsnis: Atnaujinkite programą

Dabar, kai savo programoje naudojate „bind mount“, galite keisti kodą ir automatiškai matyti pakeitimus be būtinybės iš naujo kurti atvaizdą.

Parašykite naują „welcome“ testą faile ***„app.py***“.

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

Atnaujinkite naršyklę, kad patikrintumėte, ar pakeitimai įsigaliojo.

[![Image: Docker Compose application: modified welcome text](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/9/3/csm_docker-compose-hit-counter-text-modified_a210964afe.webp "Docker Compose application: modified welcome text")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-text-modified.png) The welcome text in the Python application has been modified ### 8 žingsnis: kitos komandos

`--help` parinkčių sąraše pateikiamos „Docker Compose“ komandos:

```shell
docker compose --help
```

Norėdami paleisti „Docker Compose“ fone, galite nurodyti argumentą `-d` “:

```shell
docker compose up -d
```

Naudokite `down`, kad pašalintumėte visus konteinerius. Komanda `--volumes` ištrina „Redis“ konteineriui naudojamus tomus.

```shell
docker compose down --volumes
```

Tip Norėdami pradėti dirbti su „Docker“, peržiūrėkite mūsų [„Docker“ vadovą](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/docker-vadovas-idiegimas-ir-pirmieji-zingsniai/) ir „Docker“ komandų apžvalgą.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/docker-compose-vadovas/](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/docker-compose-vadovas/) for AI/LLM consumption.