Kuidas kasutada Docker Compose'i mitme konteineriga rakenduste jaoks
Compose lihtsustab rakenduste skaleerimist ja kasutuselevõttu Dockeris, automatiseerides konteinerite haldamise. Meie juhendis käsitletakse põhjalikult Docker Compose’i seadistamist ja kasutamist, et muuta teie rakenduste kasutuselevõtu protsess sujuvamaks.
Mis on Docker Compose?
Docker Compose’i kasutatakse rakenduste haldamiseks ja konteineriarenduse tõhususe suurendamiseks. Konfiguratsioonid määratletakse ühes YAML-failis, mis muudab rakenduste koostamise ja skaleerimise lihtsaks. Docker Compose’i kasutatakse sageli kohaliku keskkonna seadistamiseks. Samas võib see olla ka osa pideva integreerimise ja pideva väljastamise (CI/CD) töövoost. Arendajad saavad määratleda konkreetse konteineriversiooni testimiseks või konkreetseteks torujuhtme etappideks. See lihtsustab probleemide tuvastamist ja vigade parandamist enne rakenduse tootmisse viimist.
Docker Compose’i nõuded
Konteinerite koordineerimiseks on vaja nii Docker Engine’i kui ka Docker Compose’i. Veendu, et su süsteemis on installitud üks järgmistest:
- Docker Engine ja Docker Compose: neid saab installida eraldi käivitatavate failidena.
- Docker Desktop: graafilise kasutajaliidesega arenduskeskkond, mis sisaldab Docker Engine’i ja Docker Compose’i.
Vaata meie juhenditest, kuidas installida Docker Compose erinevatele operatsioonisüsteemidele:
Juhend Docker Compose’i kasutamiseks samm-sammult
Järgnevalt näitame, kuidas kasutada Docker Compose’i lihtsa Python-veebirakenduse puhul, mis kasutab külastuste loendurit. Selleks kasutame Python Flask-raamistikku ja Redis-mälupõhist andmebaasi. Teil pole vaja Pythoni ega Redist installida, kuna need on saadaval Docker-piltidena.
1. samm: Projekti failide loomine
Käivita terminal ja loo projektile uus kaust.
$ mkdir composedemoshellMine sellesse kataloogi.
$ cd composedemoshellLoo 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)pythonMeie seadistuses kasutame Redis-teenusega ühenduse loomiseks hostinime redis ja vaikimisi porti 6379. Lisaks määrame, et funktsioon get_hit_count() peaks teenusega mitu korda ühendust proovima. Seda soovitatakse juhul, kui Redis ei pruugi rakenduse käivitamisel kohe kättesaadav olla või kui töötamise ajal võivad esineda ajutised ühendusprobleemid.
Loo fail requirements.txt, milles on kirjas sõltuvused:
flask
redisplaintext2. samm: Dockerfile’i seadistamine
Dockerfile’i kasutatakse Docker-pildi loomiseks. See määrab kindlaks kõik sõltuvused, 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"]shellMe anname Dockerile käsu kasutada Python 3.7-i kujutist. Lisaks seadistame Flask-käsu jaoks vajalikud keskkonnamuutujad. apk add abil installime olulised sõltuvused, sealhulgas gcc. Et konteiner saaks jälgida porti 5000, määrame EXPOSE. COPY abil kopeerime praeguse kausta sisu konteineri töökausta /code. Lõpuks valime konteineri vaikimisi käskuks flask run.
Veendu, et Dockerfile salvestati ilma faililaiendita, kuna mõned tekstiredaktorid lisavad automaatselt laiendi .txt.
3. samm: Loo YAML-fail
Failis docker-compose.yml seadistame teenused „redis“ ja „web“.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlVeebiteenus on loodud Dockerfile’i abil loodud Docker-pildi abil. See seob konteineri ja host-arvuti pordiga 8000, samal ajal kui Flask-veebiserver töötab pordil 5000. Redis-pilt aga laaditakse alla otse ametlikust Docker Hubist.
4. samm: Käivita rakendus Compose’iga
Käivita rakendus oma projektikausta kaudu.
docker compose upshellAva oma brauseris aadress http://localhost:8000. Võid sisestada ka aadressi http://127.0.0.1:8000.
Te peaksite nägema järgmist teadet:

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

Sulge rakendus järgmiselt:
$ docker compose downshellRakenduse töötamise lõpetamiseks piisab, kui vajutad terminalis klahvikombinatsiooni Ctrl + C.
5. samm: Lisa sümboliline mount
Kui soovid veebiteenusele 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"yamlJaotises „Volumes“ määrame praeguse projektikausta ühendamise konteineri sees asuva kataloogiga /code. See võimaldab koodi sujuvalt muuta, ilma et oleks vaja pilti uuesti luua. Muutuja FLASK_DEBUG annab käsu flask run töötada arendusrežiimis.
6. samm: Rakenduse uuesti koostamine ja käivitamine
Sisesta terminali järgmine käsk, et Compose-fail uuesti koostada:
docker compose upshell7. samm: Rakenduse uuendamine
Nüüd, kui kasutate oma rakenduses bind-mounti, saate muuta koodi ja näha muudatusi automaatselt, ilma et peaksite pilti uuesti ehitama.
Kirjuta faili app.py uus tervitustest.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonVärskenda brauserit, et kontrollida, kas muudatused on rakendunud.

8. samm: muud käsud
--help valikuvõimalust loetlevad Docker Compose’i käsud:
docker compose --helpshellEt käivitada Docker Compose taustal, võid lisada argumendi -d:
docker compose up -dshellKasuta down, et eemaldada kõik konteinerid. Käsk --volumes kustutab Redis-konteineri poolt kasutatavad mahud.
docker compose down --volumesshell