Tartalomjegyzék
Docker
- Szerző: Sallai András
- Copyright © 2021, Sallai András
- Szerkesztve: 2021, 2023, 2024
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
A Docker-ről
A Docker egy konténer szintű virtualizációs eszköz. Nem virtualizál teljes gépet, csak operációs rendszert.
A használata során szükség van egy lemezképre (image), amiből konténereket készítünk. A konténereket futtatjuk a lemezképből. A konténerek lehetnek ideiglenesek, amelyek addig léteznek, amíg futnak, vagy tartósak, leállítás után is megmaradnak.
Telepítés
Windowsra, Linuxra:
Linuxra is ajánlott a legújabb telepítése.
Telepítés saját csomagból Debian GNU/Linuxon:
apt install docker.io apt install docker-compose
Ha webhelyről telepítjük a Docker-t, a docker-compose parancs nem telepszik. Helyette egy a compose bővítményként (plugin) lesz jelen. Ezért így indítjuk:
docker compose up -d
Vegyük észre, hogy nincs kötőjel (-) a docker és a compose szó között.
Képfájlok
Elérhető Képfájlok keresése:
Elérhető képfájlok keresése a docker paranccsal:
docker search valami
Nézzük meg milyen képfájl van a gépünkön:
docker images
Kezdetben nincs képfájl.
A következő parancs letölt egy képfájlt:
docker pull debian:latest
Nézzük meg újra a képfájlokat:
docker images
Egy Ubuntu töltése:
docker pull ubuntu:14.04
Képfájl törlése:
docker rmi ubuntu:14.04
SQL szerver:
docker pull mcr.microsoft.com/mssql/server:2019-latest
Konténer indítása
Ideiglenes
A konténerek alapértelmezetten megmaradnak. Ha szeretnénk kilépés után törölni, használjuk a --rm parancsot.
docker run --rm -i -t debian:buster /bin/bash
docker run --rm -i -t debian:bullseye /bin/bash
docker run --rm -i -t debian:latest /bin/bash
Tartós
Összes konténer megjelenítése:
docker ps -a
Futó konténerek megjelenítése:
docker ps
Létező konténer indítása
docker start kontenernev
Leállítás:
docker stop kontenernev
Letöltés és futtatás:
docker run -i -t debian:latest /bin/bash
- -t terminált kérünk
- -i interaktív mód
Elnevezéssel:
docker run --name valami -i -t debian:latest /bin/bash
Konténer törlése:
docker rm 6b358caaab4d
Gépnév
Új konténer létrehozásakor:
docker run -it --rm -h gep1 debian
Hálózat
docker run --net net1 -h gépnév --ip 172.18.0.24 -it debian bash
- --net kapcsolódás hálózathoz
- --ip IPv4 cím megadása
- -h, --hostname gépnév megadása
- --add-host gép hozzáadása ehhez: /etc/hosts
Külön hálózat
Külön hálózat létrehozása:
docker network create --subnet=192.168.10.0/24 net2
Indítunk egy konténert a hálózatban:
docker run --net net2 -h gep1 --ip 192.168.10.11 -it debian bash
Csatlakozás egy géphez
docker attach gépnév
docker attach azonosító
Amit az egyik ír az egyik felületen az a másikon is látszik. Ha az egyik kilép az exit paranccsal a másik is kilépett.
Kilépés leállás nélkül
Ha csatlakoztunk egy ideiglenesen indított konténerhez --rm kapcsolóval, és munkánk befejeztével szeretnénk úgy kilépni, hogy ne álljon le a konténer, akkor használjuk a következő billentyűkombinációt:
Ctrl+p, Ctrl+q
Ajánlott indítás
Ajánott a --name használata.
docker run -it --rm -h gep1 --name gep1 debian
A --name kapcsolóval megadott névhez kell kapcsolódni az attach paranccsal.
Debian vendéggép
Automatikusan indítás
A docker által indított Debianban nem indul init folyamat. Helyette, elsőként a bash indul és más nem. Ezért az automatizálást is a bash-re kell bízni. Például ssh automatikus indításához, a vendég Debianon belül:
nano /root/.bashrc
A nano szerkesztőt telepíteni kell.
...
service ssh start
vagy:
... /etc/init.d/ssh start
Hálózat
Csak akkor állítható a hálózat, ha az új konténert így indítjuk:
docker run -it --cap-add=NET_ADMIN --name a3 debian
Nincs /etc/network/interfaces, ezért telepítjük az ifupdown csomagot.
apt install ifupdown
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp
Folyamatok
apt install procps
Ezek után használható ps parancs:
# ps ax PID TTY STAT TIME COMMAND 1 pts/0 Ss 0:00 bash 573 pts/0 R+ 0:00 ps ax
Gépnév
A gépnév beállítható:
docker run --rm -it --cap-add SYS_ADMIN debian sh
Alapértelmezetten tiltott, mivel engedélyezése veszélyes, esetleg kitörhetnek a konténerből.
Pure-ftpd
Tünet:
# /etc/init.d/pure-ftpd start Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -8 UTF-8 -J HIGH -u 1000 -E -O clf:/var/log/pure-ftpd/transfer.log -B 421 Unable to switch capabilities : Operation not permitted
- Újra kell fordítani a pure-ftpd-t, vagy másik kernel.
Virtuális merevlemez
Virtuális eszköz:
dd if=/dev/zero of=/root/egy.img bs=512 count=1 mknod /dev/sdz b 7 200 losetup /dev/sdz /root/egy.img docker run --rm -it --device=/dev/sdz debian:buster /bin/bash
A /dev/sdz létrejön. Partíciónálható.
Lecsatolás:
losetup -d /dev/sdz
Konténer azonosító
A konténer azonosító lekérdezése a konténerből:
grep docker /proc/self/cgroup | cut -d/ -f3 | head -1
Nyelv
A környezet nyelvi beállításához, telepítsük a locales csomagot:
apt install locales
Állítsuk be a kódolást:
export LANG=hu_HU.UTF-8
Generáljuk le a megadott környezetet.
dpkg-reconfigure locales
Ezek után, minden újonnan indított programban, parancsértelmezőben a beállított nyelv lesz érvényes.
A magyar nyelvet állítsuk be, belépéskor, automatikusan:
echo "export LANG=hu_HU.UTF-8" >> ~/.bashrc
Forrás:
Mariadb
apt update
apt install mariadb-server
service mariadb start
Utána klienssel kapcsolódás rendszergazdaként:
mariadb
vagy
mysql
Felhasználók a gazdagépen
Rendszergazdaként:
gpasswd -a "${USER}" docker
vagy:
adduser janos docker
Vegyük fel janos felhasználóként az új csoportot:
exec su -l $USER
Ez nem lép ki a terminálból.
Másik két lehetőség, de itt új shell jön létre.
newgrp docker
Vagy:
su - $USER
Nginx és PHP
mkdir html
echo "<?php" > html/index.php echo "echo 'hello';" >> html/index.php
- nginx.conf
events { } http { server { listen 80; server_name localhost; root /var/www/html; index index.php index.html index.htm; location ~ \.php$ { include fastcgi_params; fastcgi_pass php:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } }
- docker-compose.yml
version: '3.8' services: web: image: nginx:latest container_name: nginx ports: - "3000:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./html:/var/www/html - ./logs:/var/log/nginx restart: always depends_on: - php php: image: php:8.2-fpm volumes: - ./html:/var/www/html restart: always
Nginx, PHP, shellinabox
- nginx.conf
events { } http { server { listen 80; server_name localhost; root /var/www/html; index index.php index.html index.htm; location ~ \.php$ { include fastcgi_params; fastcgi_pass php:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } }
- docker-compose.yml
version: '3.8' services: web: image: nginx:latest container_name: nginx ports: - "3000:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./html:/var/www/html - ./logs:/var/log/nginx restart: always depends_on: - php php: image: php:8.2-fpm volumes: - ./html:/var/www/html restart: always shellinabox: image: fhuegli/shellinabox:latest environment: - SIAB_USER=janos - SIAB_PASSWORD=titok - SIAB_SSL=false - SIAB_PKGS= - SIAB_SERVICE=/:LOGIN ports: - 4200:4200
Dockerfile
Dockerfile a PHP telepítéssel:
FROM php:7.0-fpm RUN docker-php-ext-install mysqli pdo pdo_mysql RUN docker-php-ext-enable mysqli
Apache számára konfiguráció:
FROM php:7.4-apache COPY 000-default.conf /etc/apache2/sites-available/000-default.conf RUN a2enmod rewrite CMD ["start-apache"]
Parancs futtatása:
RUN apt-get update && \ apt-get install nodejs
Környezeti változók beállítása docker fájlban:
ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_ROOT_USER=root
Image készítése:
$ docker build .
Linkek
MsSQL szerver:
Docker démon beállításai:
Oracle képfájlok:
Laravel példa: