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.
Uzziniet, kā instalēt Docker Compose dažādās operētājsistēmās, izmantojot mūsu apmācības:
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.
$ mkdir composedemoshellPāriet uz direktoriju.
$ cd composedemoshellIzveidojiet šajā mapē failu app.py un pievienojiet tam šādu kodu:
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ū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:
flask
redisplaintext2. solis: Dockerfile konfigurēšana
Dockerfile tiek izmantots Docker attēlam. Tajā ir norādītas visas atkarības, kas nepieciešamas Python lietojumprogrammai.
# 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"]shellMē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“.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlTī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.
docker compose upshellAtveriet 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:

Atjaunojiet lapu. Skatījumu skaitam tagad vajadzētu būt palielinājušamies par 1.

Pārtrauciet lietojumprogrammas darbību, izmantojot:
$ docker compose downshellLai 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.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlSadaļā „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:
docker compose upshell7. 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.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonAtjauniniet pārlūku, lai pārbaudītu, vai izmaiņas ir stājušās spēkā.

8. solis: citas komandas
--help pieejamās Docker Compose komandu opcijas:
docker compose --helpshellLai palaistu Docker Compose fonā, varat pievienot argumentu -d:
docker compose up -dshellIzmantojiet down, lai izdzēstu visus konteinerus. Komanda --volumes dzēš sējumus, kurus izmanto Redis konteiners.
docker compose down --volumesshell