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“.
Mūsų pamokose sužinosite, kaip įdiegti „Docker Compose“ įvairiose operacinėse sistemose:
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.
$ mkdir composedemoshellPereikite į tą katalogą.
$ cd composedemoshellŠiame aplanke sukurkite failą „app.py“ ir į jį įterpkite šį kodą:
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)pythonMū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:
flask
redisplaintext2 žingsnis: Sukurkite „Dockerfile“ failą
„Dockerfile“ naudojamas Docker atvaizdui sukurti. Jame nurodomos visos Python programai reikalingos priklausomybės.
# 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"]shellNurodome „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“.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlŠ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.
docker compose upshellNarš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ą:

Atnaujinkite puslapį. Peržiūrų skaičius dabar turėtų būti padidėjęs 1.

Uždarykite programą naudodami:
$ docker compose downshellNorė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“.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlSkyriuje „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ą:
docker compose upshell7 ž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“.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonAtnaujinkite naršyklę, kad patikrintumėte, ar pakeitimai įsigaliojo.

8 žingsnis: kitos komandos
--help parinkčių sąraše pateikiamos „Docker Compose“ komandos:
docker compose --helpshellNorėdami paleisti „Docker Compose“ fone, galite nurodyti argumentą -d “:
docker compose up -dshellNaudokite down, kad pašalintumėte visus konteinerius. Komanda --volumes ištrina „Redis“ konteineriui naudojamus tomus.
docker compose down --volumesshell