[email protected] · cmd - modificări Imagine de bază ubuntu:latest commit Container n Container...
Transcript of [email protected] · cmd - modificări Imagine de bază ubuntu:latest commit Container n Container...
Agenda
• Ce este docker?• Cum funcționează Docker?• Unde și când pot folosi Docker?• Cum folosesc Docker?• Studii de caz• Ce versiuni există și ce cerințe hardware și software există?• Q&A
2
Static website
Web frontend
User DB
QueueAnalytics DB
Background workers
API endpoint
nginx 1.5 + modsecurity + openssl + bootstrap 2
postgresql + pgv8 + v8
hadoop + hive + thrift + OpenJDK
Ruby + Rails + sass + Unicorn
Redis + redis-sentinel
Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs + phantomjs
Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-client
Development VM
QA server
Public Cloud
Disaster recovery
Contributor’s laptop
Production Servers
Context
3
Soft
war
eIn
fras
truc
tură
Production Cluster
Customer Data Center
Matrice compatibilități
4
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development VM QA Server Single Prod
ServerOnsite Cluster
Public Cloud
Contributor’s laptop
Customer Servers
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
Din nou matrice…
6
Bunu
riM
etod
e de
tra
nspo
rt
Soluția: Container standard de transport
7
… ce poate fi încărcat, descărcat, stivuit, transferat de la un mijloc de transport la altul = Transport eficient
Container standard ce poate conține orice tip de produs sigilat până la destinație…
Static website Web frontend User DB Queue Analytics DB
Development VM
QA server Public Cloud Contributor’s laptop
Docker este un sistem de containere de transport pentru cod
8
Soft
war
eIn
fras
truc
tură
Production Cluster
Customer Data Center
Un motor ce permite encapsularea oricărei aplicații într-un container portabil …
… ce poate fi manipulat folosind operații standard și poate fi rulat pe orice platformă hardware.
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development VM QA Server Single Prod
ServerOnsite Cluster
Public Cloud
Contributor’s laptop
Customer Servers
Soluția Docker
9
Separația responsabilităților
• Programator• Responsabil cu ce e în interiorul
containerului• Cod• Librării• Manager pachete• Aplicații• Date
• Toate serverele de producție sunt identice
10
• Administrator• Responsabil cu ”manipularea”
containerului• Logare• Acces• Monitorizare• Configurare rețea
• Toate containerele suportă aceleași comenzi: start, stop, copy, attach, migrate, etc. the same way
Istorie
11
• Lansat în 2013• 2015 - 25.600 stele GitHub, 6.800 forks și 1.100 contribuitori• 2016 - Cisco, Google, Huawei, IBM, Microsoft, Red Hat• 2017 *:• 500.000+ aplicatii containerizate• 100.000+ third party projects• 3.000+ contributori• 8 miliarde de descărcări• 1 miliard $ valoare estimată
• 1 Martie 2017 - Docker v17.03.0-ce* http://expandedramblings.com/index.php/docker-statistics-facts/
Agenda
• Ce este docker?• Cum funcționează Docker?• Unde și când pot folosi Docker?• Cum folosesc Docker?• Studii de caz• Ce versiuni există și ce cerințe hardware și software există?• Q&A
12
App A
Containere vs. Mașini Virtuale
13
Hypervisor
Host OS
Server
Guest OS
Bins/ Libs
App A’
Guest OS
Bins/ Libs
App B
Guest OS
Bins/ Libs
App A’
Host OS
Server
Bins/Libs App A
Bins/Libs
App B
App B’
App B’
App B’
VM
Container
Containerele sunt izolate dar folosesc același OS
Guest OS
Guest OS
…rezultă o eficiență sporită în spațiu ocupat, versionare librării, start, stop, restart, etc.
Docker Engine
Optimizare prin Docker
14
Bins/ Libs
App A
App v1
App Δ
Bins/
App A
Bins/ Libs
App A’
Guest OS
Bins/ Libs
App v2
Diferențial la nivel de aplicație și la nivel de librării
App A
Guest OS
Bins/ Libs
Copie App v1
Librării partajate
App A
Guest OS
Guest OS
Mașini virtuale Containere
Tehnologia Docker
• libvirt - Platform Virtualization• LXC (LinuX Containers) initial apoi libcontainer (Go): izolarea
containerelor pe aceeași gazdă• Layered File System
15
[Source: https://docs.docker.com/terms/layer/]
Principiile sistemului Docker
16
Source Code
Repository
Dockerfile
Docker Engine
Docker Container
Image Registry
Build
Host 2 OS
Container A
Container B
Container C
Container A
Push
Search Pull
Run
Host 1 OS Docker Engine
Modificări și update-uri
17
Docker Engine
Docker Container
Image Registry
Docker Engine
Push
Update
Bins/ Libs
App v1.0
v1.1
Bins/
Container pt App v1.0
Rulează v2.0
Container pt App v2.0
v1.1
Bins/
Bins/ Libs
App v1.0
Bins/
Bins/ Libs
App v2.0
Containerul conține v1.0 și se va actualiza la v2.0 prin metode
diferențiale.
Container pt App v1.2
Agenda
• Ce este docker?• Cum funcționează Docker?• Unde și când pot folosi Docker?• Cum folosesc Docker?• Studii de caz• Ce versiuni există și ce cerințe hardware și software există?• Q&A
18
Docker în cercetare
• Dezvoltare aplicații• Testare aplicații existente• Instalare aplicații (Apache, DB, etc.)• Simulare medii complexe (multi-mașină)• Comparații între tehnologii• Crearea de POC
19
Avantaje Docker
• Reducere consum resurse• Repository public de imagini• Ușurința în utilizare• Lucru colaborativ• Izolare proiecte• Testare facilă a aplicațiilor• Deployment rapid• Documentație bine structurată• Comunitate largă
20
Dezavantaje Docker
• La fel de lent ca și soluțiile de virtualizare (KVM)• Overhead Test*: echo “Hello world!”• 6 ms nativ• 1000 ms pe MacOS• 390 ms Linux
* https://www.iron.io/the-overhead-of-docker-run/
21
Agenda
• Ce este docker?• Cum funcționează Docker?• Unde și când pot folosi Docker?• Cum folosesc Docker?• Studii de caz• Ce versiuni există și ce cerințe hardware și software există?• Q&A
22
Terminologie
• Imagine = “instantaneu” (snapshot) persistat ce poate fi rulat• Container = o instanță activă (ce poate fi rulată) a unei imagini
23
Imagine de bază ubuntu:latest Container 1
Container 1
run
cmd - modificări
Imagine de bază ubuntu:latest
commit
Container n
Container 3
Container 2
Docker “OS” - Comenzi la nivel imagine
• docker images• docker run• docker tag• docker pull• docker rmi• docker build
https://docs.docker.com/reference/ -> Engine (docker) CLI
24
Docker “OS” - Comenzi la nivel container
• docker ps• docker ps -a• docker start• docker stop• docker pause• docker rm• docker commit
https://docs.docker.com/reference/ -> Engine (docker) CLI
25
Dockerfile
• script de tip build• poate fi versionat și atașat surselor• creare automată de imagini
• Exemplu:FROM ubuntu ENV DOCK_MESSAGE Hello My World ADD dir /filesCMD ["bash", “someScript”]
https://docs.docker.com/engine/reference/builder/26
Partajare de directoare
• Partajarea cu mașina gazdă• Suprascrierea completă a directorului
• docker run –v /hostLog:/log ubuntu
https://docs.docker.com/engine/tutorials/dockervolumes/
27
Publicare de port-uri
• Port forwarding din container în mașina fizică
• docker run –p 8080:80 ubuntu
https://docs.docker.com/engine/reference/run/#uts-settings-uts
28
Rețelistică
• docker run --network="test" ubuntu• docker network ls• docker network inspect test
https://docs.docker.com/engine/userguide/networking/
29
Docker compose
• utilitar pentru rularea aplicațiilor multi-container• docker-compose.yml• docker-compose up• docker-compose down
https://docs.docker.com/compose/overview/
30
version: '3'services: web:
build: .ports: - "5000:5000"
volumes: - .:/code - logvolume01:/var/log
links: - redis
redis: image: redis
volumes: logvolume01: {}
https://docs.docker.com/compose/compose-file/
Agenda
• Ce este docker?• Cum funcționează Docker?• Unde și când pot folosi Docker?• Cum folosesc Docker?• Studii de caz• Ce versiuni există și ce cerințe hardware și software există?• Q&A
31
Studii de caz
• https://docs.docker.com/samples/ :• ASP.net core + SQL Server on Linux• Django and PostgreSQL• CouchDB• MongoDB• Rails and PostgreSQL• Redis• Wordpress
32
Agenda
• Ce este docker?• Cum funcționează Docker?• Unde și când pot folosi Docker?• Cum folosesc Docker?• Studii de caz• Ce versiuni există și ce cerințe hardware și software există?• Q&A
39
Versiuni Docker
40
Community Edition
Enterprise Edition Basic
Enterprise Edition
Standard
Enterprise Edition
Advanced
Engine containere, orchestratii, rețelistică, securitate DA DA DA DA
Infrastructură certificată, plugin-uri și containere ISV
DA DA DA
Management imagini Repo public DA DA
Management containere DA DA
Scanare securitate imagini DA
Preț 0 750$ /nod 1500$ / nod 2000$ / nod
Cerințe software și hardware
41
Platformă Docker CE x86_64 Docker CE ARM Docker EE
Ubuntu DA DA DADebian DA DARHEL DA
CentOS DA DAFedora DA
Oracle Linux DASUSE DA
Windows Server 2016 DAWindows 10 DA
macOS DAMicrosoft Azure DA DA
Amazon Web Services DA DA
CPU 2 GhzMemorie 2 Gb
HDD 3 Gb + spațiu imagini ( 100 Mb - 1 Gb / img)
Vă mulțumesc!
Q & A
42
www.docker.coms.l. dr. ing. Vlad Ciobanu