Kontejnerizacija web aplikacija
doc. dr. sc. Vedran Miletić, vmiletic@inf.uniri.hr, vedran.miletic.net
Fakultet informatike i digitalnih tehnologija Sveučilišta u Rijeci, akademska 2021./2022. godina
Kontejnerizacija
Prema Wikipediji:
- virtualizacija na razini operacijskog sustava (engl. OS-level virtualization) je paradigma operacijskog sustava u kojoj jezgra omogućuje postojanje više izoliranih instanci korisničkog prostora
- s gledišta programa koji se u njima izvode mogu izgledati kao prava računala
- računalni program pokrenut na uobičajenom operativnom sustavu može vidjeti sve resurse (povezane uređaje, datoteke i mape, mrežne dionice, snagu procesora, mjerljive hardverske mogućnosti) tog računala
- programi koji se izvode u kontejneru mogu vidjeti samo sadržaj i uređaje dodijeljene kontejneru
Kontejnerizacijske tehnologije
- kontejneri (engl. containers) (LXC, Docker)
- zone (engl. zones) (Solaris/illumos)
- virtualni privatni poslužitelji (engl. virtual private servers) (OpenVZ)
- particije (engl. partitions)
- virtualna okruženja (engl. virtual enviroments) (virtualenv)
- virtualne jezgre (engl. virtual kernels) (DragonFly BSD)
- zatvori (engl. jails) (FreeBSD, chroot jail pod Linuxom)
Docker
Prema Wikipediji:
- skup proizvoda platforme kao usluge (PaaS) koji koriste virtualizaciju na razini OS-a za isporuku softvera u kontejnerima
- kontejneri su međusobno izolirani i donose vlastiti softver, knjižnice i konfiguracijske datoteke; mogu međusobno komunicirati kroz precizno definirane kanale
- svi kontejneri dijele usluge jedne jezgra OS-a pa koriste manje resursa od virtualnih strojeva
Primjeri Docker kontejnera
Svi navedeni su službeno podržane slike dostupne na Docker Hubu:
Kompozicije kontejnera
Docker Compose omogućuje konfiguriranje i pokretanje grupe kontejnera, njihovo međusobno povezivanje mrežom itd. Primjerice, možemo komponirati:
- Web poslužitelj
- Interpreter skriptnog jezika
- Balanser opterećenja
- Sustav za upravljanje (relacijskom) bazom podataka
- Sustav za predmemeoriju
Primjer kompozicije kontejnera
FROM python:3.10-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"]
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
Author: Vedran Miletić