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
print ("Hello")
print ("Ez a program egy manuálisan létrehozott konténerben fut.")
Dockerfile
FROM python:3
WORKDIR /
ADD test.py .
CMD ["python3", "/test.py"]
Run
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¶
dockerpy
Dockerfile
main.py
run
print ("Hello World!")
Run
#!/bin/bash
docker build -t myapp .
docker run -it --rm --name python-ex myapp
FROM python:3
MAINTAINER Koczka Ferenc <koczka.ferenc@uni-eszterhazy.hu>
WORKDIR /
ADD main.py .
CMD ["python3", "./main.py"]
Egyszerű php példa¶
php-webserver
+ src
+ index.php
Dockerfile
run
src/index.php
<?php phpinfo();
Dockerfile
FROM php:latest
RUN mkdir webroot
WORKDIR webroot
ADD src/ .
EXPOSE 8080
CMD [ "php", "-S", "0.0.0.0:8080" ]
Run
#!/bin/bash
docker build -t phpwebserver .
docker run -p 8080:8080 -it --rm --name ws phpwebserver
Egyszerű php példa¶
php-webserver
+ src
+ index.php
docker-compose.yaml
run
src/index.php
<?php phpinfo();
docker-compose.yaml
version: "3.0"
services:
php:
container_name: php
image: php:8.1
ports:
- 8080:80
command: php -S 0.0.0.0:80 -t /var/www/html
volumes:
- type: bind
source: ./src
target: /var/www/html
volumes:
src:
Run
#!/bin/bash
docker stop php
docker rm php
for I in $(docker image ls -q) ; do docker image rm $I --force ; done
docker-compose up
Php-MySql¶
php-webserver
+ src
+ index.php
+ php
+ Dockerfile
+ mysql
docker-compose.yaml
run
php/Dockerfile
FROM php:8.1
MAINTAINER Koczka Ferenc <koczka.ferenc@uni-eszterhazy.hu>
RUN docker-php-ext-install mysqli
docker-compose.yaml
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
#!/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:
Kapcsolódik a webdb adatbázishoz, hibaüzenetet ad, amennyiben ez sikertelen.
Törli a users nevű táblát, amennyiben az létezik.
Létrehozza az users nevű táblát id, név és születési idő mezőkkel.
Beszúr három rekordot ebbe a táblába.
Lekérdezi és megjeleníti ezeket abécé sorrendben.
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>mySQL Demo</title>
</head>
<body>
<?php
$names=["Kiss Lajos","Szabó Aladár", "Szeleczki János"];
echo "Connecting to the mySql Server.<br>";
$db = mysqli_connect("mysql","webdb","webdb","webdb");
if ( ! $db ) die ("Database connection error.");
echo "Creating table.<br>";
$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.<br>");
for ( $i=0; $i<sizeof($names); $i++ ) {
$result = mysqli_query($db, "
INSERT INTO users (name) VALUES ('" . $names[$i] . "')");
if ( ! $result )
die ("Data insertion error.<br>");
else
echo "Inserted: " . $names[$i] . ".<br>";
}
$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"] . "<br>";
$c++;
}
} else {
echo "There are no names in that table.<br>";
}
mysqli_close($db);
?>
</body>
</html>
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 dockerfile
tartalma:
FROM python:latest
RUN echo "print ('Hello')" >/hello.py
CMD ["python3", "/hello.py"]
Készítsük el a konténert a 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 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.
docker tag hello:1 koczkaferenc/hello
A feltöltéshez be kell jelentkeznünk:
docker login
username:
password:
A feltöltést az alábbi paranccsal végezhetjük el:
docker push koczkaferenc/hello:1
A letöltést a már ismert paranccsal végezhetjük el:
docker run koczkaferenc/hello:latest