Systeemityö ja projektityöskentely

Sorakuilu

Docker

Niklas Walleniuksen kuvaava blogi

Mitä kontit ovat?

Kontti on paikalliselle koneelle asennettu pieni testiympäristö, jonka asetukset ovat samat kuin tuotantoympäristön. Konttien avulla ohjelmille voidaan tarjota standardoitu ympäristö, jossa niitä voidaan ajaa.

Kun ohjelma asetetaan konttiin, sitä voidaan siirrellä koodaajan koneelta testiympäristöön tai staging-ympäristöön ja sieltä tuotantoon. Kontteja voidaan siirrellä helposti myös omasta konesalista julkiseen pilveen.

Mikä Docker on?

Docker on tuoteperhe, jonka avulla voi sekä laittaa sovelluksia kontteihin että ajaa kontteja.

Dockerein komponentit

Docker Image

Image on yksi tiedosto, joka sisältää sekä sovelluksen, että sen tarvitsemat ohjelmistot ja käyttöjärjestelmän. Image on periaatteessa itsenäinen kokonaisuus, jota voi siirrellä paikasta toiseen. Windowsissa yksi image voi sisältää käyttöjärjestelmän (esimerkiksi Windows Server Core), sovelluspalvelimen (esim. IIS Web-palvelin), ASP.NET-komponentit ja varsinaisen sovelluksen ja sen tarvitsemat konfiguraatiot. Tämä kaikki on siis pakattu yhteen tiedostoon. Tiedosto sisältää kaiken tarvittavan, mitä tämän esimerkin web-sovelluksen ajaminen vaatii.

Docker File

Docker File on konfiguraatiotiedosto, joka kertoo, miten Docker image rakennetaan.

Registry (tallennuspaikka repositoryille)

Registry on Docker-tiedostojen (image) säilytyspaikka. Tällaisia säilytyspaikkoja tai varastoja on sekä julkisia että yksityisiä. Tunnetuin julkinen varasto on Docker Hub, jossa on kymmeniä tuhansia valmiita imageja, joita voi ladata ilmaiseksi. Varasto voi olla myös yksityinen, jolloin siihen on laitettu vain yrityksen itse tekemiä imageja.

Docker Container

Container eli Docker-kontti on imagen pohjalta käynnistetty sovellusyksikkö eli kontti. Yhdestä imagesta voi käynnistää monta rinnakkaista konttia. Kontille ei aseteta etukäteen tiettyjä resursseja, vaan se pyytää alla olevalta käyttöjärjestelmältä resursseja tarpeen mukaan.

Docker Engine

Engine ohjelma, joka pyörittää palvelimella ajettavia kontteja. Esimerkiksi Windowsissa kyse on yhdestä taustalla ajettavasta palvelusta. Tätä ohjelmaa hallitaan Docker APIn kautta, jota voi ohjata Windowsissa esim. PowerShellin kautta. Docker Enginen avulla voi sekä rakentaa kontteja eli pakata sovelluksen tarvitsemia kokonaisuuksia imageksi että ajaa niitä.

Orchestrator

Orchestrator eli automaattinen hallinta on ohjelma, jonka avulla kontteja voidaan hallita silloin, kun tarvitaan useampi palvelin ajamaan kontteja. Yksi esimerkki tällaisesta on Docker Swarm, joka on Dockerin orkestrointi-ohjelma. Sen avulla voidaan muodostaa useiden palvelimien klustereita ja jakaa kuormia palvelimien välillä. Yksi suosittu orkerstrointisovellus on Kubernetes.

Docker komponentit

Kuva: https://niklaswallenius.fi/teknologiat/mika-on-docker/

Kun käyttäjä haluaa käynnistää uuden kontin imagesta, kone tarkistaa aluksi, löytyykö tarvittava image paikallisesti. Jos se löytyy, kontti käynnistetään välittömästi. Jos taas imagea ei löydy, lähdetään sitä etsimään halutusta varastosta (registry). Jos sellainen löytyy, image ladataan paikalliseksi ja kontti käynnistetään tämän jälkeen.


Repository ja tiedon siirto

Repository

Dockerin repositoryssa voi olla yksi tai useampi image, se mahdollistaa imagen jakamisen. Imaget viedään Docker Hubiin komennolla:

docker push

Repositoryn luodaan kirjautumalla Docker Hubiin, klikkaamalla Repositories ja sitten Create Repo

Lisää monta imagea: :n avulla (esim docs/base:testing). Jos et määrittele tagia se oletusarvoisesti valitsee viimeisen.

Paikallisella koneella

Voit nimetä paikalliset imaget joko silloin kun rakennat niitä:

docker build -t /[:]

tai

antamalla niille uudet tagit:

/[:]

tai

käyttämällä committia:

docker commit /[:]

Voit sen jälkeen siirtää repositoryn:

$ docker push /:

Esimerkki: Docker ja postgres koulun ympäristössä

docker run hello-world

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres

docker pull dockage/phppgadmin:latest

docker run --name=phppgadmin -d --publish=80:80 -e PHP_PG_ADMIN_SERVER_HOST=host.docker.internal dockage/phppgadmin:latest

extension=pdo_pgsql
extension=pgsql

php -S localhost:8888

$myPDO = new PDO('pgsql:host=localhost;dbname=guestb', 'postgres', 'mysecretpassword');

ctrl + c

Dockerin komentoja

Dockerin dokumentaatio, komennot

Image

Docker luo imagen, jonka päällimmäisessä kerroksessa on container (siis Containerin voi poistaa poistamatta imagea)

Listaa imaget:

docker images ls -a

Container

Listaa aktiiviset containerit:

docker ps -all

Pysäytä toimiva container

Esimerkissä dockerin phppgadmin

docker stop phppgadmin

Ota uudestaan käyttöön container

Esimerkissä phppgadmin

docker restart phppgadmin

poista yksi tai useampi container

docker rm

poista yksi tai useampi image

docker rmi