Docker

Kapcsolódó hivatkozások

Alapok

Az image readonly, a konténer a módosítható réteg e felett.

# image keresése a hub-on
docker search mongodb
 
# image letöltése
docker pull ubuntu
 
# image futtatása (letöltéssel együtt) (-i interactive -t terminal)
docker run -it ubuntu:latest /bin/bash
docker run -it --name centos01 centos:latest /bin/bash
 
# image futtatása, automatikus újraindítással ha hiba történik a PID 1-ben
docker run --name mariadb-1 --restart unless-stopped -p 3306:3306 mariadb
 
# összes image listázása
docker images
 
# összes konténer listázása (a már nem futókat is mutatja)
docker ps -a 
 
# image konfigurációjának megtekintése
docker inspect <konténernév | id>
 
# konténer indítása
docker start <konténernév | id>
 
# futó konténerhez csatlakozás
docker attach <konténernév | id>
 
# futó konténerről lecsatlakozás (nem állítja le a konténer futását)
[CTRL]+P+Q
 
# az image és a konténer közötti különbség listázása
docker diff <konténernév | id>
 
# parancs futtatása adott nevű konténeren
docker exec -it <konténernév | id> /bin/bash
 
# konténer leállítása
docker stop <konténernév | id>
 
# konténer eltávolítása
docker rm <konténernév | id>
 
# image eltávolítása
docker image rm <image name | id>
docker rmi <image name | id>
 
# file felmásolása a konténerbe
docker cp <filename> <konténernév | id>:/<path+filename>
 
# file felmásolása a konténerből
docker cp <konténernév | id>:/<path+filename> <filename>
 
# konténer log
docker logs <konténernév | id>

Linux bash shell tippek

# összes konténer törlése
docker rm -f $(docker ps -aq)
# összes image törlése
docker rmi -f $(docker images -q)

WSL2

A volumes könyvtár eléréséhez Windows Explorer-be írjuk be a következő útvonalat:

\\wsl$
 
# vagy
 
\\wsl.localhost\docker-desktop-data\data\docker
 
# konténer layer diff (itt találhatók a fájlrendszer különbségei)
\\wsl.localhost\docker-desktop-data\data\docker\overlay2 

Ubuntu image

Debian alapú docker konténerbe telepítsük az ifconfig-ot tartalmazó net-tools csomagot, a ping-et tartalmazó iputils-ping csomagot és a ps-t tartalmazó procps csomagot:

sudo apt-get update
sudo apt-get install net-tools iputils-ping procps

Adatkapcsolatok

Több konténer összekapcsolásához használhatunk port mapping-ot, volume mount-ot

# portmap: -p <host-port>:<konténer-port>
docker run --name mariadb-1 -p 3306:3306 mariadb
 
# volume mount: -v<host-dir>:</konténer-dir>
docker run --name mariadb-1 -p 3306:3306 -v ~/db/db1:/var/lib/mysql -d mariadb
 
# a konténer számára csak olvasható könyvtár felcsatolás (:ro)
docker run -v ~/db/db1:/data:ro -it ubuntu /bin/bash
 
# file felcsatolás
docker run -v ~/db/.env:/data/.env -it ubuntu /bin/bash
 
# környezeti változó: -e VAR=VALUE
# (-d daemon)
docker run --name mariadb-1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -v ~/db/db1:/var/lib/mysql -d mariadb
 
# inline környezeti változó átadása (Linux bash)
PASSWORD='PASSWORD1' docker run --env-file env.list ubuntu
 
# env.list tartalma, a PASSWORD-nek inline adtunk értéket fentebb vagy Windows-on deklaráltuk a változót set-el előtte
USER=user1
UID=1000
PASSWORD

Docker image létrehozása

Dockerfile:

FROM <base-image>
COPY hello /
CMD ["/hello"]

Build:

docker build -t <image név> .
 
# eltérő konfig fájl megadása és verziószám
docker build -f Dockerfile.test -t <image neve:version> .

Tag-elés és feltöltés hub.docker.com-ra

# bejelentkezés
docker login
 
# kijelentkezés
docker logout
 
# image tag-elés
docker tag <image name | id> <username on hub>/<target name>:<version>
# example: docker tag shoppingcard-api integritypz/shoppingcard-api:1.0
 
# konténerben történt változások feltöltése az image-be, tag-elés, verzió létrehozása
docker commit <image név | id> <username on hub>/<target name>:<version>
# example: docker commit shoppingcard-api integritypz/shoppingcard-api:1.1
 
# feltöltés hub.docker.com-ra
docker push integritypz/shoppingcard-api:1.0

Image mozgatása

# image mentése
docker save <image név | id> >image.tar
# vagy
docker save -o image.tar <image név | id>
 
# image betöltése
docker load<image.tar

Private registry

Kapcsolódó hivatkozások:

# registry futtatása (registry könyvtár mount kell!)
docker run -d -p 5000:5000 --restart always --name registry -v e:\work\registry:/var/lib/registry registry:2
 
# image tag-elése
docker tag shoppingcard-api localhost:5000/shoppingcard-api
 
# image push
docker push localhost:5000/shoppingcard-api

Hálózat

Hálózatok listázása

docker network ls

Hálózat nélküli alkalmazás:

docker run -it --net=none ubuntu /bin/bash

A host hálózat a host gép hálózatát használja, így nem lehet két olyan konténer, ami ugyan azt a port ajánlja ki.

Hálózat linkelése felhasználói bridge-ekkel (dokumentáció):

# redis kiszolgáló indítása:
docker run -d --name redis redis
 
# a --link kapcsoló a közeli jövőben már nem lesz támogaott, de így működik
docker run -d --name counter -p 3000:3000 -e DBHOST=db --link redis:db pbes/counter-with-redis
 
# nevesített bridge hálózat
docker network create my-net
 
# hálózati elemek listázása
docker network ls
 
# hálózat eltávolítása
docker network rm my-net
 
# konténer kapcsolódás hálózathoz
## mongodb szerver (--net-alias=mongoserver - az a host név amire lehet hivatkozni más konténerben)
docker run -v e:\temp\mongodb\data:/data/db --network my-net --net-alias=mongoserver --name mongoserver -d -p 27017:27017 mongo:latest
## nodejs project use mongoserver
docker run -p 8080:8080 -p 3000:3000 --network my-net --name shoppingcard -d shoppingcard-api:3.0
 
# konténer leválasztása hálózatról
docker network disconnect my-net counter
 
# konténer felkapcsolása hálózatra
docker network connect my-net counter