# Kuinka käyttää Docker Composea monikonttisovelluksissa

Compose helpottaa sovellusten skaalausta ja käyttöönottoa Dockerissa automatisoimalla **konttien hallinnan**. Oppaassamme käsitellään perusteellisesti Docker Compose -työkalun asennusta ja käyttöä, jotta voit tehostaa sovellusten käyttöönottoprosessia.

## Mikä on Docker Compose?

Docker Composea käytetään sovellusten hallintaan ja konttikehityksen tehostamiseen. Määritykset määritellään yhdessä YAML-tiedostossa, mikä helpottaa sovellusten rakentamista ja skaalaamista. Docker Composea käytetään usein paikallisen ympäristön määrittämiseen. Se voi kuitenkin olla myös osa **jatkuvan integroinnin ja jatkuvan toimituksen (CI/CD) työnkulkua**. Kehittäjät voivat määrittää tietyn konttiversion testausta tai tiettyjä prosessivaiheita varten. Tämä helpottaa ongelmien tunnistamista ja virheiden korjaamista ennen sovelluksen siirtämistä tuotantoon.

## Docker Compose -vaatimukset

**Konttien hallintaan** tarvitset sekä Docker Engine -ohjelmiston että Docker Compose -työkalun. Varmista, että järjestelmässäsi on asennettuna jokin seuraavista:

- **Docker Engine ja Docker Compose**: Voidaan asentaa erillisinä suoritustiedostoina.
- **Docker Desktop**: Kehitysympäristö, jossa on graafinen käyttöliittymä ja joka sisältää Docker Engine- ja Docker Compose -ohjelmistot.

Vinkki Tutustu oppaisiimme ja lue, miten Docker Compose asennetaan eri käyttöjärjestelmille:

- [Docker Composen asentaminen Ubuntuun](https://www.ionos.com/fi-fi/digitalguide/palvelin/asetukset/docker-compose-ubuntussa/)
- [Docker Composen asentaminen macOS:iin](https://www.ionos.com/fi-fi/digitalguide/palvelin/asetukset/docker-compose-macissa/)
- [Docker Composen asentaminen Windowsiin](https://www.ionos.com/fi-fi/digitalguide/palvelin/asetukset/asenna-docker-compose-windows-tietokoneelle/)

## Vaiheittainen opas Docker Composen käyttöön

Seuraavassa esittelemme, miten Docker Composea käytetään yksinkertaisen **Python-verkkosovelluksen** kanssa, jossa hyödynnetään kävijälaskuria. Tätä varten käytämme Pythonin Flask-kehystä ja Redis-muistitietokantaa. Sinun ei tarvitse asentaa Pythonia tai Redisiä, sillä ne toimitetaan Docker-kuvina.

### Vaihe 1: Luo projektitiedostot

Käynnistä komentorivi ja luo projektiin uusi kansio.

```shell
$ mkdir composedemo
```

Siirry kyseiseen kansioon.

```shell
$ cd composedemo
```

Luo tähän kansioon tiedosto *app.py* ja lisää siihen seuraava koodi:

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

Tässä kokoonpanossa käytämme isäntänimeksi `redis` ja oletusporttina `6379` yhteyden muodostamiseen Redis-palveluun. Lisäksi määritämme, että `get_hit_count()` tulee yrittää muodostaa yhteys palveluun useita kertoja. Tätä suositellaan tilanteissa, joissa Redis ei välttämättä ole heti käytettävissä sovelluksen käynnistyessä tai jos yhteysongelmia esiintyy ajoittain sovelluksen ollessa käynnissä.

Luo tiedosto *requirements.txt*, joka sisältää riippuvuudet:

```plaintext
flask
redis
```

### Vaihe 2: Määritä Dockerfile

**Dockerfile-** tiedostoa käytetään Docker-kuvan luomiseen. Siinä määritellään kaikki Python-sovelluksen tarvitsemat riippuvuudet.

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

Käskemme Dockeria käyttämään Python 3.7 -kuvaa. Lisäksi määritämme tarvittavat ympäristömuuttujat **flask-komentoa** varten. Komennolla `apk add` asennamme välttämättömät riippuvuudet, kuten gcc:n. Jotta kontti voi kuunnella porttia 5000, määritämme `EXPOSE`. Komennolla `COPY` siirrämme nykyisen kansion sisällön kontin sisällä olevaan työkansioon */code*. Lopuksi valitsemme kontin oletuskomennoksi `flask run`.

Tarkista, että Dockerfile-tiedosto on tallennettu ilman tiedostotunnistetta, sillä jotkut tekstieditorit lisäävät siihen automaattisesti *.txt* -päätteen.

### Vaihe 3: Luo YAML-tiedosto

Määritämme tiedostossa ***docker-compose.yml*** palvelut ”redis” ja ”web”.

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

Verkkopalvelu on rakennettu Dockerfile-tiedoston avulla luodun Docker-kuvan pohjalta. Se yhdistää kontin ja isäntäkoneen porttiin 8000, kun taas **Flask-verkkopalvelin** toimii portissa 5000. Redis-kuva puolestaan ladataan suoraan virallisesta Docker Hubista.

### Vaihe 4: Suorita sovellus Compose-ympäristössä

Käynnistä sovellus projektikansiosta.

```shell
docker compose up
```

Avaa selaimessasi osoite *http://localhost:8000*. Voit myös kirjoittaa osoitteen *http://127.0.0.1:8000*.

Näet seuraavan viestin:

[![Kuva: Docker Compose Application: Output the number of visits in the browser](https://www.ionos.com/fi-fi/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/fi-fi/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter.png) You’ll see the number of times you have visited the browser. Päivitä sivu. Katselukertojen määrän pitäisi nyt olla kasvanut yhdellä.

[![Kuva: Calling the Docker Compose application again](https://www.ionos.com/fi-fi/digitalguide/fileadmin/_processed_/7/8/csm_docker-compose-hit-counter-updated_58c6be39f6.webp "Calling the Docker Compose application again")](https://www.ionos.com/fi-fi/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-updated.png) The number of visits increased by 1. Sulje sovellus seuraavasti:

```shell
$ docker compose down
```

Voit lopettaa sovelluksen toiminnan painamalla terminaalissa yksinkertaisesti `Ctrl` + `C`.

### Vaihe 5: Lisää bind-kiinnitys

Jos haluat lisätä web-palvelulle **bind-kiinnityksen**, voit tehdä sen tiedostossa *docker-compose.yml*.

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

**”Volumes”-osiossa** määritämme, että nykyisen projektikansion liitetään kontin sisällä olevaan */code-hakemistoon*. Tämä mahdollistaa saumattomat koodimuutokset ilman, että kuvaa tarvitsee luoda uudelleen. Muuttuja `FLASK_DEBUG` ohjaa `flask run` toimimaan kehitystilassa.

### Vaihe 6: Kokoa sovellus uudelleen ja suorita se

Kirjoita seuraava komento terminaaliin Compose-tiedoston uudelleenrakentamiseksi:

```shell
docker compose up
```

### Vaihe 7: Päivitä sovellus

Nyt kun käytät sovelluksessasi bind-mountia, voit muokata koodiasi ja nähdä muutokset automaattisesti ilman, että kuvan tarvitsee koota uudelleen.

Kirjoita uusi tervetulotesti tiedostoon ***app.py***.

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

Päivitä selain tarkistaaksesi, ovatko muutokset tulleet voimaan.

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

Kohdassa `--help` luetellaan käytettävissä olevat Docker Compose -komennot:

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

Jos haluat suorittaa Docker Compose -komennon taustalla, voit lisätä argumentin `-d`:

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

Käytä `down` poistaaksesi kaikki kontit. Komento `--volumes` poistaa Redis-kontin käyttämät levyt.

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

Vinkki Jos haluat tutustua Docker-ohjelmistoon, tutustu [Docker-oppa](https://www.ionos.com/fi-fi/digitalguide/palvelin/asetukset/docker-opas-asennus-ja-ensimmaeiset-askeleet/) aseemme ja Docker-komentojen yleiskatsaukseen.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/palvelin/asetukset/docker-compose-opas/](https://www.ionos.com/fi-fi/digitalguide/palvelin/asetukset/docker-compose-opas/) for AI/LLM consumption.