Docker je besplatno rješenje otvorenog koda za razvoj, implementaciju i upravljanje aplikacijama uz laganu virtualizaciju na razini operacijskog sustava. U ovom vodiču prikazat ćemo izradu Python aplikacije unutar Docker kontejnera.
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 instalaciji Dockera na Ubuntu.
Docker kontejneri
Kada se razni programi pokreću unutar istog okruženja, stvari se mogu (i hoće) pokvariti. Što više programa dodate, okruženje postaje nestabilnije. Za prosječne korisnike to možda nije velik problem. Međutim, kada je riječ o aplikacijama kritičnima za poslovanje, posljedice mogu biti ozbiljne.
Što se više aplikacija uvede u sustav, to je veća površina napada. Jedna kompromitirana aplikacija može lako dovesti do pada cijelog sustava.
Za rješavanje tih problema možemo koristiti Docker kontejnere za izolaciju na razini softvera:
Aplikacije unutar kontejnera imat će ograničen pristup datotekama.
Kontejnerizirane aplikacije ne mogu vidjeti druge procese koji se izvode u sustavu.
Kontejneru se može dodijeliti određena količina hardverskih resursa.
Mrežni portovi kontejnera nisu izloženi prema van.
Dosljedno pakiranje gotovo bilo čega u lokalnim i produkcijskim okruženjima.
Za demonstraciju izgradit ćemo jednostavan Python poslužitelj unutar Docker kontejnera, pretvoriti kontejner u sliku i implementirati sliku unutar lažnog produkcijskog okruženja.
Korak 1 – Konfiguracija datotečnog sustava
Za smještaj projekta najprije ćemo izraditi namjenski direktorij:
mkdir -pv python-server-container/
cd !$
Unutar direktorija izradite poddirektorij src za pohranu našeg koda:
mkdir -pv src/

Korak 2 – Izrada Python poslužitelja
U ovom koraku izradit ćemo jednostavan HTTP poslužitelj u Pythonu. Izradite datoteku server.py:
touch server.py
Otvorite je u uređivaču teksta:
nano server.py

Unesite sljedeći Python kod:
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
HTTPServeri tražimo handler iz standardne Python biblioteke, čime program ostaje jednostavan.Funkcija
runpokreće instancuHTTPserver.Kao što argumenti
server_addresssugeriraju, poslužitelj će slušati svaku dolaznu vezu na portu 8080.
Sada ćemo provjeriti radi li poslužitelj očekivano. Pokrenite poslužitelj:
python3 server.py
![]()
Iz novog terminala možemo koristiti curl za slanje zahtjeva poslužitelju:
curl -iv localhost:8080

Alternativno, poveznici možete pristupiti u web pregledniku:
http://localhost:8080

Korak 3 – Izrada Dockerfile datoteke
Dockerfile sadrži potrebne upute za generiranje Docker slike. Upute u datoteci izvršavaju se redom. Saznajte više o Dockerfile.
Izradite novu Dockerfile datoteku za naš projekt:
touch Dockerfile
Sada ćemo u nju dodati potreban kod. Otvorite je u uređivaču teksta:
nano Dockerfile
Unesite sljedeći kod:
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:
Svaka
Dockerfiledatoteka mora započeti direktivomFROM. U našem slučaju Python deklariramo kao bazu Docker slike.Direktiva
ENV SRC_DIRodređuje lokaciju direktorija kontejnera.Direktiva
COPYkopira datoteke iz direktorijasrcu kojem se trenutačno nalazi Python poslužitelj.Varijabla
PYTHONBUFFERED=1određuje da će Python ispis i zapise slati izravno naSTDOUT. U suprotnom se zapisi ne bi slali u međuspremnik.Direktiva
CMDodređuje zadanu naredbu koja se pokreće pri izvršavanju kontejnera. U ovom slučaju direktivu koristimo za pokretanje našeg Python poslužitelja.
Korak 4 – Generiranje Docker slike
Kada je Dockerfile spreman, sada možemo izraditi sliku. Pokrenite sljedeću Docker naredbu za početak procesa:
docker build . -t python_server

Ovdje:
Zastavica
-tkoristi se za označavanje naše Docker slike kaopython_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 sljedećom naredbom:
docker run -p 8080:8080 python_server

Ovdje prosljeđujemo port 8080 s lokalnog računala na Docker sliku pomoću zastavice -p.
Možemo jednostavno provjeriti radi li poslužitelj pomoću curl:
curl -iv localhost:8080


Korak 6 – Zaustavljanje poslužitelja
Iz terminala pritisnite “Ctrl + C” za zaustavljanje Docker procesa:

Korak 7 – Izvoz i uvoz Docker slike
Sada imamo funkcionalnu Docker sliku koja hosta 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 u trenutačnom sustavu:
docker images

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

Nakon prijenosa datoteke python_server.tar na ciljnu mašinu, upotrijebite sljedeću naredbu za uvoz Docker slike:
docker load < python_server.tar

Završne misli
U ovom vodiču prikazali smo izradu Docker slike iz Python aplikacije. Izradili smo jednostavan Python web-poslužitelj i od njega izgradili Docker sliku. Docker slika sada se može implementirati u bilo kojem okruženju uz očekivano dosljedno ponašanje.
Želite saznati više o Dockeru? Pogledajte sljedeće vodiče:
Izrada i implementacija Flask aplikacije pomoću Dockera na Ubuntu 20.04
Kako osigurati i skalirati Django aplikaciju pomoću Dockera, Nginxa i Let’s Encrypta
Kako implementirati WordPress pomoću Docker kontejnera na Ubuntu 20.04
Sretno računalstvo!

Komentari
Još nema komentara. Budite prvi.