Tartalomjegyzék

< Virtualizálás

Docker

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

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

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

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: