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.
Tutustu oppaisiimme ja lue, miten Docker Compose asennetaan eri käyttöjärjestelmille:
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.
$ mkdir composedemoshellSiirry kyseiseen kansioon.
$ cd composedemoshellLuo tähän kansioon tiedosto app.py ja lisää siihen seuraava koodi:
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)pythonTä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:
flask
redisplaintextVaihe 2: Määritä Dockerfile
Dockerfile- tiedostoa käytetään Docker-kuvan luomiseen. Siinä määritellään kaikki Python-sovelluksen tarvitsemat riippuvuudet.
# 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"]shellKä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”.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlVerkkopalvelu 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.
docker compose upshellAvaa selaimessasi osoite http://localhost:8000. Voit myös kirjoittaa osoitteen http://127.0.0.1:8000.
Näet seuraavan viestin:

Päivitä sivu. Katselukertojen määrän pitäisi nyt olla kasvanut yhdellä.

Sulje sovellus seuraavasti:
$ docker compose downshellVoit 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.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yaml”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:
docker compose upshellVaihe 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.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonPäivitä selain tarkistaaksesi, ovatko muutokset tulleet voimaan.

Vaihe 8: muut komennot
Kohdassa --help luetellaan käytettävissä olevat Docker Compose -komennot:
docker compose --helpshellJos haluat suorittaa Docker Compose -komennon taustalla, voit lisätä argumentin -d:
docker compose up -dshellKäytä down poistaaksesi kaikki kontit. Komento --volumes poistaa Redis-kontin käyttämät levyt.
docker compose down --volumesshell