# Kako uporabljati Docker Compose za aplikacije z več kontejnerji

Compose poenostavlja prilagajanje zmogljivosti in uvajanje aplikacij v Dockerju z avtomatizacijo **upravljanja kontejnerjev**. V našem vodiču bomo podrobno obravnavali nastavitev in uporabo Docker Compose za poenostavitev postopka uvajanja vaših aplikacij.

## Kaj je Docker Compose?

Docker Compose se uporablja za upravljanje aplikacij in povečanje učinkovitosti pri razvoju kontejnerjev. Konfiguracije so opredeljene v eni sami datoteki YAML, kar omogoča enostavno sestavljanje in prilagajanje obsega aplikacij. Docker Compose se pogosto uporablja za vzpostavitev lokalnega okolja. Lahko pa je tudi del **delovnega toka neprekinjene integracije in neprekinjene dostave (CI/CD)**. Razvijalci lahko določijo posebno različico kontejnerja za testiranje ali določene faze poteka. To olajša prepoznavanje težav in odpravljanje napak, preden aplikacija preide v produkcijo.

## Zahteve za Docker Compose

Za **upravljanje kontejnerjev** potrebujete tako Docker Engine kot Docker Compose. Preverite, ali imate v sistemu nameščen enega od naslednjih programov:

- **Docker Engine in Docker Compose**: Lahko ju namestite kot samostojni izvedljivi datoteki.
- **Docker Desktop**: razvojno okolje z grafičnim uporabniškim vmesnikom, ki vključuje Docker Engine in Docker Compose.

Tip V naših navodilih si oglejte, kako namestiti Docker Compose na različnih operacijskih sistemih:

- [Namestitev Docker Compose na Ubuntu](https://www.ionos.com/sl-si/digitalguide/streznik/nastavitve/docker-compose-v-sistemu-ubuntu/)
- [Namestitev Docker Compose na macOS](https://www.ionos.com/sl-si/digitalguide/streznik/nastavitve/docker-compose-na-macu/)
- [Namestitev Docker Compose na Windows](https://www.ionos.com/sl-si/digitalguide/streznik/nastavitve/namestite-docker-compose-v-sistemu-windows/)

## Podroben vodnik za uporabo Docker Compose

V nadaljevanju bomo prikazali, kako uporabljati Docker Compose s preprosto **spletno aplikacijo v jeziku Python**, ki uporablja število ogledov. Za to bomo uporabili ogrodje Python Flask in podatkovno bazo v pomnilniku Redis. Python in Redis vam ni treba namestiti, saj sta na voljo kot slike Dockerja.

### 1. korak: Ustvarite projektne datoteke

Zaženi terminal in ustvari novo mapo za projekt.

```shell
$ mkdir composedemo
```

Preklopite v imenik.

```shell
$ cd composedemo
```

V tej mapi ustvarite datoteko *app.py* in vanjo vnesite naslednjo kodo:

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

V naši konfiguraciji za povezavo s storitvijo Redis uporabljamo ime gostitelja `redis` in privzeto vrata `6379` «. Poleg tega določimo, da mora funkcija `get_hit_count()` opraviti več poskusov povezave s storitvijo. To je priporočljivo v primerih, ko Redis ob zagonu aplikacije morda ni takoj na voljo ali pa med izvajanjem pride do občasnih težav s povezavo.

Ustvarite datoteko *requirements.txt* z odvisnostmi:

```plaintext
flask
redis
```

### Korak 2: Nastavite datoteko Dockerfile

Datoteka **Dockerfile** se uporablja za sliko Dockerja. V njej so navedene vse odvisnosti, ki jih potrebuje aplikacija v jeziku Python.

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

Dockerju naročimo, naj uporabi sliko Python 3.7. Poleg tega nastavimo potrebne spremenljivke okolja za **ukaz flask**. Z ukazom `apk add` namestimo nujne odvisnosti, vključno z gcc. Da bi kontejnerju omogočili spremljanje vrat 5000, določimo `EXPOSE`. Z `COPY` prenesemo vsebino trenutne mape v delovni imenik */code* znotraj kontejnerja. Nazadnje kot privzeti ukaz za kontejner izberemo `flask run`.

Preverite, ali je bil datoteka Dockerfile shranjena brez končnice, saj nekateri urejevalniki samodejno dodajo končnico *.txt*.

### Korak 3: Ustvarite datoteko YAML

V datoteki ***docker-compose.yml*** konfiguriramo storitvi »redis« in »web«.

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

Spletna storitev je zgrajena z uporabo slike Docker, ki jo ustvari datoteka Dockerfile. Ta poveže kontejner in gostiteljski računalnik s vratom 8000, medtem ko **spletni strežnik Flask** deluje na vratih 5000. Slika Redis pa se pridobi neposredno iz uradnega Docker Hub.

### Korak 4: Zaženi aplikacijo s Compose

Zaženite aplikacijo iz mape s projektom.

```shell
docker compose up
```

V brskalniku odprite stran *http://localhost:8000*. Lahko vnesete tudi *http://127.0.0.1:8000*.

Prikazalo se bo naslednje sporočilo:

[![Image: Docker Compose Application: Output the number of visits in the browser](https://www.ionos.com/sl-si/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/sl-si/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter.png) You’ll see the number of times you have visited the browser. Osvežite stran. Število ogledov bi se zdaj moralo povečati za 1.

[![Image: Calling the Docker Compose application again](https://www.ionos.com/sl-si/digitalguide/fileadmin/_processed_/7/8/csm_docker-compose-hit-counter-updated_58c6be39f6.webp "Calling the Docker Compose application again")](https://www.ionos.com/sl-si/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-updated.png) The number of visits increased by 1. Uporabite naslednje za ustavitev programa:

```shell
$ docker compose down
```

Če želite ustaviti delovanje aplikacije, v terminalu preprosto vtipkajte `Ctrl` + `C`.

### Korak 5: Dodajte vezavo

Če želite dodati **vezano vpetje** za spletno storitev, lahko to storite v *datoteki docker-compose.yml*.

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

V razdelku **»Volumes«** določimo, da se trenutna projektna mapa priključi na imenik */code* znotraj kontejnerja. To omogoča nemoteno spreminjanje kode, ne da bi bilo treba ponovno ustvariti sliko. Spremenljivka `FLASK_DEBUG` naroča `flask run`, naj deluje v razvojnem načinu.

### Korak 6: Ponovna sestava in zagon aplikacije

V terminalu vnesite naslednji ukaz, da ponovno ustvarite datoteko Compose:

```shell
docker compose up
```

### 7. korak: Posodobi aplikacijo

Sedaj, ko za svojo aplikacijo uporabljate vezavo, lahko spreminjate kodo in spremembe vidite takoj, brez da bi morali ponovno zgraditi sliko.

V datoteki ***app.py*** napišite nov test za dobrodošlico.

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

Osvežite brskalnik, da preverite, ali so bile spremembe upoštevane.

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

Na voljo je `--help` seznamov možnosti za ukaze Docker Compose:

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

Če želite Docker Compose zagnati v ozadju, lahko dodate argument `-d`:

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

Z ukazom `down` odstranite vse kontejnerje. Možnost `--volumes` izbriše prostore, ki jih uporablja kontejner Redis.

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

Tip Če želite začeti uporabljati Docker, si oglejte naš [vodnik po Dockerju](https://www.ionos.com/sl-si/digitalguide/streznik/nastavitve/vodnik-po-dockerju-namestitev-in-prvi-koraki/) in pregled ukazov Dockerja.


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/streznik/nastavitve/vodnik-po-docker-compose/](https://www.ionos.com/sl-si/digitalguide/streznik/nastavitve/vodnik-po-docker-compose/) for AI/LLM consumption.