Docker

From ICO wiki
Jump to navigationJump to search

Info ja eeldused

Autor: Üllar Seerme
Rühm: A31

Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat "klientarvuti" kasutati SSH ühenduse loomiseks virtuaalmasinasse "rakendusserver". Järgnevad tehnilised andmed kasutatud distributsioonide kohta.

Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:

cat /etc/*-release

Rakendusserver:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
...

Klientarvuti:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
...

Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!

Konteineritest

Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust host seadmel ning madalamat ajakulu uue guest instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu kernel, namespace ja cgroups. Selle asemel, et olemasoleva OS-i peale paigaldada hypervisor, mis looks virtuaalmasina koos uue guest OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma hypervisor tarkvarata eraldiseisvad alad host OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.

Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete namespace'ide jaoks. Namespace on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad hypervisori ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele cgroups, mis hõlpsustab grupeeritud protsesside, näiteks namespace, ressursside haldamist.

Dockeri omapära

Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või image, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.

Paigaldus

Tavapärane

Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada:

apt-get update

apt-get install docker.io

siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist. Kontrollimaks, et kõik laabus käivitada:

docker version

mis peaks tagastama analoogse väljundi:

Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a

Uusim

Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et apt toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:

find /usr/lib/apt/methods/ -name 'https'

tagastab järgneva, siis saab jätkata alapeatükiga:

/usr/lib/apt/methods/https

Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab apt-transport-https:

apt-get update

apt-get install apt-transport-https


Jätkamiseks tuleb lisada Dockeri repositooriumi võti:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

Misjärel lisada Dockeri repositoorium apt allikate nimekirja, repositooriumid uuendada ning paigaldada lxc-docker:

sh -c "echo deb https://get.docker.com/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"

apt-get update

apt-get install lxc-docker

Kontrollimaks, et kõik laabus käivitada:

docker version

mis peaks tagastama analoogse väljundi:

Client version: 1.3.2
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 39fa2fa
OS/Arch (client): linux/amd64
Server version: 1.3.2
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 39fa2fa

Sissejuhatavad tegevused

Kirjutades käsureale niisama

docker

saab näha kõiki Dockeriga seotud käske:

...
Commands:
   attach    Attach to a running container
   build     Build an image from a Dockerfile
   commit    Create a new image from a container's changes
   cp        Copy files/folders from a container's filesystem to the host path
   create    Create a new container
   diff      Inspect changes on a container's filesystem
   events    Get real time events from the server
   exec      Run a command in an existing container
   export    Stream the contents of a container as a tar archive
   history   Show the history of an image
   images    List images
   import    Create a new filesystem image from the contents of a tarball
   info      Display system-wide information
   inspect   Return low-level information on a container
   kill      Kill a running container
   load      Load an image from a tar archive
   login     Register or log in to a Docker registry server
   logout    Log out from a Docker registry server
   logs      Fetch the logs of a container
   port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT
   pause     Pause all processes within a container
   ps        List containers
   pull      Pull an image or a repository from a Docker registry server
   push      Push an image or a repository to a Docker registry server
   restart   Restart a running container
   rm        Remove one or more containers
   rmi       Remove one or more images
   run       Run a command in a new container
   save      Save an image to a tar archive
   search    Search for an image on the Docker Hub
   start     Start a stopped container
   stop      Stop a running container
   tag       Tag an image into a repository
   top       Lookup the running processes of a container
   unpause   Unpause a paused container
   version   Show the Docker version information
   wait      Block until a container stops, then print its exit code
...

Alustame mõne tõmmise tõmbamisest kasutades

docker pull phusion/baseimage

käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:

Status: Downloaded newer image for phusion/baseimage:latest

Käsuga

docker images

saab näha praegu host masinal olevaid tõmmiseid, kus üks on kõige uuem versioon (latest) ja teine natuke vanem.

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB
phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB

Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:

docker run -t -i phusion/baseimage:latest /bin/bash

Kusjuures -t tekitab konteinerisse terminali ja -i võimaldab interaktiivsust konteineriga, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane tag ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka prompt käsureal:

root@37ed3671ae25:/#

Allikad