Preskoči na sadržaj

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

Docker Linux interfaces bg right:45% 95%


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

Docker Linux interfaces bg right 60%


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ć