dockerize the world - presentation from hradec kralove
TRANSCRIPT
Dockerize the world!
Martin Damovský
My plan for today
• Introduction to Docker
• Some demos
• Docker in Cloud
• IoT and Docker
• News from DockerCon 2015 in SF and Barcelona
Who am I?
• Software engineer (java, DBs, continuous integrations, docker, etc.)
• Grew up in small city near Ostrava
• Tieto Czech s.r.o. Ostrava, Gemalto in Prague
• Now in Vendavo CZ in Prague
• Twitter @damovsky
Who knows Docker?
Who uses Docker in production?
What is ?
• Docker is virtualization technology
• With docker you can:
• virtualize only the app and not the whole OS
• Isolate each app
• Restrict CPU / memory / for each app
• Easily distribute your app
• Automate your development / test / production environment
What is ?
• Docker is a whole platform for using containers
• Includes tools for:
• container sharing
• orchestrations, clustering, etc.
What is ?
• Docker is for Linux only
• But…Microsoft works on Docker for Windows
• Apple (MacOS) = no native support planned
Docker project• Docker inc. is a sponsor of “Docker” open source project
• https://github.com/docker/docker
• Written in Go
• Main contributors: Docker team, RedHat, IBM, Google, Cisco…
• Initial release: 13 March 2013
• Operation system: Linux
• www.docker.com
Docker vs VM
How does it works?
• Use Linux kernel support for isolation (CPU, memory, I/O, network….)
• Cgroups – linux kernel feature to limit resource usages
• Namespaces – linux kernel feature to isolate services from each other
• Earlier LXC – https://linuxcontainers.org
• Now – runC (Libcontainer) https://github.com/opencontainers/runc
Docker mottoBuild – build container with your app
Ship - use docker registry to distribute your app
Run - wherever docker runs, your app will run as well
DockerFile = cookbook for docker image• Recipe for building the image• Easy to transfer copy&paste• Easy for versioning in Git, etc..
FROM debian:wheezy
RUN apt-get updateRUN apt-get install -y python2.7
CMD python2.7 -m SimpleHTTPServer 8000
Docker “flow”1. create docker file2. build dockerfile
$ docker build -t myTagName .3. run container
$ docker run -d myTagName
Dockerfile• # Demo 01• https://asciinema.org/a/7m72btfpczbshfkxh26smwgqv
Dockerfile commands• FROM
• RUN
• CMD
• ADD
• USER
• ENV
• etc….see at http://docs.docker.com/reference/builder/
It’s all about the money!LAYERS!
Dockerfile vs layersFROM debian:wheezy
RUN apt-get updateRUN apt-get install -y python2.7
CMD python2.7 -m SimpleHTTPServer 8000
└─61f… Virtual Size: 85.1 MB Tags: debian:wheezy └─5b8.. Virtual Size: 93.4 MB
└─604.. Virtual Size: 123.5 MB└─43e.. Virtual Size: 123.5 MB Tags: python:latest
Dockerfile, build, run• # Demo 02
• Python http server + Connect to container
Docker Image
Base Image (debian/ubuntu/…)
Docker Image
Base Image (debian/ubuntu/busybox…)
Image – Added Apache
Docker Image Container
Base Image (debian/ubuntu/busybox…)
Image – Added Apache
Writable Layer
Docker Container and its file system layers
Base Image (debian/ubuntu/busybox…)
Image – Added Apache
Writable Layer
Image – Added MySQL
Writable Layer
Container #1 Container #2
Docker registry• https://registry.hub.docker.com/
• Official repo (trusted builds)
• WordPress, MySQL, NgInx, Node, CentOS, Ubuntu, Postgress, mongo, rails, ruby, java,
python, golang, jenkins, php, tomcat, maven, httpd, …
• Public repo with thousands of images
• Integration with GitHub
• You push the Dockerfile to github
• Docker Registry builds the docker image for you
Docker requirements• Technical:• Linux kernel 3.10 +
• Knowledge:• Linux, bash scripting, etc
Docker on Windows / Mac OS
Linux
Docker daemon
Container
Container
Container
Docker client
Mac OS / Windows
VM with Linux
Docker daemon
Container
Container
Container
Docker client
Docker API•http://docs.docker.com/engine/reference/api/docker_remote_api_v1.21/•REST API for everything•Container management• Image management•Docker configuration, etc…
Docker itself is….like a java
Without tools and frameworks it’s useless
Docker Toolbox• Docker engine
• Kinematic – GUI, runs on MacOS + Windows• Docker Machine – automates Docker environment preparation• Docker Compose – define multi-container application in one file• Demo 03
• Docker Swarm – clustering the containers
Where can Docker be helpful?
…when new dev starts configuring project
…it works on my machine!
J2EE Application in Docker - demo
J2EE Application in Docker - demo• https://github.com/mgreau/docker4dev-tennistour-app• https://asciinema.org/a/2d6erl2tlu1j0b3rfvxwabnkv• #Demo 04
Docker and IoT (Raspberry Pi)• ARM vs x86/64 architecture• Docker to plan official support ARM• HypriotOS – linux distro for Raspberry• Hypriot OS based images: • https://hub.docker.com/u/hypriot/
RPI 2 + Docker = 2499 containers• LIVE DEMO – hypriot OS httpd• https://vimeo.com/131966874• http://www.slideshare.net/Docker/docker-online-meetup-27-raspberr
y-pi-dockercon-challenge
Docker in Cloud• Digital Ocean• UI Tutum.co – worth to try!
• Amazon• Microsoft Azure• Google Cloud
$ Price $• Digital Ocean: $5 / 512 MB, 1 core, 20 GB SSD, 1TB Transfer• Amazon: it depends on many factors• Microsoft Azure• Google Cloud: free up to 5 nodes, 6+ nodes $0.15 HR/Cluster • Alternative: VSPFree.cz 4GB RAM, 8 cores, 900 Kč /3 Months
Docker and Microsoft ???
Docker and Microsoft ?
Docker and Microsoft ?• Microsoft contributes to docker• see pull request https://github.com/docker/docker/pull/9113
• Microsoft Azure supports docker• Native Docker on Windows Server is coming…
Docker and PHP ?• Piece of cake ;-)• #Demo 05
Docker orchestration• Docker Swarm• Kubernetes• Apache Mesos
Run GUI in Docker?• https://blog.jessfraz.com/post/docker-containers-on-the-desktop/• #Demo 06
Dockercraft• A simple Minecraft Docker client, to visualize and manage Docker
containers.
Live Migration!• Migration of running container from one host to second• https
://blog.docker.com/2015/11/dockercon-eu-2015-container-migration-tool/
What’s in Docker roadmap?• Official ARM support• Docker on Windows Server• Docker on IBM systems, Solaris
Troubles you may face….
….with Docker
Docker Registry - Image Repository• Public – no way for 99,9% apps
• Private• Limitation – money & your internet connection speed
• Local repo - can require some management• Authentication (users/passwords/roles, etc…)• cleaning olds images• disk space• backup (!!!!)
Docker Public Registry and license terms
Unrealistic tutorials and demos• Demos = “wow effect”• Typical problem for production use – database in container • Database container can really be big! (>10 GB or more)• Data should be outside of container and backuped• Virtualization decreases the performance
Docker containers and images• Image is too big -> Squash layers• Container has been stopped, but it blocks the port...• Stopped != removed• docker ps -a -q | xargs -n 1 -I {} docker rm {}
Run Docker on dedicated machine only• You should use the latest Linux Kernel• Some bug fixes may require you to update Linux Kernel• Who can update Linux kernel in production?
• Which file system to use? BTRFS / AUFS / ?• Which OS ?• Core OS• RancherOS• Well known like a CentOS, Red Hat, Ubuntu ?
Links:• My demos• https://github.com/damovsky/jug-ostrava-docker
• Yowie – Open source project by @VitekTajzich• https://github.com/vendavo/yowie