Docker-op­paas­sam­me esit­te­lem­me Docker-vir­tua­li­soin­tia­lus­tan ja opastamme sinua Docker-oh­jel­mis­ton käytössä Ubuntu 22.04 -jär­jes­tel­mäs­sä help­po­ta­juis­ten ohjeiden avulla.

Dockerin rakenne ja omi­nai­suu­det

”Kehitä, julkaise ja käytä mitä tahansa so­vel­lus­ta missä tahansa” – tämä on Docker-alustan motto. Tämä avoimen läh­de­koo­din kont­tia­lus­ta tarjoaa joustavan ja re­surs­si­te­hok­kaan vaih­toeh­don vir­tu­aa­li­ko­nei­siin (VM) pe­rus­tu­val­le lait­teis­to­kom­po­nent­tien emu­loin­nil­le.

Pe­rin­tei­nen lait­teis­to­vir­tua­li­soin­ti perustuu useiden vie­ras­ko­nei­den käyn­nis­tä­mi­seen yh­tei­sel­lä isän­tä­ko­neel­la, kun taas Docker-so­vel­luk­set suo­ri­te­taan eril­li­si­nä pro­ses­sei­na samalla jär­jes­tel­mäl­lä konttien avulla. Tätä kutsutaan kont­ti­poh­jai­sek­si vir­tua­li­soin­nik­si, jota kutsutaan myös käyt­tö­jär­jes­tel­mä­ta­son vir­tua­li­soin­nik­si.

Kuva: Virtual machines and software containers in comparison
While each virtual machine launches its own operating system, Docker con­tai­ners share the core of the host system

Kont­ti­poh­jai­sen vir­tua­li­soin­nin yksi suuri etu on se, että eri­lai­sil­la vaa­ti­muk­sil­la va­rus­te­tut so­vel­luk­set voivat toimia toi­sis­taan erillään ilman erillisen vie­ras­jär­jes­tel­män ai­heut­ta­maa yli­mää­räis­tä kuor­mi­tus­ta. Lisäksi konttien avulla so­vel­luk­sia voidaan ottaa käyttöön eri alus­toil­la ja eri­lai­sis­sa infra­struk­tuu­reis­sa ilman, että niitä tarvitsee mukauttaa isän­tä­jär­jes­tel­män lait­teis­to- tai oh­jel­mis­to­ko­koon­pa­noi­hin.

Docker on suosituin oh­jel­mis­topro­jek­ti, joka tarjoaa käyt­tä­jil­le kont­ti­poh­jais­ta vir­tua­li­soin­ti­tek­no­lo­gi­aa. Tämä avoimen läh­de­koo­din alusta perustuu kolmeen pe­rus­kom­po­nent­tiin. Konttien suo­rit­ta­mi­seen käyttäjät tar­vit­se­vat vain Docker-moottorin sekä erityisiä Docker-kuvia, joita voi hankkia Docker Hubista tai luoda itse.

Docker-kuvat

Vir­tu­aa­li­ko­nei­den tavoin Docker-kontit pe­rus­tu­vat Docker-kuviin. Kuva on vain luku -muotoinen malli, joka sisältää kaikki ohjeet, joita Docker-moottori tarvitsee kontin luomiseen. Docker-kuva on kontin siir­ret­tä­vä kuva teks­ti­tie­dos­to­muo­dos­sa, jota kutsutaan myös Doc­ker­fi­le-tie­dos­tok­si. Jos kontti on tarkoitus käyn­nis­tää jär­jes­tel­mäs­sä, ladataan ensin kyseisen kuvan sisältävä paketti, ellei sitä ole jo pai­kal­li­ses­ti. Ladattu kuva tarjoaa tar­vit­ta­van tie­dos­to­jär­jes­tel­män, mukaan lukien kaikki ajon aikaiset pa­ra­met­rit. Konttia voidaan pitää kuvan käynnissä olevana pro­ses­si­na.

Docker Hub

Docker Hub on pil­vi­poh­jai­nen rekisteri oh­jel­mis­to­va­ras­toil­le, erään­lai­nen kirjasto Docker-kuville. Verk­ko­pal­ve­lu on jaettu julkiseen ja yk­si­tyi­seen osioon. Jul­ki­ses­sa osiossa käyttäjät voivat ladata itse ke­hit­tä­mi­ään kuvia ja jakaa niitä yhteisön kanssa. Täältä löytyy useita vi­ral­li­sia kuvia, jotka ovat peräisin Docker-ke­hi­tys­tii­mil­tä ja va­kiin­tu­neil­ta avoimen läh­de­koo­din pro­jek­teil­ta. Re­kis­te­rin yk­si­tyi­seen osioon ladatut kuvat eivät ole jul­ki­ses­ti saa­ta­vil­la, joten niitä voidaan jakaa esi­mer­kik­si yrityksen si­sä­pii­ris­sä tai ystävien ja tuttavien kesken. Docker Hubiin pääsee osoit­tees­sa hub.docker.com.

Docker-moottori

Docker-projektin ytimessä on Docker-moottori. Kyseessä on avoimen läh­de­koo­din asia­kas­pal­ve­lin­so­vel­lus, jonka nykyinen versio on kaikkien käyt­tä­jien saa­ta­vil­la kaikilla va­kiin­tu­neil­la alus­toil­la.

Docker-moottorin pe­rus­ra­ken­ne jakautuu kolmeen osaan: pal­ve­lin­toi­min­to­ja suo­rit­ta­va taus­tapro­ses­si, REST-oh­jel­moin­ti­mal­lin (Repre­sen­ta­tio­nal State Transfer) pohjalta kehitetty so­vel­lus­liit­ty­mä (API) sekä käyt­tö­jär­jes­tel­män ko­men­to­ri­vi (CLI), joka toimii käyt­tö­liit­ty­mä­nä (asiakas).

  • Docker-daemon: Docker-moottorin pal­ve­li­me­na toimii daemon-prosessi. Docker-daemon toimii isän­tä­jär­jes­tel­män taustalla, ja sitä käytetään Docker-moottorin kes­ki­tet­tyyn hal­lin­taan. Tämä toiminto luo ja hallinnoi kaikkia kuvia, kontteja ja verkkoja.
  • REST-API: REST-API mää­rit­te­lee joukon ra­ja­pin­to­ja, joiden avulla muut ohjelmat voivat kom­mu­ni­koi­da Docker-daemonin kanssa ja antaa sille ohjeita. Yksi näistä oh­jel­mis­ta on käyt­tö­jär­jes­tel­män ter­mi­naa­li.
  • Ter­mi­naa­li: Docker käyttää asia­kas­oh­jel­ma­na käyt­tö­jär­jes­tel­män ter­mi­naa­lia. Tämä on in­tegroi­tu Docker-daemoniin REST-API:n kautta, minkä ansiosta käyttäjät voivat hallita sitä skriptien tai käyttäjän syöt­tä­mien ko­men­to­jen avulla.
Vinkki

Vuonna 2017 Docker-moottori nimettiin uudelleen Docker Community Edi­tio­nik­si (ly­hen­net­ty­nä Docker CE), mutta vi­ral­li­ses­sa do­ku­men­taa­tios­sa ja Docker-pa­ket­ti­va­ras­tois­sa käytetään edelleen pääosin vanhaa nimeä. Docker CE:n lisäksi on olemassa myös Docker En­terpri­se Edition (Docker EE), joka sisältää joitakin li­sä­omi­nai­suuk­sia. Se ei kui­ten­kaan ole ilmainen, ja se sopii paremmin yri­tys­käyt­töön.

Docker-ko­men­to­jen avulla käyttäjän oh­jel­mis­to­kont­te­ja voidaan käyn­nis­tää, pysäyttää ja hallita suoraan ter­mi­naa­lis­ta. Daemonia ohjataan ko­men­nol­la docker ja ohjeilla kuten build, pull tai run. Asiakas ja palvelin voivat sijaita samassa jär­jes­tel­mäs­sä. Käyt­tä­jil­lä on myös mah­dol­li­suus käyttää toisessa jär­jes­tel­mäs­sä olevaa Docker-daemonia. Muo­dos­tet­ta­van yhteyden tyypistä riippuen asiakkaan ja pal­ve­li­men välinen viestintä tapahtuu REST-API:n, UNIX-socketien tai verk­ko­lii­tän­nän kautta.

Seuraava kaavio ha­vain­nol­lis­taa yk­sit­täis­ten Docker-kom­po­nent­tien vuo­ro­vai­ku­tus­ta esi­merk­ki­ko­men­to­jen docker build, docker pull ja docker run avulla:

Kuva: Schematic representation of the Docker architecture
'The Docker arc­hi­tec­tu­re is based on the coo­pe­ra­tion of the client (terminal'), palvelin (Docker-daemon) ja rekisteri (Docker Hub).“

Komento docker build ohjeistaa Docker-daemonia luomaan kuvan (kat­ko­vii­va). Tätä varten tarvitaan vastaava Doc­ker­fi­le-tiedosto. Jos kuvaa ei haluta luoda, vaan ladata Docker Hubin ar­kis­tos­ta, käytetään komentoa docker pull (kat­ko­vii­va). Jos Docker-dae­mo­nil­le annetaan ko­men­nol­la docker run käsky käyn­nis­tää kontti, taus­taoh­jel­ma tarkistaa, onko vastaava kont­ti­ku­va saa­ta­vil­la pai­kal­li­ses­ti. Jos on, kontti käyn­nis­te­tään (yh­te­näi­nen viiva). Jos daemon ei löydä kuvaa, se käyn­nis­tää au­to­maat­ti­ses­ti latauksen ar­kis­tos­ta.

Docker-työs­ken­te­ly

Nyt on aika tutustua kont­tia­lus­tan so­vel­luk­siin. Jos et ole vielä asentanut Docker-moottoria, voit tehdä sen Linux-ter­mi­naa­lin kautta. Ohjeet asen­nuk­seen löydät ar­tik­ke­lis­tam­me”Docker-moottorin asen­ta­mi­nen Ubuntu 22.04:ään”. Seu­raa­vas­sa kerrotaan, miten Docker-moottoria hallitaan ter­mi­naa­lis­ta, mitä hyötyä Docker Hubista on ja miksi Docker-kontit voivat mullistaa tavan, jolla työs­ken­te­let so­vel­lus­ten parissa.

Kuinka hallita Docker-moottoria

Ubuntu on käyttänyt pro­ses­sien hal­lin­taan taus­taprogram­mia systemd(lyhenne sanoista ”system daemon”) versiosta 16.04 lähtien.Systemd onkäyn­nis­tyspro­ses­si, jota käytetään myös muissa Linux-ja­ke­luis­sa, kuten RHEL:ssä, CentOS:ssa tai Fedorassa. Yleensäsystemd saapro­ses­si­tun­nuk­sen 1. Jär­jes­tel­män en­sim­mäi­se­nä pro­ses­si­na tämä taus­tapro­ses­si vastaa kaikkien seu­raa­vien pro­ses­sien käyn­nis­tä­mi­ses­tä, val­von­nas­ta ja lo­pet­ta­mi­ses­ta. Ai­kai­sem­mis­sa Ubuntu-ver­siois­sa (14.10 ja vanhemmat) taus­taoh­jel­maupstart hoitaa tämän tehtävän.

Docker-daemonia voidaan hallita myös systemd:n kautta. Va­kio­asen­nuk­ses­sa kont­tia­lus­ta on mää­ri­tet­ty siten, että daemon käyn­nis­tyy au­to­maat­ti­ses­ti jär­jes­tel­män käyn­nis­tyes­sä. Tätä ole­tus­a­se­tus­ta voidaan muokata ko­men­to­ri­vi­työ­ka­lun systemctl avulla.

Systemctl:n avulla voit lähettää systemd: lle komentoja prosessin hal­lit­se­mi­sek­si tai sen tilan ky­se­le­mi­sek­si. Tällaisen komennon syntaksi on seuraava:

systemctl [OPTION] [COMMAND]
bash

Jotkin komennot viit­taa­vat tiet­tyi­hin re­surs­sei­hin (esi­mer­kik­si Docker). Systemd:n ter­mi­no­lo­gias­sa näitä kutsutaan yk­si­köik­si. Tällöin komento muodostuu ky­sei­ses­tä ohjeesta ja sen yksikön nimestä, johon komento kohdistuu.

Jos haluat ottaa Docker-daemonin au­to­maat­ti­sen käyn­nis­tyk­sen käyttöön (enable) tai poistaa sen käytöstä (disable), käytä ko­men­to­ri­vi­työ­ka­lua systemctl seu­raa­vil­la ko­men­noil­la:

sudo systemctl enable docker
sudo systemctl disable docker
bash

Ko­men­to­ri­vi­työ­ka­lun systemctl avulla voit tarkistaa yksikön tilan:

sudo systemctl status docker
bash

Jos Docker-moottori on käynnissä Ubuntu-jär­jes­tel­mäs­sä­si, ter­mi­naa­lin tuloste näyttää seuraavan ku­va­kaap­pauk­sen kal­tai­sel­ta:

Kuva: The status query via systemctl shows: The Docker engine is active (running)
Status query via systemctl: The Docker Engine is active (running)

Jos Docker-moottori on tällä hetkellä pois käytöstä, saat ti­lail­moi­tuk­sen inactive (dead). Tällöin sinun on käyn­nis­tet­tä­vä Docker-daemon ma­nu­aa­li­ses­ti, jotta kontteja voidaan käyttää.

Kuva: The status query via systemctl shows: The Docker engine is inactive (dead)
Status query via systemctl: The Docker engine is inactive (dead)

Jos haluat käyn­nis­tää, pysäyttää tai käyn­nis­tää Docker-moottorin uudelleen ma­nu­aa­li­ses­ti, anna systemd:lle jokin seu­raa­vis­ta ko­men­nois­ta.

Käynnistä poistettu palvelin käyt­tä­mäl­lä systemctl-komentoa yhdessä komennon start kanssa:

sudo systemctl start docker
bash

Jos Docker-palvelin on tarkoitus lopettaa, käytä sen sijaan komentoa stop:

sudo systemctl stop docker
bash

Moottorin uu­del­leen­käyn­nis­tys käyn­nis­tyy ko­men­nol­la restart:

sudo systemctl restart docker
bash

Docker Hubin käyttö

Jos Docker-moottori on kont­tia­lus­tan sydän, Docker Hub on avoimen läh­de­koo­din projektin sielu. Se on yhteisön koh­taa­mis­paik­ka. Pil­vi­poh­jai­ses­ta re­kis­te­ris­tä käyttäjät löytävät kaiken, mitä tar­vit­se­vat Docker-asen­nuk­sen­sa käyn­nis­tä­mi­seen.

Verk­ko­pal­ve­lu tarjoaa mo­ni­puo­li­sia vi­ral­li­sia so­vel­lusar­kis­to­ja, joissa on yli 100 000 ilmaista so­vel­lus­ta. Käyttäjät voivat luoda ku­va­kir­jas­ton ja käyttää sitä yhdessä työ­ryh­mien kanssa. Ke­hi­tys­tii­min tarjoaman am­mat­ti­mai­sen tuen lisäksi aloit­te­li­jat löytävät täältä yhteyksiä käyt­tä­jäyh­tei­söön. Git­Hu­bis­sa on käy­tet­tä­vis­sä foorumi yhteisön tukea varten.

Kuva: The Docker hub: Registration
Create your personal Docker ID for free by re­gis­te­ring / Source: hub.docker.com

Re­kis­te­röi­ty­mi­nen Docker Hubiin

Re­kis­te­röi­ty­mi­nen Docker Hubiin on ilmaista. Käyttäjät tar­vit­se­vat vain säh­kö­pos­tio­soit­teen ja va­lit­se­man­sa Docker-tunnuksen. Tämä toimii myöhemmin hen­ki­lö­koh­tai­se­na tal­len­nus­ti­lan ni­mi­ti­la­na ja antaa käyt­tä­jil­le pääsyn kaikkiin Docker-pal­ve­lui­hin. Tällä hetkellä tarjous sisältää Docker Hubin lisäksi Docker Cloudin, Docker Storen ja va­li­koi­tu­ja beta-ohjelmia. Sen avulla Docker-tunnusta voidaan käyttää kir­jau­tu­mis­tun­nuk­se­na Docker-tu­ki­kes­kuk­seen sekä Docker Success -por­taa­liin ja Docker-foorumiin.

Re­kis­te­röi­ty­mispro­ses­si koostuu viidestä vaiheesta:

  1. Valitse Docker-tun­nuk­se­si: Valitse ha­ke­muk­sen en­sim­mäi­ses­sä vaiheessa käyt­tä­jä­tun­nus, jota käytetään myöhemmin hen­ki­lö­koh­tai­se­na Docker-tun­nuk­se­na.
  2. Syötä säh­kö­pos­tio­soi­te: Syötä nykyinen säh­kö­pos­tio­soit­tee­si. Huomaa, että sinun on vah­vis­tet­ta­va re­kis­te­röi­ty­mi­se­si Docker Hubiin säh­kö­pos­tit­se.
  3. Valitse salasana: Valitse salainen salasana.
  4. Lähetä re­kis­te­röi­ty­mi­se­si: Napsauta ”Re­kis­te­röi­dy” lä­het­tääk­se­si re­kis­te­röi­ty­mi­se­si. Kun tiedot on lähetetty, Docker lähettää linkin säh­kö­pos­tio­soit­tee­see­si, jotta voit vahvistaa säh­kö­pos­tio­soit­tee­si.
  5. Vahvista säh­kö­pos­tio­soit­tee­si: Vahvista säh­kö­pos­tio­soit­tee­si nap­saut­ta­mal­la vah­vis­tus­link­kiä.

Docker-projektin verk­ko­pal­ve­lut ovat käy­tet­tä­vis­sä heti, kun olet re­kis­te­röi­ty­nyt se­lai­mes­sa. Täällä voit luoda arkistoja ja työryhmiä tai etsiä Docker Hubista julkisia re­surs­se­ja ”Explore”-toiminnon avulla.

Kuva: Dashboard of the Docker hub
Select and set re­po­si­to­ries and workgroups via the Docker hub dashboard / Source: hub.docker.com

Voit kirjautua sisään myös suoraan käyt­tö­jär­jes­tel­män ko­men­to­ri­vil­tä ko­men­nol­la docker login. Yk­si­tyis­koh­tai­nen kuvaus ko­men­nos­ta löytyy Docker-ohjeista.

Pe­ri­aat­tees­sa Docker Hub on käy­tet­tä­vis­sä myös niille, joilla ei ole tiliä tai Docker-tunnusta. Tällöin on kuitenkin mah­dol­lis­ta ladata vain julkisten ar­kis­to­jen kuvia. Omien kuvien la­taa­mi­nen (push) ei ole mah­dol­lis­ta ilman Docker-tunnusta.

Luo arkistoja Docker Hubissa

Ilmainen Docker Hub -tili sisältää yhden yk­si­tyi­sen arkiston ja tarjoaa mah­dol­li­suu­den luoda ra­jat­to­mas­ti julkisia arkistoja. Jos tarvitset lisää yk­si­tyi­siä arkistoja, voit avata ne mak­sul­li­sel­la päi­vi­tyk­sel­lä.

Luo arkisto seu­raa­vas­ti:

  1. Valitse nimitila: Uudet arkistot liitetään au­to­maat­ti­ses­ti Docker-tun­nuk­se­si ni­mi­ti­laan. Voit myös syöttää sen or­ga­ni­saa­tion tunnuksen, johon kuulut.
  2. Nimeä arkisto: Anna nimi äskettäin luodulle ar­kis­tol­le.
  3. Lisää kuvaus: Lisää lyhyt kuvaus ar­kis­tos­ta­si.
  4. Määritä näkyvyys: Päätä, onko arkisto jul­ki­ses­ti näkyvä (julkinen) vai vain sinun tai or­ga­ni­saa­tio­si käy­tet­tä­vis­sä (yk­si­tyi­nen).

Vahvista syöt­tä­mä­si tiedot nap­saut­ta­mal­la ”Luo”.

Kuva: The Docker hub: Input screen for creating a repository
Your re­po­si­to­ries are au­to­ma­tical­ly created in the namespace of your Docker ID / Source: hub.docker.com

Luo tiimejä ja or­ga­ni­saa­tioi­ta

Hubin avulla Docker tarjoaa pil­vi­poh­jai­sen alustan, jolla itse luotuja kuvia hallitaan kes­ki­te­tys­ti ja jaetaan kätevästi työ­ryh­mil­le. Docker-ter­mi­no­lo­gias­sa näitä kutsutaan or­ga­ni­saa­tioik­si. Aivan kuten käyt­tä­jä­ti­leil­lä, myös or­ga­ni­saa­tioil­le annetaan yk­si­löl­li­set tun­nis­teet, joiden kautta kuvia voidaan jakaa ja ladata. Or­ga­ni­saa­tion sisäiset oikeudet ja roolit voidaan määrittää tiimien kautta. Esi­mer­kik­si ”Owners”-tiimiin mää­ri­te­tyil­lä käyt­tä­jil­lä on oikeus luoda yk­si­tyi­siä tai julkisia arkistoja sekä myöntää käyt­tö­oi­keuk­sia.

Työryhmiä voi myös luoda ja hallita suoraan hal­lin­ta­pa­nee­lin kautta. Li­sä­tie­to­ja or­ga­ni­saa­tiois­ta ja tiimeistä löytyy Docker-ohjeista.

Kuvien ja säi­ly­ty­sas­tioi­den käsittely

Docker Hub on vi­ral­lis­ten Docker-re­surs­sien en­si­si­jai­nen lähde, ja se toimii läh­tö­koh­ta­nam­me tässä kuvien ja konttien kä­sit­te­lyä kä­sit­te­le­väs­sä esit­te­lys­sä. Ke­hi­tys­tii­mi on jul­kais­sut esit­te­ly­ku­van nimeltä whalesay, jota käytämme seuraavan Docker-oppaamme pohjana.

Lataa Docker-kuvat

Whalesay -kuvan löydät käymällä Docker Hubin verk­ko­si­vus­tol­la ja kir­joit­ta­mal­la ha­ku­kent­tään Docker-logon vieressä sanan ”whalesay ”.

Kuva: The search function in Docker hub
Search the Docker hub using the search bar or the ‘Explore’ button / Source: hub.docker.com

Napsauta ha­ku­tu­lok­sis­sa resurssia, jonka otsikko on docker/whalesay, jotta pääset tämän kuvan julkiseen arkistoon.

Docker-arkistot on aina ra­ken­net­tu saman kaavan mukaan. Sivun yläosassa käyttäjät näkevät kuvan nimen, arkiston luokan sekä vii­mei­sim­män latauksen ajan­koh­dan (last pushed).

Kuva: Web view of a Docker repository
In the re­po­si­to­ry, users generally find all in­for­ma­tion that is needed to use an image / Source: hub.docker.com

Jo­kai­ses­sa Docker-ar­kis­tos­sa on myös seuraavat tie­to­ruu­dut:

  1. Kuvaus: Yk­si­tyis­koh­tai­nen kuvaus, joka sisältää yleensä käyt­tö­oh­jeet
  2. Docker pull -komento: Ko­men­to­ri­vi­ko­men­to, jota käytetään kuvan la­taa­mi­seen ar­kis­tos­ta (pull)
  3. Omistaja: Tiedot arkiston luojasta
  4. Kommentit: Sivun lopussa oleva kom­ment­tio­sio

Re­po­si­to­rion tie­to­kent­tien mukaan whalesay on muunnos avoimen läh­de­koo­din Perl-sk­rip­tis­tä cowsay. Tony Monroen vuonna 1999 kehittämä ohjelma luo lehmän muotoisen ASCII-kuvion, joka näkyy käyttäjän pää­te­lait­tees­sa viestin yh­tey­des­sä.

Lataa docker/whalesay seura docker pullalla ko­men­nol­la:

docker pull [OPTIONS] NAME [:TAG|@DIGEST]
bash

Komento docker pull ohjeistaa daemonia lataamaan kuvan ar­kis­tos­ta. Määrität kuvan syöt­tä­mäl­lä kuvan nimen (NAME). Voit myös ohjeistaa Doc­ke­ril­le, miten haluttu komento tulisi suorittaa (OPTIONS). Va­lin­nai­sia syötteitä ovat tun­nis­teet (:TAG) ja yk­si­löl­li­set tun­nis­te­nu­me­rot (@DIGEST), joiden avulla voit ladata kuvan tietyn version.

Pai­kal­li­nen kopio docker/whalesay-kuvasta ladataan seu­raa­val­la ko­men­nol­la:

docker pull docker/whalesay
bash

Yleensä voit ohittaa tämän vaiheen. Jos haluat käyn­nis­tää kontin, Docker-palvelin lataa au­to­maat­ti­ses­ti tal­len­nus­ti­las­ta ne kuvat, joita se ei löydä pai­kal­li­ses­ta jär­jes­tel­mäs­tä.

Käynnistä Docker-kuvat kontteina

Käynnistä Docker-kuva docker run ko­men­nol­la:

docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG...]
bash

docker run ainoa pa­kol­li­nen osa on halutun Docker-kuvan nimi. Kun käyn­nis­tät kontin, voit kuitenkin määrittää myös li­sä­ase­tuk­sia, TAG-tun­nis­tei­ta ja DIGEST-tun­nis­tei­ta. Lisäksi docker run voidaan yhdistää muihin ko­men­toi­hin, jotka suo­ri­te­taan heti kontin käyn­nis­tyes­sä. Tällöin CMD (COMMAND, jonka kuvan luoja on mää­rit­tä­nyt ja joka suo­ri­te­taan au­to­maat­ti­ses­ti kontin käyn­nis­tyes­sä) korvataan. Muita va­lin­nai­sia asetuksia voidaan määrittää li­sä­ar­gu­men­teil­la (ARG…). Tämä mah­dol­lis­taa esi­mer­kik­si käyt­tä­jien li­sää­mi­sen tai ym­pä­ris­tö­muut­tu­jien siir­tä­mi­sen.

Käytä ko­men­to­ri­vi­ko­men­toa

docker run docker/whalesay cowsay boo
bash

lataamaan olemassa olevan Perl-skriptin ku­va­tie­dos­to­na ja suo­rit­ta­maan sen kontissa. Huomaat, että whalesay eroaa huo­mat­ta­vas­ti al­ku­pe­räi­ses­tä sk­rip­tis­tä.

Kuva: Terminal output of the container docker/whalesay: The whale says ‘boo’
If docker/whalesay is run with the standard command, the Docker whale is limited to a short ‘boo’

Kun docker/whalesay-kuva suo­ri­te­taan, skripti tulostaa valaan muotoisen ASCII-kuvion sekä teks­ti­vies­tin ”boo”, joka on annettu ter­mi­naa­lis­sa cowsay -ko­men­nol­la.

Kuten koeajon yh­tey­des­sä, daemon etsii ensin haluttua kuvaa pai­kal­li­ses­ta tie­dos­to­ha­ke­mis­tos­ta. Koska sa­man­ni­mis­tä pakettia ei löydy, aloi­te­taan kuvan la­taa­mi­nen Docker-ar­kis­tos­ta. Sen jälkeen daemon käyn­nis­tää muokatun cowsay-ohjelman. Kun ohjelma on suo­ri­tet­tu loppuun, kontti suljetaan au­to­maat­ti­ses­ti.

Kuten cowsay, myös Docker-oh­jel­mis­ton whalesay tarjoaa mah­dol­li­suu­den puuttua ohjelman kulkuun ja vaikuttaa ter­mi­naa­lin teks­ti­läh­töön. Kokeile tätä toimintoa kor­vaa­mal­la output-komennon sana ”boo” millä tahansa merk­ki­jo­nol­la tai esi­mer­kik­si tylsällä va­las­vit­sil­lä.

sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?
bash
Kuva: Terminal output of the container docker/whalesay: A whale with an individual message
Make your Docker whale say whatever you want by placing words in his speech bubble

Näytä kaikki pai­kal­li­ses­sa jär­jes­tel­mäs­sä olevat Docker-kuvat

Jos et ole varma, oletko jo ladannut tietyn kuvan, voit tar­kas­tel­la luetteloa kaikista pai­kal­li­ses­sa jär­jes­tel­mäs­sä­si olevista kuvista. Käytä seuraavaa ko­men­to­ri­vi­ko­men­toa:

sudo docker image
bash

Komento docker images (vaih­toeh­to docker image ls) tulostaa kaikki pai­kal­li­set kuvat, mukaan lukien tie­dos­to­koon, tun­nis­teen ja kuvan tun­nis­teen.

Kuva: Overview of all images on the local system
The overview displays the images hello-world and docker/whalesay

Kun käyn­nis­tät kontin, sen pohjana oleva kuva ladataan kopiona ar­kis­tos­ta ja tal­len­ne­taan pysyvästi tie­to­ko­neel­le­si. Tämä säästää aikaa, jos haluat käyttää kuvaa myöhemmin. Uusi lataus käyn­nis­tyy vain, jos kuvan lähde muuttuu, esi­mer­kik­si jos ar­kis­tos­ta on saa­ta­vil­la uusi versio.

Näytä kaikki pai­kal­li­ses­sa jär­jes­tel­mäs­sä olevat säi­ly­ty­sas­tiat

Jos haluat saada yleis­kat­sauk­sen kaikista jär­jes­tel­mäs­sä­si käynnissä olevista tai aiemmin käynnissä olleista kont­teis­ta, käytä ko­men­to­ri­vi­ko­men­toa docker ps yhdessä vaih­toeh­don --all kanssa (lyhenne: -a):

sudo docker ps -a
bash
Kuva: Overview of all containers on the local system
The overview shows all con­tai­ners that have been launched on the Docker engine

Ter­mi­naa­lin tuloste sisältää tietoja, kuten kyseisen kontin tun­nis­teen, sen perustana olevan kuvan, kontin käyn­nis­tyk­sen yh­tey­des­sä suo­ri­te­tun komennon, kontin käyn­nis­ty­sa­jan sekä tilan.

Jos haluat näyttää vain ne kontit, jotka ovat tällä hetkellä käynnissä jär­jes­tel­mäs­sä­si, käytä ko­men­to­ri­vi­ko­men­toa docker ps ilman muita vaih­toeh­to­ja:

sudo docker ps
bash

Tällä hetkellä jär­jes­tel­mäs­sä­si ei kui­ten­kaan pitäisi olla käynnissä olevia kontteja.

Luo Docker-kuvia

Docker-op­paas­sam­me on jo kerrottu, miten löydät kuvia Docker Hubista, lataat ne ja suoritat ne millä tahansa jär­jes­tel­mäl­lä, johon Docker-moottori on asennettu. Doc­ke­ril­la pääset kuitenkin käsiksi paitsi re­kis­te­ris­sä olevaan laajaan so­vel­lus­va­li­koi­maan, myös moniin eri vaih­toeh­toi­hin omien kuvien luomiseen ja niiden ja­ka­mi­seen muiden ke­hit­tä­jien kanssa.

Tämän Docker-oppaiden joh­dan­to­kap­pa­leis­sa olet jo oppinut, että jokainen Docker-kuva perustuu Doc­ker­fi­le-tie­dos­toon. Voit ajatella Doc­ker­fi­le-tie­dos­to­ja erään­lai­si­na kuvien ra­ken­nus­mal­li­na. Ne ovat yk­sin­ker­tai­sia teks­ti­tie­dos­to­ja, jotka si­säl­tä­vät kaikki ohjeet, joita Docker tarvitsee kuvan luomiseen. Seu­raa­vis­sa vaiheissa opit kir­joit­ta­maan tällaisen Doc­ker­fi­le-tiedoston ja oh­jeis­ta­maan Dockeria käyt­tä­mään sitä oman kuvasi pohjana.

  1. Luo uusi kansio: Docker-ke­hi­tys­tii­mi suo­sit­te­lee, että jo­kai­sel­le Doc­ker­fi­le-tie­dos­tol­le luodaan oma kansio. Kansiot on helppo luoda Linux-käyt­tö­jär­jes­tel­mäs­sä ko­men­to­ri­vil­tä. Luo kansio nimeltä my­doc­ker­build seu­raa­val­la ko­men­to­ri­vi­ko­men­nol­la:
mkdir mydockerbuild
bash
Kuva: Ubuntu terminal: The command mkdir
Create new di­rec­to­ries with the command mkdir
  1. Siirry uuteen ha­ke­mis­toon: Siirry äskettäin luotuun työ­kan­sioon ko­men­nol­la cd.
cd mydockerbuild
bash
Kuva: Ubuntu terminal: The command cd
With the help of the cd command, switch to another working directory
  1. Luo uusi teks­ti­tie­dos­to: Ubuntussa voit luoda teks­ti­tie­dos­to­ja helposti myös ter­mi­naa­lin kautta. Käytä tähän esi­mer­kik­si Nano- tai Vim-editoria. Luo my­doc­ker­build-ha­ke­mis­toon teks­ti­tie­dos­to nimeltä Doc­ker­fi­le.
nano Dockerfile
bash
Kuva: Ubuntu terminal: Create text files with Nano
The text editor Nano is preins­tal­led on all Ubuntu versions
  1. Kirjoita Doc­ker­fi­le: Äskettäin luotu teks­ti­tie­dos­to toimii itse ke­hi­tet­tä­vän kuvan ra­ken­nus­oh­jee­na. Sen sijaan, että oh­jel­moi­sim­me kuvan alusta asti, käytämme tässä Docker-oppaassa esit­te­ly­ku­vaa docker/whalesay mallina. Se si­säl­ly­te­tään Doc­ker­fi­le-tie­dos­toon FROM-ko­men­nol­la. Käytä tun­nis­tet­ta :latest vii­ta­tak­se­si kuvan uusimpaan versioon.
FROM docker/whalesay:latest

Tähän mennessä docker/whalesay on toiminut niin, että olet itse syöttänyt sille sanat. Ter­mi­naa­lis­sa näkyy syöt­tä­mä­si teksti yhdessä kontin käyn­nis­tys­ko­men­non kanssa. Olisi kuitenkin mie­len­kiin­toi­sem­paa, jos skripti luo uuden tekstin au­to­maat­ti­ses­ti. Tämä voidaan toteuttaa esi­mer­kik­si käyt­tä­mäl­lä fortunes-ohjelmaa, joka löytyy jo­kai­ses­ta Linux-jär­jes­tel­mäs­tä. For­tu­ne­sin pe­rus­toi­min­to on luoda on­nen­kek­sien sanontoja ja hu­mo­ris­ti­sia afo­ris­me­ja. Käytä seuraavaa komentoa päi­vit­tääk­se­si nykyisen pai­kal­li­sen pa­ket­ti­ha­ke­mis­to­si ja asen­taak­se­si fortunes-ohjelman:

RUN apt-get -y update && apt-get install -y fortunes

Määritä sitten CMD-komento. Se suo­ri­te­taan RUN-kom ennon jälkeen, ellei sitä ole ohitettu call (docker run image CMD) -ko­men­nol­la. Käytä seuraavaa komentoa, jotta fortunes-ohjelma suo­ri­te­taan -a htoeh­dol­la (”Valitse kaikista tie­to­kan­nois­ta”) ja tulos näytetään ter­mi­naa­lis­sa cowsay -ohjelman avulla:

CMD /usr/games/fortune -a | cowsay

Doc­ker­fi­le-tie­dos­to­si tulisi näyttää seu­raa­val­ta:

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

Huomautus: Doc­ker­fi­le-tiedoston komennot kir­joi­te­taan aina yhden rivivälin välein, ja ne alkavat aina avain­sa­nal­la. Syntaksi ei erota isoja ja pieniä kirjaimia, joten kir­joi­tus­ta­val­la ei ole mer­ki­tys­tä. Avain­sa­no­jen kir­joit­ta­mi­ses­sa on kuitenkin va­kiin­tu­nut tietty käytäntö.

Kuva: The text editor Nano in the Ubuntu terminal
Control the text editor Nano via the key com­bi­na­tions given in the footer
  1. Tallenna teks­ti­tie­dos­to: Tallenna syöt­tä­mä­si tiedot. Jos käytät Nano-editoria, tallenna pai­na­mal­la näp­päi­nyh­dis­tel­mää [CTRL] + [O] ja vahvista pai­na­mal­la [ENTER]. Nano ilmoittaa, että valittuun tie­dos­toon on kir­joi­tet­tu kolme riviä. Sulje teks­tie­di­to­ri pai­na­mal­la näp­päi­nyh­dis­tel­mää [CTRL] + [X].
  2. Luo kuva Doc­ker­fi­le-tie­dos­tos­ta: Luo kuva Doc­ker­fi­le-tie­dos­tos­ta siir­ty­mäl­lä ensin ha­ke­mis­toon, jossa teks­ti­tie­dos­to sijaitsee. Aloita kuvan luominen ko­men­to­ri­vi­ko­men­nol­la docker build. Jos haluat nimetä kuvan erikseen tai antaa sille tun­nis­teen, käytä vaih­toeh­toa -t ja kirjoita sen jälkeen haluamasi nimen ja tun­nis­teen yh­dis­tel­mä. Va­kio­muo­to on name:tag.

Tässä esi­mer­kis­sä tulisi luoda kuva, jonka nimi on docker-whale:

docker build -t docker-whale .
bash

Viimeinen kohta osoittaa, että kyseinen Doc­ker­fi­le sijaitsee valitussa ha­ke­mis­tos­sa. Voit myös määrittää läh­de­tie­dos­to­jen tie­dos­to­po­lun tai URL-osoitteen.

Kom­pi­loin­tipro­ses­si käyn­nis­tyy heti, kun komento vah­vis­te­taan pai­na­mal­la [ENTER]. Ensin Docker-palvelin tarkistaa, onko sillä kaikki kuvan luomiseen tar­vit­ta­vat tiedostot. Docker-ter­mi­no­lo­gias­sa tätä kutsutaan yleisesti termillä ”konteksti”.

Sitten etsitään docker/whalesay -kuva, jonka tunniste on :latest:

Jos kuvan luomiseen tar­vit­ta­va konteksti on jo ko­ko­nai­suu­des­saan olemassa, Docker-daemon käyn­nis­tää FROM-ko­men­nol­la liitetyn ku­va­mal­lin vä­liai­kai­ses­sa kontissa ja siirtyy Doc­ker­fi­le-tiedoston seu­raa­vaan komentoon. Tässä esi­mer­kis­sä kyseessä on RUN-komento, joka asentaa fortunes-ohjelman.

Kuvien luo­mispro­ses­sin jokaisen vaiheen lopussa Docker antaa sinulle tun­nis­teen ky­sei­ses­sä vaiheessa luodulle ker­rok­sel­le. Tämä tar­koit­taa, että jokainen taustalla olevan Doc­ker­fi­le-tiedoston rivi vastaa siitä ra­ken­ne­tun kuvan yhtä kerrosta.

Kun RUN-komento on suo­ri­tet­tu loppuun, Docker-daemon pysäyttää sille luodun kontin, poistaa sen ja käyn­nis­tää uuden vä­liai­kai­sen kontin CMD-lauseen ker­rok­sel­le. Luo­mispro­ses­sin päätyttyä myös tämä vä­liai­kai­nen kontti lo­pe­te­taan ja pois­te­taan. Docker ilmoittaa uuden kuvan tun­nis­teen:

Successfully built a8f2048c9ab8
Kuva: Ubuntu terminal: Status message during image creation
Docker images are created in multiple layers

Juuri luomasi kuva löytyy nimellä docker-whale pai­kal­li­ses­ti tal­len­net­tu­jen kuvien luet­te­los­ta.

sudo docker images
bash
Kuva: Ubuntu terminal: Overview of all images
The newly created image in the image overview

Jos haluat käyn­nis­tää kontin juuri luo­mas­ta­si kuvasta, käytä ko­men­to­ri­vi­ko­men­toa sudo docker run yhdessä kuvan nimen kanssa:

sudo docker run docker-whale
bash

Jos kuva on luotu oikein Doc­ker­fi­le-tiedoston avulla, valas pitäisi nyt ins­pi­roi­da sinua enemmän tai vähemmän viisailla sanoilla. Huomautus: Aina kun käyn­nis­tät kontin uudelleen, syntyy uusi lause.

Kuva: Container based on docker-whale: Text output in the terminal
Thanks to fortunes, the ASCII whale now provides witty or wise phrases

Merkitse Docker-kuvat ja lataa ne Docker Hubiin

Jos haluat ladata oman docker-whale-kuvasi hubiin ja asettaa sen yhteisön tai työryhmän saa­ta­vil­le, sinun on ensin lin­ki­tet­tä­vä se sa­man­ni­mi­seen arkistoon omassa hen­ki­lö­koh­tai­ses­sa ni­mi­ti­las­sa­si. Docker-ter­mi­no­lo­gias­sa tätä vaihetta kutsutaan tag­gaa­mi­sek­si.

Voit julkaista kuvan Docker Hubissa seu­raa­vas­ti:

  1. Luo arkisto: Kirjaudu Docker Hubiin Docker-tun­nuk­sel­la­si ja sa­la­sa­nal­la­si ja luo julkinen arkisto nimellä docker-whale.
Kuva: The Docker hub: Entry form for creating a repository
Create a re­po­si­to­ry for your custom image / Source: hub.docker.com
  1. Määritä kuvan tunniste: Määritä mu­kau­te­tun docker-whale-kuvan tunniste ko­men­to­ri­vi­ko­men­nol­la docker images.
Kuva: Overview of all local images in the Ubuntu terminal
The command docker images lists all images that are saved on your system

Tässä ta­pauk­ses­sa kuvan tunniste on a8f2048c9ab8. Tar­vit­sem­me tätä seu­raa­vas­sa vaiheessa ta­pah­tu­vaa mer­kit­se­mis­tä varten.

  1. Merkitse kuva: Merkitse docker-whale-kuva ko­men­to­ri­vioh­jel­man docker tag avulla seu­raa­vas­ti:
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

Tässä esi­mer­kis­sä mer­kit­se­mis­tä koskeva ko­men­to­ri­vi­ko­men­to on seuraava:

sudo docker tag a8f2048c9ab8 [Namespace]/docker-whale:latest
bash

Voit tarkistaa docker images yleis­kat­sauk­sen avulla, oletko merkinnyt kuvasi oikein. Re­po­si­to­rion nimessä pitäisi nyt näkyä Docker-tun­nuk­se­si.

Kuva: Ubuntu terminal: Image overview before and after tagging
Link images with your Docker ID using the command docker tag
  1. Lataa kuva: Voit ladata kuvan kir­jau­tu­mal­la ensin Docker Hubiin. Tämä onnistuu docker login ko­men­nol­la.
sudo docker login
bash

Tämän jälkeen pääte pyytää sinua antamaan käyt­tä­jä­tun­nuk­se­si (Docker-tunnuksen) ja sa­la­sa­na­si.

Kuva: Log in to the Docker hub via the Ubuntu terminal
Before you can upload an image to the Docker hub, you first need to log in

Jos kir­jau­tu­mi­nen onnistui, lataa kuva äskettäin luotuun arkistoon käyt­tä­mäl­lä ko­men­to­ri­vi­ko­men­toa docker push.

sudo docker push [Namespace]/docker-whale
bash

La­taa­mi­nen kestää vain muutaman sekunnin. Nykyinen tila näkyy ter­mi­naa­lis­sa.

Kuva: Ubuntu terminal: Status message of the image upload
After uploading, the image is available under the set tag latest in the Docker hub

Kirjaudu Docker Hubiin se­lai­mel­la, jotta voit tar­kas­tel­la ladattua kuvaa.

Kuva: Docker hub: The repository [Namespace]/docker-whale in the detailed view
The latest update of your re­po­si­to­ry is shown in the detailed view / Source: hub.docker.com

Jos haluat ladata useamman kuin yhden kuvan kutakin arkistoa kohti, käytä erilaisia tun­nis­tei­ta, jotta kuvasi ovat saa­ta­vil­la eri versioina. Esi­mer­kik­si:

[Namespace]/docker-whale:latest
[Namespace]/docker-whale:version1
[Namespace]/docker-whale:version2

Yleis­kat­saus eri ku­va­ver­siois­ta löytyy Docker Hub -ar­kis­tos­ta ”Tags”-vä­li­leh­del­tä.

Kuva: Docker hub: The ‘Tags’ tab
In the ‘Tags’ tab, you’ll find all versions of an image / Source: hub.docker.com

Eri hank­kei­den kuvat tulisi kuitenkin tarjota eril­li­sis­sä ar­kis­tois­sa.

Jos tiedoston lähetys onnistui, mu­kau­tet­tu kuvasi on nyt julkisen arkiston kautta kaikkien Docker-käyt­tä­jien saa­ta­vil­la ympäri maailmaa.

  1. Kokeilu: Tarkista, onko tiedoston lähetys on­nis­tu­nut, yrit­tä­mäl­lä ladata kuva.

Huomaa, että pai­kal­li­nen versio kuvasta on ensin pois­tet­ta­va, jotta uusi kopio samalla tun­nis­teel­la voidaan ladata. Muussa ta­pauk­ses­sa Docker ilmoittaa, että haluttu kuva on jo olemassa ny­kyi­ses­sä versiossa.

Kuva: The Image is up to date
If an image exists locally, the pull command is cancelled

Pois­taak­se­si pai­kal­li­sen Docker-kuvan, käytä ko­men­to­ri­vi­ko­men­toa docker rmi yhdessä kyseisen kuvan tun­nis­teen kanssa. Tunniste mää­ri­te­tään ta­val­li­seen tapaan ko­men­nol­la docker images. Jos Docker ilmoittaa ris­ti­rii­das­ta, esi­mer­kik­si siksi, että kuvan tunniste on käytössä useam­mas­sa kuin yhdessä ar­kis­tos­sa tai sitä käytetään kontissa, toista komento li­sää­mäl­lä siihen vaih­toeh­to --force (ly­hen­net­ty­nä*-f* ) pa­kot­taak­se­si poiston.

sudo docker rmi -f a8f2048c9ab8
bash
Kuva: Command docker rmi in combination with the option -f (force)
Use the command docker rmi in com­bi­na­tion with the option -f to force a deletion

Näytä jälleen yh­teen­ve­to kaikista pai­kal­li­sis­ta kuvista:

sudo docker Images
bash

Pois­tet­tu­jen osien ei pitäisi enää näkyä ter­mi­naa­lin tu­los­tees­sa. Lataa nyt ar­kis­tos­sa annettu pull-komento käyt­tä­mäl­lä uusi kopio kuvasta Docker Hubista.

sudo docker pull [Namespace]/docker-whale
bash
Kuva: Ubuntu terminal: Download from the Docker hub
The pre­vious­ly published image is success­ful­ly down­loa­ded

Muita Docker-aiheita ja oppaita

Docker-maailma on laaja, ja ajan myötä Docker-työ­ka­luis­ta on ke­hit­ty­nyt elävä eko­sys­tee­mi. Docker on erityisen hyö­dyl­li­nen jär­jes­tel­män­val­vo­jil­le, varsinkin jos he hal­lin­noi­vat mo­ni­mut­kai­sia so­vel­luk­sia, joissa useita kontteja toimii rin­nak­kain eri jär­jes­tel­mis­sä. Docker tarjoaa mo­ni­puo­li­sia toi­min­to­ja täl­lais­ten klus­te­rien hal­lin­taan. Li­sä­tie­to­ja aiheesta löytyy ar­tik­ke­lis­tam­me, joka kä­sit­te­lee Docker-klus­te­rien hallintaa Swarm- ja Compose-työ­ka­lu­jen avulla.

Di­gi­taa­li­ses­sa oppaassa on lisää ope­tus­oh­jel­mia Docker-työs­ken­te­lyyn:

  • Docker-arkiston mää­rit­tä­mi­nen
  • Docker-konttien levyt
  • Docker: Var­muus­ko­pioin­ti ja palautus
  • Docker-oh­jel­mis­ton asen­ta­mi­nen ja käyt­tä­mi­nen Linux-pal­ve­li­mel­la
  • Docker Compose -opas

Docker sopii mo­nen­lai­siin käyt­tö­tar­koi­tuk­siin. Di­gi­taa­li­ses­ta oppaasta löydät seuraavat oppaat:

Docker ei ole aina paras vaih­toeh­to kaikille so­vel­luk­sil­le. Yhdessä ar­tik­ke­lis­sam­me esi­tel­lään suo­si­tuim­mat Docker-vaih­toeh­dot. Lisäksi si­vus­tol­lam­me on useita ar­tik­ke­lei­ta, joissa verrataan Dockeria muihin alus­toi­hin:

  • Ku­ber­ne­tes vs. Docker
  • Openshift vs. Docker
  • Podman vs. Docker
Siirry pää­va­lik­koon