Konténerek ========== Futtatás konténerben -------------------- Az operációs rendszerek 2 kurzuson már volt szó konténerekről, az ott tanultak alapján építsünk fel egy konténert egy egyszerű Python alkalmazással. A program a test.py legyen. Készítsünk egy batch programot is a konténer alapvető kezeléséhez. test.py .. code-block:: console print ("Hello") print ("Ez a program egy manuálisan létrehozott konténerben fut.") Dockerfile .. code-block:: console FROM python:3 WORKDIR / ADD test.py . CMD ["python3", "/test.py"] Run .. code-block:: console docker image list pause docker image rm dockertest:1 pause docker build -t dockertest:1 . pause docker run -it --rm dockertest:1 pause docker ps -a docker image list Konténer összefoglaló --------------------- Az alábbi cheatsheet tartalmazza a docker parancssori alkalmazásának legfontosabb eseteit. * docker version * docker run hello-world * docker run --name hw hello-world * docker ps # Futó konténerek listázása * docker ps -a # Összes konténer listázása * docker start vibrant_solomon * docker stop vibrant_solomon * docker kill vibrant_solomon * docker rm 6d7e1cec74fa # Egy konténer törlése * docker container prune # Összes leállított konténer törlése * docker image ls * docker image rm ubuntu:latest # Image törlése * docker rmi hello-world -f # Az összes Hello-world törlése * for I in $(docker image ls -q) ; do docker image rm $I ; done # Az összes image törlése * docker run busybox * docker run busybox ls * docker run --restart=always -it ubuntu bash * docker attach vibrant_solomon * docker run -it ubuntu bash # indítás és belépés * docker run -it ubuntu:16.04 bash Futtatás konténerben -------------------- .. code-block:: console dockerpy Dockerfile main.py run .. code-block:: console print ("Hello World!") Run .. code-block:: console #!/bin/bash docker build -t myapp . docker run -it --rm --name python-ex myapp .. code-block:: console FROM python:3 MAINTAINER Koczka Ferenc WORKDIR / ADD main.py . CMD ["python3", "./main.py"] Egyszerű php példa ------------------ .. code-block:: console php-webserver + src + index.php Dockerfile run src/index.php .. code-block:: console RUN docker-php-ext-install mysqli docker-compose.yaml .. code-block:: console version: "2" services: php: container_name: php build: php ports: - "8080:8080" command: "php -S 0.0.0.0:8080 -t /var/www/html" volumes: - type: bind source: src target: /var/www/html mysql: container_name: mysql image: mysql:8.0 ports: - "3306:3306" volumes: - type: bind source: mysql target: /var/lib/mysql environment: MYSQL_USER: webdb MYSQL_PASSWORD: webdb MYSQL_DATABASE: webdb MYSQL_ROOT_PASSWORD: nagyonTitKosJelszo MYSQL_ROOT_HOST: "0.0.0.0/0" volumes: src: Run .. code-block:: console #!/bin/bash docker stop php docker rm php docker rm mysql for I in $(docker image ls -q) ; do docker image rm $I --force ; done docker image list docker ps -a docker compose up Feladatok: #. Ellenőrizd a konténerek működőképességét a http://localhost:8080 megtekintésével! Van a php-ben mysqli támogatás? #. Készíts egy programot az src könyvtárban, amely: a. Kapcsolódik a webdb adatbázishoz, hibaüzenetet ad, amennyiben ez sikertelen. b. Törli a users nevű táblát, amennyiben az létezik. c. Létrehozza az users nevű táblát id, név és születési idő mezőkkel. d. Beszúr három rekordot ebbe a táblába. e. Lekérdezi és megjeleníti ezeket abécé sorrendben. .. code-block:: console mySQL Demo "; $db = mysqli_connect("mysql","webdb","webdb","webdb"); if ( ! $db ) die ("Database connection error."); echo "Creating table.
"; $result = mysqli_query($db, " CREATE TABLE IF NOT EXISTS users ( id serial, name varchar(64), primary key(id) )"); if ( ! $result ) die ("Table creation error."); else echo ("Table has just been created.
"); for ( $i=0; $i"); else echo "Inserted: " . $names[$i] . ".
"; } $sql = "SELECT id, name FROM users ORDER BY id"; $result = mysqli_query($db, $sql); $c=1; if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo $c . ". id: " . $row["id"]. " - Name: " . $row["name"] . "
"; $c++; } } else { echo "There are no names in that table.
"; } mysqli_close($db); ?> Konténer feltöltése a DockerHubra --------------------------------- Az elkészült konténerek a DockerHub-ra felölthetők, melyhez először egy hozzáférést kell készíteni, makd be kell jelentkezni. Ezt követően létre kell hozni egy új repository-t a konténerünknek. Ez a bejelentkezési nevünk, mint namespace alatt jelenik majd meg. A repository lehet privát és nyilvános is. Egy példa a repository nevére: koczkaferenc/hello. A konténerünk most legyen nagyon egyszerű, egy pythonban írt helloworld. A :file:`dockerfile` tartalma: .. code-block:: console FROM python:latest RUN echo "print ('Hello')" >/hello.py CMD ["python3", "/hello.py"] Készítsük el a konténert a :command:`docker build -t hello:1 .` paranccsal, elindítani nem is szükséges. A konténer feltöltésének első lépése az összerendelés a repository nevével, amit a :command:`docker tag` paranccsal kell elvégezni. A példában a helyi konténer neve hello, amit a DockerHubon koczkaferenc/demo néven szeretnék elérhetővé tenni. .. code-block:: console docker tag hello:1 koczkaferenc/hello A feltöltéshez be kell jelentkeznünk: .. code-block:: console docker login username: password: A feltöltést az alábbi paranccsal végezhetjük el: .. code-block:: console docker push koczkaferenc/hello:1 A letöltést a már ismert paranccsal végezhetjük el: .. code-block:: console docker run koczkaferenc/hello:latest