← Back to blog

Python-alkalmazás konténerizálása Dockerrel

Category
Python-alkalmazás konténerizálása Dockerrel

Docker is a free and open-source solution for developing, deploying, and managing apps in lightweight, OS-level virtualization. In this guide, we will demonstrate creating a Python app within a Docker container.

Előfeltételek

Az útmutatóban bemutatott lépések végrehajtásához a következő összetevőkre lesz szüksége:

Docker-konténerek

Ha különböző programokat ugyanabban a környezetben futtatunk, a dolgok elromolhatnak, és el is fognak romlani. Minél több programot ad hozzá, annál instabilabbá válik. Ez az átlagos felhasználók számára nem feltétlenül nagy probléma. Kritikus fontosságú alkalmazások esetén azonban komoly következményei lehetnek.

Minél több alkalmazás kerül be a rendszerbe, annál nagyobb lesz a támadási felület. Egyetlen kompromittált alkalmazás könnyen az egész rendszer összeomlásához vezethet.

E problémák megoldására Docker-konténereket használhatunk szoftverszintű sandboxoláshoz:

  • A konténeren belüli alkalmazások korlátozott hozzáféréssel rendelkeznek a fájlokhoz.

  • A konténerizált alkalmazások nem látják a rendszerben futó többi folyamatot.

  • A konténerhez meghatározott mennyiségű hardvererőforrás rendelhető.

  • A konténer hálózati portjai alapértelmezés szerint nincsenek kitéve kívülre.

  • Szinte bármi következetes csomagolása helyi és éles környezetek között.

Bemutatásként egy egyszerű Python-kiszolgálót fogunk létrehozni egy Docker-konténerben, a konténert lemezképpé alakítjuk, majd a lemezképet egy teszt jellegű éles környezetben telepítjük.

1. lépés – A fájlrendszer konfigurálása

A projekt tárolásához először létrehozunk egy dedikált könyvtárat:

mkdir -pv python-server-container/
cd !$

A könyvtáron belül hozzon létre egy src alkönyvtárat a kód tárolásához:

mkdir -pv src/

2. lépés – A Python-kiszolgáló elkészítése

Ebben a lépésben létrehozunk egy egyszerű HTTP-kiszolgálót Pythonban. Hozza létre a server.py fájlt:

touch server.py

Nyissa meg egy szövegszerkesztőben:

nano server.py

Adja meg a következő Python-kódot:

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()

Itt:

  • Az HTTPServer osztályt használjuk, és egy kezelőt kérünk a szabványos Python-könyvtárból, így a program egyszerű marad.

  • A run függvény elindítja a HTTPserver egy példányát.

  • Ahogy a server_address argumentumai is jelzik, a kiszolgáló a 8080-as porton figyel minden bejövő kapcsolatra.

Most ellenőrizzük, hogy a kiszolgáló a vártnak megfelelően működik-e. Indítsa el a kiszolgálót:

python3 server.py

Egy új terminálból a curl segítségével küldhetünk kérést a kiszolgálónak:

curl -iv localhost:8080

Alternatív megoldásként a hivatkozást webböngészőben is megnyithatja:

http://localhost:8080

3. lépés – Dockerfile létrehozása

A Dockerfile tartalmazza a Docker-lemezkép létrehozásához szükséges utasításokat. A fájlban szereplő utasítások egymás után hajtódnak végre. Tudjon meg többet a Dockerfile használatáról.

Hozzon létre egy új Dockerfile fájlt a projektünkhöz:

touch Dockerfile

Most beírjuk a szükséges kódot. Nyissa meg egy szövegszerkesztőben:

nano Dockerfile

Adja meg a következő kódot:

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"]

Itt:

  • Minden Dockerfile fájlnak a FROM direktívával kell kezdődnie. Esetünkben a Pythont adjuk meg a Docker-lemezkép alapjaként.

  • Az ENV SRC_DIR direktíva a konténerkönyvtár helyét adja meg.

  • A COPY direktíva átmásolja a fájlokat abból az src könyvtárból, amely jelenleg a Python-kiszolgálót tartalmazza.

  • A PYTHONBUFFERED=1 változó megadja, hogy a Python a kimenetet és a naplókat közvetlenül az STDOUT felé írja. Ellenkező esetben a naplók nem kerülnének pufferbe.

  • A CMD direktíva egy alapértelmezett parancsot határoz meg, amely a konténer futtatásakor végrehajtódik. Ebben az esetben ezt a direktívát a Python-kiszolgálónk elindítására használjuk.

4. lépés – Docker-lemezkép létrehozása

Miután a Dockerfile elkészült, létrehozhatjuk a lemezképet. Futtassa a következő Docker-parancsot a folyamat indításához:

docker build . -t python_server

Itt:

  • A -t jelzővel a Docker-lemezképet python_server névvel címkézzük meg.

  • A Docker letölti az összes szükséges összetevőt, és egy lemezképpé egyesíti őket.

5. lépés – A lemezkép futtatása

A lemezkép készen áll a telepítésre. A következő paranccsal futtathatjuk:

docker run -p 8080:8080 python_server

Itt a -p jelző segítségével továbbítjuk a 8080-as portot a helyi gépről a Docker-lemezkép felé.

Könnyen ellenőrizhetjük, hogy a kiszolgáló működik-e a curl használatával:

curl -iv localhost:8080

6. lépés – A kiszolgáló leállítása

A terminálban nyomja meg a “Ctrl + C” billentyűkombinációt a Docker-folyamat leállításához:

7. lépés – A Docker-lemezkép exportálása és importálása

Most már rendelkezünk egy működő Docker-lemezképpel, amely a Python-kiszolgálónkat futtatja. A Docker exportálási és importálási funkcióinak segítségével bármely más rendszerre átmigrálhatjuk.

Először ellenőrizze az aktuális rendszerben található Docker-lemezképek listáját:

docker images

A célunk az imént létrehozott python_server Docker-lemezkép. A következő parancs TAR-archívumként exportálja:

docker save python_server:latest > python_server.tar

Miután átvitte a python_server.tar fájlt a célgépre, a következő paranccsal importálhatja a Docker-lemezképet:

docker load < python_server.tar

Záró gondolatok

Ebben az útmutatóban bemutattuk, hogyan hozhat létre Docker-lemezképet egy Python-alkalmazásból. Létrehoztunk egy egyszerű Python webszervert, majd Docker-lemezképet készítettünk belőle. A Docker-lemezkép mostantól bármilyen környezetben telepíthető, és következetes működés várható tőle.

Szeretne többet megtudni a Dockerről? Tekintse meg a következő útmutatókat:

Sikeres munkát!

Preslav Dobrev

Szerző · CloudSigma

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.