2. www.luxoft.com 2
Docker (Март 2013), Kubernetes (Июнь 2014), Docker Swarm (Июнь 2016)
но я познакомился с ними только недавно
Это обзор для тех кто еще об этом не слышал или не пользуется
Кому это нужно:
1. если есть уже серверные приложения под линукс
2. и нужно удобно их разворачивать,
сделать деплой с нуля и обновление максимально дешевым и стандартным
3. готовые healthcheck, restart, monitoring, запуск нескольких инстансов
4. build environements со специфическими версиями и без виртуалок
в Windows МС тоже что-то делает
3. www.luxoft.com 3
Google Play
Вы наверно использовали, чтобы установить приложение нужен один клик
На разных сборках андроида
Скачиваете - и сразу всё гарантированно работает
И также полностью сносится не оставляя следа в системе
Все приложения запускаются изолировано, в одной ОС, оверхед минимальный
4. www.luxoft.com 4
AspNetCore SDK 2.2 Node.js 6.0
Билд сервер VM
App 1.0
artifacts.zip
App 2.0
artifacts.zip
AspNetCore Runtime 2.2 Node.js 6.0
Production / Development / Test Env VM
Git
Latest src Build scripts
Storage VM
MySql 5.0 Redis 1.2
Redis DB
MySql DB
Website
Deployment
scripts
Worker
app
Nginx
Internet
Health checkconfig
VM setup
scripts
server setup
scripts
log collection
log viewer
health dashboard
shell, ansible/chef
/puppet/terraform
Доступный отовсюду
x N
x N
5. www.luxoft.com 5
My Web Application Environment deployment tool
- Возможность удалять оставляя чистую машину
- Возможность запуска много разного изолировано - на одной машине
- Обновление – одним кликом
- Предсобраные и сконфигурированные tool-приложения
6. www.luxoft.com 6
В реальности – много сложных скриптов на не лучших языках – setup env, deploy,… - писать и поддерживать
Нестандартные решения
На одной виртуалке – только одна версия Каждого приложения.
Как полностью очистить от всех старых версий всех приложений?
8. www.luxoft.com 8
Docker
Установка на чистую Ubuntu одной командой
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh
Стандартный image registry (Docker hub)
или свой docker registry одной командой
Малый размер images
9. www.luxoft.com 9
Docker
Установка на чистую Ubuntu одной командой
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh
Стандартный image registry (Docker hub)
или свой docker registry одной командой
Малый размер images
поставить серверные приложения из image или обновить версию
- одной командой
> docker run docker.io/my-user/my-webapp:1.0
10. www.luxoft.com 10
Docker
Установка на чистую Ubuntu одной командой
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh
Стандартный image registry (Docker hub)
или свой docker registry одной командой
Малый размер images
поставить серверные приложения из image или обновить версию
- одной командой
> docker run docker.io/my-user/my-webapp:1.0
работает на любом env (private servers, clouds – google, amazon, azure)
Ubuntu, Centos, RedHat…
11. www.luxoft.com 11
Docker
так же просто удалить, никакого влияния на хост
> docker stop container-id && docker rm container-id
12. www.luxoft.com 12
Docker
так же просто удалить, никакого влияния на хост
> docker stop container-id && docker rm container-id
изоляция контейнеров - можно ставить несколько разных версий
любого приложения на одной машине
- linux namespaces (2002) - Isolate Mount, Processes, Network, Hostname, Mem
- control-groups (2006) - Resource Limiting, Prioritization, Accounting, Checkpoint
13. www.luxoft.com 13
Docker
так же просто удалить, никакого влияния на хост
> docker stop container-id && docker rm container-id
изоляция контейнеров - можно ставить несколько разных версий
любого приложения на одной машине
- linux namespaces (2002) - Isolate Mount, Processes, Network, Hostname, Mem
- control-groups (2006) - Resource Limiting, Prioritization, Accounting, Checkpoint
огоромная экосистема – стандарт - хостинг во всех клаудах
Множество готовых images в registries, много документации и примеров
14. www.luxoft.com 14
Docker
Добавить артефакты вашего приложения в image
Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2.5
COPY ./bin/Release/Publish /TestApp
EXPOSE 5000
ENTRYPOINT ["dotnet", "/TestApp/TestApp.dll"]
> docker build -t test-app .
и выложить в registry – просто
> docker login --username A --password P
> docker tag test-app A/test-app
> docker push A/test-app
15. www.luxoft.com 15
Docker
Также просто запустить ваш image в container,
Полностью изолированно от всего остального на VM
> docker run -p 80:5000 --name my-app docker.io/A/test-app:1.0
16. www.luxoft.com 16
Docker
Также просто запустить ваш image в container,
Полностью изолированно от всего остального на VM
> docker run -p 80:5000 --name my-app docker.io/A/test-app:1.0
На любом environment
17. www.luxoft.com 17
Docker
Также просто запустить ваш image в container,
Полностью изолированно от всего остального на VM
> docker run -p 80:5000 --name my-app docker.io/A/test-app:1.0
На любом environment
Также просто удалить контейнер без следов на host
> docker stop my-app && docker rm my-app
18. www.luxoft.com 18
Docker
Cделать чтобы несколько containers имели между собой приватную сеть + DNS
> docker stack deploy --compose-file=docker-compose.yml my-stack
version: '3'
services:
web: - can call “redis:6379” like host
image: my-app:1.0
ports:
- “80:5000"
volumes:
- ./host/path:/data
redis:
image: "redis:alpine:1.0"
26. www.luxoft.com 26
разные способы запуска pods (containers)
- Deployments, StatefulSets (databases), Jobs, Daemons
- Все изолировано namespaces, names, labels (test, dev, prod,..)
- множество параметров настройки, healthcheck, restart, scaling
- Dns между services
- configs/secrets - настройки, connection strings передаваемые в containers
- persistent volumes
App 1.0
Docker image registry
App 2.0
Postgres 4.0
Ingress controller
Ingress controller
Pod Network
Pod Network
27. www.luxoft.com 27
Kubernetes
Всё гибко – работа с подсистемами через интерфейсы
- Разные container runtimes, не только docker (containerd, cri-o..)
- Разные Networks между pods (containers)
- Calico, Canal, Cilium, Flannel, Kube-router, Romana, Weave Net, JuniperContrail/TungstenFabric, Contiv-VPP
- Разные Ingress controllers
- NGINX, Ambassador, AppsCode, Contour, Citrix, F5 BIG-IP, Gloo, HAProxy, Istio, Kong, Traefik
- Разные volume drivers
- Множество готовых решений
интегрирующихся в kuber
(logs, monitoring,…)
и готовых конфигов для приложений
36. www.luxoft.com 36
Нужно ли заворачивать сервисы свого проекта в докер - да, это очень удобно
стандартные решения понятные всем, много готовых images,...
Нужен ли Kubernetes вместо докер compose/swarm
- если очевидно нужно одно из его преимуществ
- клауды где есть только Kubernetes
- фичи которые есть только в нём, гибкость, может лучше производительность
- множество примеров и конфигов установки стандартных приложений