Docker je besplatno rješenje otvorenog koda za razvoj, implementaciju i upravljanje aplikacijama u lakoj virtualizaciji na razini operacijskog sustava. U ovom vodiču demonstrirat ćemo stvaranje Python aplikacije unutar Docker spremnika.
Preduvjeti
Za izvođenje koraka prikazanih u ovom vodiču trebat će vam sljedeće komponente:
-
Linux sustav. Pogledajte konfiguriranje vlastitog Ubuntu VPS-a na CloudSigma.
-
Instalirana je i konfigurirana najnovija verzija Dockera. Saznajte više o instaliranju Dockera na Ubuntu.
Docker spremnici
Kada se izvode različiti programi unutar istog okruženja, stvari se mogu pokvariti (i pokvarit će se). Što više programa dodate, ono postaje nestabilnije. Za prosječne ljude to možda nije velika stvar. Međutim, kada se radi o kritičnim aplikacijama, može doći do ozbiljnih posljedica.
Što se više aplikacija uvede u sustav, to je veća površina za napad. Jedna kompromitirana aplikacija može lako dovesti do pada cijelog sustava.
Kako bismo riješili ove probleme, možemo koristiti Docker spremnike za izolaciju (sandboxing) na razini softvera:
-
Aplikacije unutar spremnika imat će ograničen pristup datotekama.
-
Kontejnerizirane aplikacije ne mogu vidjeti druge procese koji se izvode u sustavu.
-
Spremniku se može dodijeliti određena količina hardverskih resursa.
-
Mrežni portovi spremnika nisu izloženi izvana.
-
Dosljedno pakiranje gotovo svega u lokalnim i produkcijskim okruženjima.
Za demonstraciju ćemo izgraditi jednostavan Python poslužitelj unutar Docker spremnika, pretvoriti spremnik u sliku i implementirati sliku unutar lažnog produkcijskog okruženja.
Korak 1 – Konfiguracija datotečnog sustava
Za smještaj projekta najprije ćemo stvoriti namjenski direktorij:
|
1 |
mkdir -pv python-server-container/ |
|
1 |
cd !$ |
Unutar direktorija stvorite poddirektorij src za pohranu našeg koda:
|
1 |
mkdir -pv src/ |
Korak 2 – Izgradnja Python poslužitelja
U ovom koraku stvorit ćemo jednostavan HTTP poslužitelj u Pythonu. Stvorite datoteku server.py:
|
1 |
touch server.py |
Otvorite je u uređivaču teksta:
|
1 |
nano server.py |

Unesite sljedeći Python kod:
|
1 2 3 4 5 6 7 8 9 10 11 |
from http.server import HTTPServer, SimpleHTTPRequestHandler def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler): """server entrypoint""" server_address = ("0.0.0.0", 8080) httpd = server_class(server_address, handler_class) print("starting server...") httpd.serve_forever() if __name__ == "__main__": run() |

Ovdje,
-
Koristimo klasu HTTPServer i tražimo rukovatelj iz standardne Python knjižnice, čime program ostaje jednostavan.
-
Funkcija run pokreće instancu HTTPserver.
-
Kao što argumenti server_address sugeriraju, poslužitelj će slušati sve dolazne veze na portu 8080.
Sada ćemo provjeriti radi li poslužitelj kako se očekuje. Pokrenite poslužitelj:
|
1 |
python3 server.py |
![]()
Iz novog terminala možemo koristiti curl za slanje zahtjeva poslužitelju:
|
1 |
curl -iv localhost:8080 |

Alternativno, možete pristupiti poveznici u web pregledniku:
|
1 |
http://localhost:8080 |
Korak 3 – Stvaranje Dockerfile-a
Jedan Dockerfile sadrži potrebne upute za generiranje Docker slike. Upute u datoteci slijede se sekvencijalno. Saznajte više o Dockerfile.
Stvorite novi Dockerfile za naš projekt:
|
1 |
touch Dockerfile |
Sada ćemo u njega unijeti potreban kod. Otvorite ga u uređivaču teksta:
|
1 |
nano Dockerfile |
Unesite sljedeći kod:
|
1 2 3 4 5 6 7 8 9 |
FROM python:latest ENV SRC_DIR /usr/bin/src/test_server/src COPY src/* ${SRC_DIR}/ WORKDIR ${SRC_DIR} ENV PYTHONUNBUFFERED=1 CMD ["python", "server.py"] |
Ovdje,
-
Svaki Dockerfile mora započeti s FROM direktivom. U našem slučaju, deklariramo Python kao bazu Docker slike.
-
Direktiva ENV SRC_DIR određuje lokaciju direktorija spremnika.
-
Direktiva COPY kopira datoteke iz src direktorija koji trenutno sadrži Python poslužitelj.
-
Varijabla PYTHONBUFFERED=1 određuje da će Python ispisivati i bilježiti izlaz izravno u STDOUT. U suprotnom, zapisi se ne bi slali ni u jedan međuspremnik.
-
Direktiva CMD određuje zadanu naredbu koja se pokreće prilikom izvršavanja spremnika. U ovom slučaju koristimo direktivu za pokretanje našeg Python poslužitelja.
Korak 4 – Generiranje Docker slike
S Dockerfile spremnim, sada možemo izgraditi sliku. Pokrenite sljedeću Docker naredbu za početak procesa:
|
1 |
docker build . -t python_server |

Ovdje,
-
Zastavica -t koristi se za označavanje naše Docker slike kao python_server.
-
Docker će preuzeti sve potrebne komponente i spojiti ih u sliku.
Korak 5 – Izvršavanje slike
Slika je spremna za implementaciju. Možemo je izvršiti pomoću sljedeće naredbe:
|
1 |
docker run -p 8080:8080 python_server |

Ovdje prosljeđujemo priključak 8080 s lokalnog računala na Docker sliku pomoću -p zastavice.
Možemo lako provjeriti radi li poslužitelj pomoću curl:
|
1 |
curl -iv localhost:8080 |
Korak 6 – Zaustavljanje poslužitelja
U terminalu pritisnite “Ctrl + C” kako biste prekinuli Docker proces:

Korak 7 – Izvoz i uvoz Docker slike
Sada imamo funkcionalnu Docker sliku koja udomljuje naš Python poslužitelj. Uz pomoć Dockerovih značajki izvoza i uvoza, možemo je migrirati na bilo koji drugi sustav.
Najprije provjerite popis Docker slika na trenutnom sustavu:
|
1 |
docker images |

Naša meta je python_server Docker slika koju smo upravo stvorili. Sljedeća naredba izvest će je kao TAR arhivu:
|
1 |
docker save python_server:latest > python_server.tar |

Nakon prijenosa python_server.tar datoteke na ciljno računalo, upotrijebite sljedeću naredbu za uvoz Docker slike:
|
1 |
docker load < python_server.tar |
Završne misli
U ovom smo vodiču prikazali izgradnju Docker slike iz Python aplikacije. Stvorili smo jednostavan Python web poslužitelj i od njega izgradili Docker sliku. Docker slika se sada može implementirati u bilo koje okruženje uz očekivanje dosljednog ponašanja.
Želite li saznati više o Dockeru? Pogledajte sljedeće vodiče:
-
Izgradnja i implementacija Flask aplikacije s Dockerom na Ubuntu 20.04
-
Kako osigurati i skalirati Django aplikaciju s Dockerom, Nginxom i Let’s Encryptom
-
Kako implementirati WordPress s Docker spremnicima na Ubuntu 20.04
Sretno računanje!




Komentari
Još nema komentara. Budite prvi.