Docker kasutamine operatsioonisüsteemiga Debian

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

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

  1. 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

Kasulikud lisamaterjalid