← Back to blog

Kontejnerizirajte Python aplikaciju pomoću Dockera

Category
Kontejnerizirajte Python aplikaciju pomoću Dockera

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:

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 HTTPServer i tražimo handler iz standardne Python biblioteke, čime program ostaje jednostavan.

  • Funkcija run pokreće instancu HTTPserver.

  • Kao što argumenti server_address sugeriraju, 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 Dockerfile datoteka mora započeti direktivom FROM. U našem slučaju Python deklariramo kao bazu Docker slike.

  • Direktiva ENV SRC_DIR određuje lokaciju direktorija kontejnera.

  • Direktiva COPY kopira datoteke iz direktorija src u kojem se trenutačno nalazi Python poslužitelj.

  • Varijabla PYTHONBUFFERED=1 određuje da će Python ispis i zapise slati izravno na STDOUT. U suprotnom se zapisi ne bi slali u međuspremnik.

  • Direktiva CMD određ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 -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 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:

Sretno računalstvo!

Preslav Dobrev

Autor · CloudSigma

Komentari

Još nema komentara. Budite prvi.