Docker

Allikas: Kuutõrvaja
Redaktsioon seisuga 30. juuni 2018, kell 11:55 kasutajalt Jj (arutelu | kaastöö) (Konteinerite loomine docker-compose abil)

Paigaldus ubuntus/debianis

Dockeri paigaldamiseks ubuntu/debiani serveris

# apt-get install docker.io

Laadime alla konteineris kasutamiseks mõeldud ubuntu

# docker pull ubuntu

Peale tõmbamise lõpetamist paigaldatakse see images alla, näha saame seda järgneva käsuga

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        2 weeks ago         81.2MB

Saame näiteks selle sees oleva bashi käivitada ja käsureal ringi vaadata või sinna täiendavaid pakette paigaldada. Vaikimisi on tegemist väga minimaalse keskkonnaga

# docker run -t -i ubuntu:latest /bin/bash

Tõmmata saab ka juba eelkonfigureeritud tarkvaraga dockeri konteinereid. Näiteks tõmbame mysql serveri ja paneme selle käima

docker pull mysql
docker run -d --name=mysql1 -e MYSQL_ROOT_PASSWORD=’mypassword’ -v /storage/mysql1/mysql-datadir:/var/lib/mysql mysql

Lisaks saab tõmmata ka kindlaid mysql versioone

docker pull mysql:5.6

Olemas on ka palju keerukamaid dockeri konteinereid. Näiteks konfigureeritud ja valmis LAMPi saab https://github.com/fauria/docker-lamp

Omaenda konteineri loomine

Konteineri loomine toimub failis Dockerfile olevate käsurea käskude alusel. Näiteks tekitame lihtsa konfi, mis tekitab meile eelmises lõigus allatõmmatud ubuntu image alusel apache veebiserveri, kus serveerib etteantud index.html faili

FROM ubuntu:latest
RUN apt-get update && apt-get install -y apache2
RUN mkdir -p /srv && rm -fr /var/www/html && ln -s /srv /var/www/html
EXPOSE 80
ADD index.html /srv/
WORKDIR /srv
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Käsud lahtiseletatult:

  • FROM seadistab ära mis imaget me aluseks kasutame
  • RUN võimaldab käivitada enda järele kirjutatud käske
  • EXPOSE teeb pordi 80 meile nähtavaks
  • WORKDIR määrab kasutaja kataloogi
  • ADD kopeerib varemalt tekitatud index.html faili /srv kausta
  • ENTRYPOINT seadistab ära teenuse, mis konteineris tööle läheb

Ehitame loodud konfi alusel konteineri valmis, selleks anname samas kaustas kus dockerfail järgneva käsu

docker build -t test:test .

Kui protsess lõppes peaksime seda ka images alt nägema

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                test                364cac645fcc        2 minutes ago       223MB
ubuntu              latest              113a43faa138        2 weeks ago         81.2MB

Paneme konteineri tööle

# docker run -d -P test:test

Töötavaid konteinereid näeme järgnevalt

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
5b9850b98a29        test:test           "/usr/sbin/apache2ct…"   12 seconds ago      Up 11 seconds       0.0.0.0:32770->80/tcp   sleepy_carson

Nagu näha on localhosti port 32770 suunatud konteineris 80 pordile.

Konteinerite loomine docker-compose abil

Compose on töövahend, millega saab defineerida ja luua multi-conteinerilisi dockeri rakendusi. Paigaldamiseks

# apt-get install docker-compose

Selleks, et luua lihtne veebi ja mysqli server tekitame faili docker-compose.yml järgneva sisuga

version: '3.3'

services:
   wordpress:
     depends_on:
       - db
     image: wordpress
     ports:
       - "8000:80"
     restart: unless-stopped
     environment:
       WORDPRESS_DB_HOST: db
       MYSQL_PORT_3306_TCP: 3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

   db:
     image: mariadb
     ports:
     - "3306:3306"
     restart: unless-stopped
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

Loome selle alusel dockeri ja paneme selle tööle

# docker-compose up -d

Veendumine, et hakkas tööle

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
20eaa3976bc9        mysql:latest        "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        3306/tcp


Paigaldame samamoodi wordpressi rakenduse

version: '3.3'

services:
   db:
     image: mariadb
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

Pöördudes nüüd aadressile 8080 peaksime nägema wordpressi

Dockeri kettaajaotus

TODO

Docker cluster ehk swarm

Nodes 1

docker-machine create -d virtualbox node-1

Nodes 2

docker-machine create -d virtualbox node-2

Nodes 3

docker-machine create -d virtualbox node-3

eval $(docker-machine env node-1)

docker swarm init \
    --advertise-addr $(docker-machine ip node-1) \
    --listen-addr $(docker-machine ip node-1):2377

TOKEN=$(docker swarm join-token -q worker)

eval $(docker-machine env node-2)

docker swarm join \
    --token $TOKEN \
    $(docker-machine ip node-1):2377

eval $(docker-machine env node-3)

docker swarm join \
    --token $TOKEN \
    $(docker-machine ip node-1):2377

info saamiseks

# docker -H <manager1 IP>:4000 info

Et luua kaks replikat kõige viimasest nginxi nimelisest konteinerist ja teha nad avalikuks pordilt 8080

docker service create \
--name backend \
--replicas 2 \
--publish 8080:80 \
nginx

https://technologyconversations.com/2016/08/01/integrating-proxy-with-docker-swarm-tour-around-docker-1-12-series/

Terve hulk erinevaid haldusliideseid https://www.smartspate.com/overview-gui-interfaces-managing-docker-containers/

Dockeri võrgud

docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge

Kuidas see kõik töötab http://blog.nigelpoulton.com/demystifying-docker-overlay-networking/