# Kā izmantot Docker Compose daudzkonteinera lietojumprogrammām

Compose vienkāršo lietojumprogrammu mērogošanu un izvietošanu Docker vidē, automatizējot **konteineru pārvaldību**. Mūsu apmācībā tiek sīki izskatīta Docker Compose konfigurēšana un izmantošana, lai optimizētu lietojumprogrammu izvietošanas procesu.

## Kas ir Docker Compose?

Docker Compose tiek izmantots, lai pārvaldītu lietojumprogrammas un paaugstinātu efektivitāti konteineru izstrādē. Konfigurācijas tiek definētas vienā YAML failā, kas atvieglo lietojumprogrammu izveidi un mērogošanu. Docker Compose bieži izmanto vietējās vides konfigurēšanai. Tomēr tas var būt arī daļa no **nepārtrauktas integrācijas/nepārtrauktas piegādes (CI/CD) darba plūsmas**. Izstrādātāji var definēt konkrētu konteineru versiju testēšanai vai konkrētām procesa fāzēm. Tas atvieglo problēmu identificēšanu un kļūdu novēršanu, pirms lietojumprogramma tiek nodota ekspluatācijā.

## Docker Compose prasības

Lai nodrošinātu **konteineru koordināciju**, ir nepieciešams gan Docker Engine, gan Docker Compose. Pārliecinieties, ka jūsu sistēmā ir instalēta viena no šīm programmām:

- **Docker Engine un Docker Compose**: var instalēt kā atsevišķas binārās programmas.
- **Docker Desktop**: attīstības vide ar grafisko lietotāja saskarni, kas ietver Docker Engine un Docker Compose.

Tip Uzziniet, kā instalēt Docker Compose dažādās operētājsistēmās, izmantojot mūsu apmācības:

- [Docker Compose instalēšana Ubuntu](https://www.ionos.com/lv-lv/digitalguide/serveris/konfiguracija/docker-compose-ubuntu-vide/)
- [Docker Compose instalēšana macOS](https://www.ionos.com/lv-lv/digitalguide/serveris/konfiguracija/docker-compose-uz-mac/)
- [Docker Compose instalēšana Windows](https://www.ionos.com/lv-lv/digitalguide/serveris/konfiguracija/instalejiet-docker-compose-operetajsistema-windows/)

## Soli pa solim: kā lietot Docker Compose

Turpinājumā parādīsim, kā izmantot Docker Compose, izmantojot vienkāršu **Python tīmekļa lietojumprogrammu**, kurā ir iebūvēts apmeklējumu skaitītājs. Šim nolūkam izmantosim Python Flask rāmi un Redis atmiņas datubāzi. Python vai Redis nav jāinstalē, jo tie ir pieejami kā Docker attēli.

### 1. solis: Izveidojiet projekta failus

Atveriet termināli un izveidojiet jaunu mapi projektam.

```shell
$ mkdir composedemo
```

Pāriet uz direktoriju.

```shell
$ cd composedemo
```

Izveidojiet šajā mapē failu *app.py* un pievienojiet tam šādu kodu:

```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ūsu konfigurācijā izmantojam hostvārdu `redis` un noklusējuma portu `6379`, lai izveidotu savienojumu ar Redis pakalpojumu. Turklāt norādām, ka funkcijai `get_hit_count()` jāveic vairāki mēģinājumi izveidot savienojumu ar pakalpojumu. Tas ir ieteicams gadījumos, kad Redis var nebūt uzreiz pieejams lietojumprogrammas palaišanas brīdī vai ja darbības laikā var rasties pārtraukumi savienojumā.

Izveidojiet failu *requirements.txt* ar atkarībām:

```plaintext
flask
redis
```

### 2. solis: Dockerfile konfigurēšana

**Dockerfile** tiek izmantots Docker attēlam. Tajā ir norādītas visas atkarības, kas nepieciešamas Python lietojumprogrammai.

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

Mēs norādām Docker izmantot Python 3.7 attēlu. Turklāt mēs iestatām nepieciešamos vides mainīgos lielumus **komandai flask**. Izmantojot `apk add`, mēs instalējam būtiskās atkarības, tostarp gcc. Lai konteiners varētu uzraudzīt 5000. portu, mēs norādām `EXPOSE`. Izmantojot `COPY`, mēs pārnesam pašreizējās mapes saturu uz darba direktoriju */code* konteinera iekšienē. Visbeidzot, kā konteinera noklusējuma komandu mēs izvēlamies `flask run`.

Pārliecinieties, ka faila „Dockerfile“ nosaukumam nav pievienota faila paplašinājuma, jo daži teksta redaktori automātiski pievieno paplašinājumu *.txt*.

### 3. solis: Izveidojiet YAML failu

Failā ***docker-compose.yml*** mēs konfigurējam pakalpojumus „redis“ un „web“.

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

Tīmekļa pakalpojums ir izveidots, izmantojot Docker failā „Dockerfile“ izveidoto Docker attēlu. Tas savieno konteineru un uzņēmējdatoru ar 8000. portu, savukārt **Flask tīmekļa serveris** darbojas 5000. portā. Savukārt Redis attēls tiek iegūts tieši no oficiālā Docker Hub.

### 4. solis: Palaižiet lietojumprogrammu ar Compose

Palaižiet lietojumprogrammu no sava projekta mapes.

```shell
docker compose up
```

Atveriet pārlūkprogrammā vietni *http://localhost:8000*. Varat arī ievadīt *http://127.0.0.1:8000*.

Jums vajadzētu redzēt šādu ziņojumu:

[![Image: Docker Compose Application: Output the number of visits in the browser](https://www.ionos.com/lv-lv/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/lv-lv/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter.png) You’ll see the number of times you have visited the browser. Atjaunojiet lapu. Skatījumu skaitam tagad vajadzētu būt palielinājušamies par 1.

[![Image: Calling the Docker Compose application again](https://www.ionos.com/lv-lv/digitalguide/fileadmin/_processed_/7/8/csm_docker-compose-hit-counter-updated_58c6be39f6.webp "Calling the Docker Compose application again")](https://www.ionos.com/lv-lv/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-updated.png) The number of visits increased by 1. Pārtrauciet lietojumprogrammas darbību, izmantojot:

```shell
$ docker compose down
```

Lai pārtrauktu programmas darbību, terminālī vienkārši nospiediet `Ctrl` + `C`.

### 5. solis: Pievienojiet saistīto montējumu

Ja vēlaties pievienot **saistītu montējumu** tīmekļa pakalpojumam, to var izdarīt failā *docker-compose.yml*.

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

Sadaļā **„Volumes“** mēs norādām, ka pašreizējā projekta mape tiek pievienota konteinerā esošajam */code* katalogam. Tas ļauj vienkārši veikt izmaiņas kodā, neizveidojot attēlu no jauna. Mainīgais `FLASK_DEBUG` norāda `flask run`, ka jādarbojas izstrādes režīmā.

### 6. solis: Pārkompilējiet un palaidiet lietojumprogrammu

Lai pārkompilētu Compose failu, terminālī ievadiet šādu komandu:

```shell
docker compose up
```

### 7. solis: Atjauniniet lietojumprogrammu

Tagad, kad savai lietojumprogrammai izmantojat „bind mount“, varat veikt izmaiņas kodā un automātiski redzēt šīs izmaiņas, neizveidojot attēlu no jauna.

Izveido jaunu sākuma testu failā ***app.py***.

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

Atjauniniet pārlūku, lai pārbaudītu, vai izmaiņas ir stājušās spēkā.

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

`--help` pieejamās Docker Compose komandu opcijas:

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

Lai palaistu Docker Compose fonā, varat pievienot argumentu `-d`:

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

Izmantojiet `down`, lai izdzēstu visus konteinerus. Komanda `--volumes` dzēš sējumus, kurus izmanto Redis konteiners.

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

Tip Lai sāktu strādāt ar Docker, iepazīstieties ar mūsu [Docker apmācību](https://www.ionos.com/lv-lv/digitalguide/serveris/konfiguracija/docker-pamaciba-instalesana-un-pirmie-soli/) un Docker komandu pārskatu.


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