Erinevus lehekülje "Docker" redaktsioonide vahel
1. rida: | 1. rida: | ||
{{Täienda}} | {{Täienda}} | ||
+ | |||
+ | ===Sissejuhatus=== | ||
+ | |||
+ | Dockeri töid lihusustav põhimõte seisneb selles, et kõik lib-id ja programmid ning utikad on ühes isoleeritud ja kergelt paidaldatavas konteineris koos. Konteinereid võib hankida võrgust dockeri enda lehelt või siis koostada ja genereerida neid ise. Docker teeb arenduse lihtsamaks, sest pole vaja mässata keerukate serverikonfide ja seal tekkivate konfliktidega, kui üritab nt panna sama tarkvara (nt php või ka mysqli või postgresi) mitu eri versiooni korraga tööle. Soovides näiteks käivitada enda rakenduse jaoks kolm eri php versiooniga serverit tuleb lihtsalt tõmmata kolm eri php versiooni ja apache serverit sisaldavat konteineri img-d ning nad soovitud süsteemis käivitada. Käivitamisel saab öelda igale konteinerile oma IP aadressi ja kausta, mis nad külge haagivad, kaust võib olla näiteks kuskil /home või /srv all, kus rakenduse kood asub. Samas võib rakenduse koodi pakendada ka kohe konteinerisse. Samamoodi on konteineriseeritavad kõikvõimalikud muud rakendused alates rubyst kuni pythoni ja nodejsini. Samu konteinereid saab kiirelt tõmmata ja käivitada ka läpakas, tööarvutis ja production sereris kliendi juures. | ||
===Paigaldus ubuntus/debianis=== | ===Paigaldus ubuntus/debianis=== |
Redaktsioon: 8. august 2018, kell 15:17
Toores. Ehk seda pala võib täiendada.
Sisukord
Sissejuhatus
Dockeri töid lihusustav põhimõte seisneb selles, et kõik lib-id ja programmid ning utikad on ühes isoleeritud ja kergelt paidaldatavas konteineris koos. Konteinereid võib hankida võrgust dockeri enda lehelt või siis koostada ja genereerida neid ise. Docker teeb arenduse lihtsamaks, sest pole vaja mässata keerukate serverikonfide ja seal tekkivate konfliktidega, kui üritab nt panna sama tarkvara (nt php või ka mysqli või postgresi) mitu eri versiooni korraga tööle. Soovides näiteks käivitada enda rakenduse jaoks kolm eri php versiooniga serverit tuleb lihtsalt tõmmata kolm eri php versiooni ja apache serverit sisaldavat konteineri img-d ning nad soovitud süsteemis käivitada. Käivitamisel saab öelda igale konteinerile oma IP aadressi ja kausta, mis nad külge haagivad, kaust võib olla näiteks kuskil /home või /srv all, kus rakenduse kood asub. Samas võib rakenduse koodi pakendada ka kohe konteinerisse. Samamoodi on konteineriseeritavad kõikvõimalikud muud rakendused alates rubyst kuni pythoni ja nodejsini. Samu konteinereid saab kiirelt tõmmata ja käivitada ka läpakas, tööarvutis ja production sereris kliendi juures.
Paigaldus ubuntus/debianis
Dockeri paigaldamiseks ubuntu/debiani serveris
# apt-get install docker.io
Dockeri üheks oluliseks tugevuseks on see, et nende poolt on pakkuda juba tuhandeid eelkonfigureeritud konteinerite tõmmiseid, millede abil saab hakata kohe erinevaid rakendusi ehitama. Laadime näiteks alustamiseks alla konteineris kasutamiseks mõeldud kergekaalulise ja ilma lisatarkvarata ubuntu konteineri img
# 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
Tähele tasub panna, et vahel võib võtta teenustel konteineri sees käimaminek aega, kuni tekitavad vajalikud failid ja andmebaasid jne. Lisaks saab tõmmata ka kindlaid mysql versioone
docker pull mysql:5.6
Konteineri logisid näeb konteineri ID alusel, nt
# docker logs 3b8a054c778d
Logid esitatakse lakooniliselt näidates vaid olulisemaid vigu, nt stiilis
Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'wordpress'@'172.18.0.3' (using password: YES) in Standard input code on line 22 MySQL Connection Error: (1045) Access denied for user 'wordpress'@'172.18.0.3' (using password: YES)
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 wordpressi rakendus koos mysql serveriga ko 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
Pöördudes nüüd avaliku aadressi pordile 8000 peaksime nägema wordpressi paigaldust
Soovides mõlemad masinad sulgeda
# docker-compose stop
Käsuga docker stats näeb jooksvalt konteinerite cpu, mälu, IO ja võrgukasutust
# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 5c47855895c3 server3_wordpress_1 0.00% 89.96MiB / 7.79GiB 1.13% 3.58MB / 4.89MB 336kB / 1.59MB 11 034eb5845072 server3_db_1 0.04% 97.74MiB / 7.79GiB 1.23% 1.34MB / 3.14MB 10.7MB / 85.7MB 32
Dockeri kettaajaotus
TODO
Docker cluster ehk swarm
Loodava swarmi clustri arhidektuur oleks järgnev
Manager - 192.168.1.102 Node1 - 192.168.1.103 Node2 - 192.168.1.104 Node3 - 192.168.1.105
Paigaldame docker-machine käsu
base=https://github.com/docker/machine/releases/download/v0.14.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine
Tekitame esimeses nodes swarmi clustri
# docker swarm init --advertise-addr 192.168.1.102 Swarm initialized: current node (vgbw9pkyuibwpkcjxk8cvhy0o) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-04ckwo5fpnej5gbygpcdyole7wp6fk5pl6sf3ljsblu2r65bow-9gj0xfacx628pmaqs9m3tznbe 192.168.1.102:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Lisame ülejäänud kaks node swarmi, selleks käivitame nendes ülal initi poolt antud käsu
# docker swarm join --token SWMTKN-1-04ckwo5fpnej5gbygpcdyole7wp6fk5pl6sf3ljsblu2r65bow-9gj0xfacx628pmaqs9m3tznbe 192.168.1.102:2377 This node joined a swarm as a worker.
Loodud clustri staatust näeme järgnevalt
# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 7e2nb4o59vvrq92588mdt0s8x test Ready Active gvy7dc4lv7gkjinfjrd45g5sg test Ready Active vgbw9pkyuibwpkcjxk8cvhy0o * test Ready Active Leader
Nüüd saame näiteks luua sinna konteineri viimasest httpd nimelisest konteinerist ja teha nad avalikuks pordilt 80
# docker service create --name webserver -p 80:80 httpd
Tekitame kaks httpd konteinerit
# docker service scale webserver=2
Vaatame, et mis meil välja tuli
# docker service ps webserver ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS c3vsktx9vm4j webserver.1 httpd:latest test1 Running Running 3 minutes ago qgwpdt5w481b webserver.2 httpd:latest test2 Running Running 50 seconds ago
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/