Docker kasutamine operatsioonisüsteemiga Debian
Sissejuhatus
Docker https://www.docker.com/ tarkvara abil saab hallata virtuaalseid arvuteid. Erinevalt Proxmox, Xen, LXD jt nö operatsioonisüsteemi virtualiseerimise keskkondadest on Docker põhiline aksent nö protsessi ehk rakenduse jaoks töötamise keskkonna moodustamine.
Mõisted
- konteiner (ingl. k. container)
- tõmmis (ingl. k. image)
Tööpõhimõte
Väited
- Docker keskkonnas töötav rakendus ei logi
- Docker keskkonnas töötab mõni üksik protsess
- Docker keskkonda uuendatakse Docker tõmmise uue versiooni paigaldamise teel (mitte paketihalduse abil)
Süsteemi ettevalmistamine
Debian v. 10 operatsioonisüsteem kasutab vaikimisi nftables paketifiltrit, Docker eeldab nö klassikalist iptables paketifiltrit (legacy), kasutamiseks sobib öelda
# update-alternatives --config iptables
Tarkvara paigaldamine
Tekst https://docs.docker.com/engine/install/debian/ õpetab Docker paigaldamist 2020 aasta kevadel docker repost
# apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common sudo # curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" # apt-get update # apt-get install docker-ce docker-ce-cli containerd.io # usermod -aG docker imre
mille tulemusena tekib failisüsteemi
- /etc/init.d/docker.io - käivitab taustal töötava protsessi
# ps aux | egrep "dockerd|containerd" root 5643 0.0 1.0 907836 43016 ? Ssl 15:49 0:04 /usr/bin/containerd root 5807 0.0 2.0 911768 82876 ? Ssl 15:49 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
- /etc/default/docker - seadistusfail
Peale paigaldus on vaikimisi sellised objektid
- võrgud
# docker network ls NETWORK ID NAME DRIVER SCOPE 72be9c067b73 bridge bridge local 2bc3d77be027 host host local 17f40ac03fc7 none null local
- Volume
# docker volume ls DRIVER VOLUME NAME
- Tõmmised
# docker images ls REPOSITORY TAG IMAGE ID CREATED SIZE
- Konteinerid
# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker protsesside lõpetamine
- systemctl stop docker.socket docker.service
Seadistamine
Docker tööd juhib seadistusfail /etc/default/docker, nt sisuga
# cat DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -b docker0"
kus
- -b - millise linux bridge abil virtuaalsed arvutid võrku ühendatakse
Vaikimisi valib docker ise bridge seadmele docker0 omameeles sobiva, st seni kasutamata võrgu ip aadressi, seda saab määratleda /etc/network/interfaces failis
.. auto docker0 iface docker0 inet static address 10.220.0.10 netmask 255.255.0.0 bridge_ports dummy0 bridge_stp off bridge_fd 0 ...
Tundub, et muu hulgas seadistab docker automaatselt ka paketifiltrit, nt ütleb midagi sellist
# iptables -t nat -A POSTROUTING -o eth0 -s 10.220.0.0/16 -j MASQUERADE
Kasutamine
- Docker versiooni küsimine
# docker version Client version: 1.0.0 Client API version: 1.12 Go version (client): go1.2.1 Git commit (client): 63fe64c Server version: 1.0.0 Server API version: 1.12 Go version (server): go1.2.1 Git commit (server): 63fe64c
- Tõmmise otsing
# docker search ...
- Tõmmise kopeerimine, debian ja tag jessie
# docker pull debian:jessie
- Olemasolevate tõmmiste (ingl. k. image) nimekiri
# docker images
- Tõmmise põhjal konteineris shell käivitamine
# docker run -i -t --name debian_1 debian:wheezy /bin/bash
- Tõmmise põhjal konteineris shell käivitamine selliselt, et seiskamisel konteiner automaatselt kustutatakse
# docker run --rm -i -t --name debian_1 debian:wheezy /bin/bash
- Töötavate ja mitte töötavate (-a) konteinerite nimekiri
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db565c685f96 debian:jessie /bin/bash 9 minutes ago Up 9 minutes 0.0.0.0:25000->22/tcp raal
- Olemasoleva mitte-töötava konteineri käivitamine
# docker start debian_1
- Konterineriga ühendumine (shell'i)
# docker attach debian_1
- Konteineri kustutamine
# docker rm debian_1
- Tõmmise kustutamine
# docker rmi nimi
- Olemasoleva (muudetud sisuga) konteinteri alusel uue tõmmise moodustamine
# docker ...
- Info Docker kohta
# docker info Containers: 12 Images: 60 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Dirs: 84 Execution Driver: native-0.2 Kernel Version: 3.14.0-2-amd64 WARNING: No memory limit support WARNING: No swap limit support
Võrk
Docker konteinerid on vakimisi bridgetud docker0 bridge külge
# brctl show bridge name bridge id STP enabled interfaces docker0 8000.56847afe9799 no vetha88a
Selleks, et docker host arvuti ip aadressi peale tehtud päringuid suunata edasi docker konteinerile sobib konteiner käivitada nt
# docker run -i -t --name web -p 10.0.7.172:80:80 ubuntu
kus
- 10.0.7.172 on docker hosti eth0 võrguseadme ip aadress
- -i - käivta interaktiivselt
- -t - allokeerida pseudoterminal
Storage
TODO
Märkused
- docker programmi ei pea tingimata kasutama root kasutajana, sobib ka gruppi docker kuuluv tavakasutaja
2020 kevade märkused
Debian v. 10 paigaldamine
Tavakasutajale docker tegevuste privileegi lisamine
# usermod -aG docker imre
Konteineri voluumid
docker inspect -f 'Mall:Json .Mounts' <container_id> | python -m json.tool
docker volume ls
Konteineri varundamine
Lähtepunktiks on töötav konteiner ja eesmärk on tekitada selline .tar faili mida saab edaspidi kasutada vajadusel nt mõnel muul arvutil selle töötanud seisuga jätkamiseks.
Esmalt konteiner seisatakse ja öeldakse, tekib uus nimeline image
# docker commit boring_kowalevski ubuntu2020testcommit
image salvestamiseks faili
# docker save -o ubuntu2020testcommit.tar ubuntu2020testcommit
Image taastamiseks failist
# docker load -i ubuntu2020testcommit.tar
Imagest konteineri käivitamiseks, tekib uus konteiner
# docker run -it ubuntu2020testcommit
Uue konteineri käivitamiseks
# docker start uus-konteineri-nimi
docker-compose kasutamine
TODO 2020 suvel
# curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
Kasulikud lisamaterjalid
- https://docs.docker.com/install/linux/docker-ce/debian/
- https://simkimsia.com/how-to-restore-database-dumps-for-postgres-in-docker-container/