DOCKER FOR THE BRAVE
INTRODUCTION FOR BUSY PEOPLE
AGENDA
AGENDA
▸ The need for containers
▸ Overview: Docker and the Docker Ecosystem
▸ Basic Docker Workflows
“Well, it worked on my machine!”
THE NEED FOR CONTAINERS
TRADITIONAL SOFTWARE DELIVERY SUFFERS FROM GAP BETWEEN DEV AND PROD
STABILITY AND ROBUSTNESSFLEXIBILITY
Development Production
THE NEED FOR CONTAINERS
TRADITIONAL SOFTWARE DELIVERY SUFFERS FROM GAP BETWEEN DEV AND PROD
Loan Application
JDK 8
WILDFLY
MYSQL
MAC OSX
Production
JDK 6
WEBLOGIC
ORACLE
AIX
FIREWALL
SECURITY
INFRASTRUCTURE
MONITORING
…
?
Magic Operations Guide Template
Unicorns do not exist!
THE NEED FOR CONTAINERS
CONTAINERIZED APPLICATIONS OFFER A WAY TO NARROW THE GAP
▸ Immutable containers reduce human errors
▸ Instead of “works on my machine” you deploy
the machine
▸ Think diapers
THE NEED FOR CONTAINERS
PACKAGE ONCE
DEPLOY ANYWHERE
CODE
RUNTIME SYSTEM TOOLS
LIBRARIES
Container
THE NEED FOR CONTAINERS
Loan Application
JDK 7
MYSQL CORE OS
WILDFLY
Container
Production
Sales Application
JDK 8
NEO4J ALPINE
JETTY
Container
JDK 7
MYSQL CORE OS
WILDFLY
Container
JDK 8
NEO4J ALPINE
JETTY
Container
THE NEED FOR CONTAINERS
VIRTUALIZATION VS. CONTAINERS
SPEED FOOTPRINT SIMPLICITY
DOCKER BOOTCAMP
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE DOCKER ECOSYSTEM CONSISTS OF FIVE ESSENTIAL PARTS
Docker
SwarmMachine
Compose Network
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
WE’LL ONLY COVER THE BASICS
Docker
Machine
Compose
Swarm
Network
LINUX VM
(BOOT2DOCKER.ISO)
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
DOCKER-MACHINE HELPS GETTING STARTED ON NON LINUX BOXES
DOCKER HOST
WILDFLY
MYSQL
REDIS
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
DOCKER TOOLBOX TO THE RESCUE
▸ Offers a one stop Docker setup for non-
Linux machines
▸ Easiest way to get started on Mac and
Windows
▸ Includes everything covered in theses slides
https://www.docker.com/docker-toolbox
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
DOCKER IN A NUTSHELL
REGISTRYDOCKER HOST
DOCKER CLIENT
CONTAINER
CONTAINER
CONTAINER
IMAGE
IMAGE
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
IMAGES AND CONTAINERS
IMAGE
ALPINE:3.1
CONTAINER: DREAMY_HUGLE
B00F46831AF3
CONTAINER: SLEEPY_GOLICK
F0A1172ADB12
CONTAINER: JOLLY_BABBAGE
D0BAE89AD214
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
CONTAINER LIFECYCLE
CREATED
STARTED
STOPPED
REMOVED
DEMO TIME
BUILDING A LOCAL TWITTER
▸ Bootstrap demo
▸ Basic container usage
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
EXPOSING SERVICES
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
CONTAINER PORTS ARE NOT VISIBLE OUTSIDE OF THE DOCKER HOST
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
CONTAINER PORTS ARE NOT VISIBLE OUTSIDE OF THE DOCKER HOST
?
DOCKER HOST
CONTAINER: DREAMY_HUGLE
B00F46831AF3
80
443
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
CONTAINER PORTS MUST BE MAPPED TO EXTERNALLY VISIBLE PORTS
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
CONTAINER PORTS MUST BE MAPPED TO EXTERNALLY VISIBLE PORTS
DOCKER HOST
CONTAINER: DREAMY_HUGLE
B00F46831AF3
80
443
8080
DEMO TIME
BUILDING A LOCAL TWITTER
▸ Bootstrap demo
▸ Basic container usage
▸ Running ngnix
▸ Exposing ports
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS VERSIONED
CONTAINER: TEST
F0A1172ADB12
CREATED
STARTED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS VERSIONED
CONTAINER: TEST
F0A1172ADB12
foo
CREATED
STARTED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS VERSIONED
CONTAINER: TEST
F0A1172ADB12
foo
STARTED
STOPPED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM SURVIVES RESTARTS
CONTAINER: TEST
F0A1172ADB12
foo
STARTED
STOPPED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM SURVIVES RESTARTS
CONTAINER: TEST
F0A1172ADB12
foo
STARTED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS VERSIONED
CONTAINER: TEST
F0A1172ADB12
foo
CREATED
STARTED
STOPPED
REMOVED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS TRANSIENT
CONTAINER: TEST
F0A1172ADB12
foo
STOPPED
REMOVED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS TRANSIENT
CONTAINER: TEST
D8C89E9BB6AB
CREATED
STARTED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS TRANSIENT
CONTAINER: TEST
D8C89E9BB6AB
CREATED
STARTED
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE CONTAINER FILESYSTEM IS SEPARATED FROM THE HOST ENVIRONMENT
HOST
CONTAINER: DREAMY_HUGLE
B00F46831AF3
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
PERSISTENT VOLUMES ARE USED TO SHARE DATA BETWEEN HOST AND CONTAINER
HOST
CONTAINER: DREAMY_HUGLE
B00F46831AF3
CONTAINER: SLEEPY_GOLICK
F0A1172ADB12
VOLUME: DATA
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
PERSISTENT VOLUMES ARE USED TO SHARE DATA BETWEEN HOST AND CONTAINER
HOST
CONTAINER: MYWEB
B00F46831AF3
VOLUME:
~/SHARED
VOLUME:
/USR/SHARE/NGINX/HTML/
foo.htmlfoo.html
DEMO TIME
BUILDING A LOCAL TWITTER
▸ Bootstrap demo
▸ Basic container usage
▸ Running ngnix
▸ Exposing ports
▸ Sharing volumes and data
▸ Monitoring
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
THE DOCKERFILE IS THE RECIPE FOR AN IMAGE
IMAGE
KOENIGHOTZE/JDK8
Dockerfile
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
READ WRITE LAYER
READ LAYER
READ LAYER
READ LAYER
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
OVERVIEW: DOCKER AND THE DOCKER ECOSYSTEM
IMAGES ARE LAYERED; EACH LAYER IS CACHED OR FETCHED INDIVIDUALLY
KOENIGHOTZE/JDK8
FROM GLIDERLABS/ALPINE:3.3
…
CMD ["BASH", "-L"]
MAINTAINER DAVID SCHMITZ
VOLUME [$SRC_VOLUME]
COMPLEX SCENARIOS
USING COMPOSE
COMPOSITION
COMPLEX SCENARIOS USING COMPOSE
MANAGING DEPENDENCIES WITH DOCKER-COMPOSE
CONTAINER: DREAMY_HUGLE
B00F46831AF3
CONTAINER: SLEEPY_GOLICK
F0A1172ADB12
CONTAINER: JOLLY_BABBAGE
D0BAE89AD214
COMPLEX SCENARIOS USING COMPOSE
USING DOCKER-COMPOSE FOR DEPENDENCIES*
BOOKING
ping mongodb
MONGODB GUEST
curl $GUEST_URI
*Note: Compose V1 Syntax
MOVIE CONTAINER
COMPLEX SCENARIOS USING COMPOSE
DOCKER SINGLE HOST NETWORKING USING LINKS
MOVIE.WAR
ACTOR CONTAINER
ACTOR.WAR
DEMO TIME
CREATING A SIMPLE COMPOSITION WITH SPRING-BOOT AND DOCKER
▸ Create simple web application
▸ Add database as container
▸ Create compositions file
▸ Add volumes
BEYOND DOCKER
WHAT IS NEXT?
▸ CoreOs and rkt
▸ Docker Swarm and Kubernetes
▸ Unikernels (!)
BEYOND DOCKER AND SUMMARY
SUMMARY
▸ Docker is production ready
▸ Docker-Compose is targeted towards developers and should not be used for
production
▸ Might have some issues with regards to networking and clustering
▸ Multi-Cloud deployments possible
▸ Community is vital and eager to help
WANT TO KNOW MORE?
TRY ONE OF THESE GREAT VAULTS OF WISDOM
▸ Docker Home Page: https://www.docker.com/
▸ Docker Cheat Sheet: https://github.com/wsargent/docker-cheat-sheet
▸ James Turnbull, Dockerbook: http//www.dockerbook.com/
THANK YOU!
<david.schmitz@senacor.com>
BACKUP
<>
THE NEED FOR CONTAINERS
Loan Application
JDK 7
MYSQL CORE OS
WILDFLY
Container
JDK 8
NEO4J ALPINE
JETTY
Container
RUBY
POSTGRES ALPINE
RAILS
Container
…
… …
…
Container

Docker for the Brave

  • 1.
    DOCKER FOR THEBRAVE INTRODUCTION FOR BUSY PEOPLE
  • 2.
    AGENDA AGENDA ▸ The needfor containers ▸ Overview: Docker and the Docker Ecosystem ▸ Basic Docker Workflows
  • 3.
    “Well, it workedon my machine!”
  • 4.
    THE NEED FORCONTAINERS TRADITIONAL SOFTWARE DELIVERY SUFFERS FROM GAP BETWEEN DEV AND PROD STABILITY AND ROBUSTNESSFLEXIBILITY Development Production
  • 5.
    THE NEED FORCONTAINERS TRADITIONAL SOFTWARE DELIVERY SUFFERS FROM GAP BETWEEN DEV AND PROD Loan Application JDK 8 WILDFLY MYSQL MAC OSX Production JDK 6 WEBLOGIC ORACLE AIX FIREWALL SECURITY INFRASTRUCTURE MONITORING … ?
  • 6.
  • 8.
  • 9.
    THE NEED FORCONTAINERS CONTAINERIZED APPLICATIONS OFFER A WAY TO NARROW THE GAP ▸ Immutable containers reduce human errors ▸ Instead of “works on my machine” you deploy the machine ▸ Think diapers
  • 10.
    THE NEED FORCONTAINERS PACKAGE ONCE DEPLOY ANYWHERE CODE RUNTIME SYSTEM TOOLS LIBRARIES Container
  • 11.
    THE NEED FORCONTAINERS Loan Application JDK 7 MYSQL CORE OS WILDFLY Container Production Sales Application JDK 8 NEO4J ALPINE JETTY Container JDK 7 MYSQL CORE OS WILDFLY Container JDK 8 NEO4J ALPINE JETTY Container
  • 12.
    THE NEED FORCONTAINERS VIRTUALIZATION VS. CONTAINERS SPEED FOOTPRINT SIMPLICITY
  • 13.
  • 14.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE DOCKER ECOSYSTEM CONSISTS OF FIVE ESSENTIAL PARTS Docker SwarmMachine Compose Network
  • 15.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM WE’LL ONLY COVER THE BASICS Docker Machine Compose Swarm Network
  • 16.
    LINUX VM (BOOT2DOCKER.ISO) OVERVIEW: DOCKERAND THE DOCKER ECOSYSTEM DOCKER-MACHINE HELPS GETTING STARTED ON NON LINUX BOXES DOCKER HOST WILDFLY MYSQL REDIS
  • 17.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM DOCKER TOOLBOX TO THE RESCUE ▸ Offers a one stop Docker setup for non- Linux machines ▸ Easiest way to get started on Mac and Windows ▸ Includes everything covered in theses slides https://www.docker.com/docker-toolbox
  • 18.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM DOCKER IN A NUTSHELL REGISTRYDOCKER HOST DOCKER CLIENT CONTAINER CONTAINER CONTAINER IMAGE IMAGE
  • 19.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM IMAGES AND CONTAINERS IMAGE ALPINE:3.1 CONTAINER: DREAMY_HUGLE B00F46831AF3 CONTAINER: SLEEPY_GOLICK F0A1172ADB12 CONTAINER: JOLLY_BABBAGE D0BAE89AD214
  • 20.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM CONTAINER LIFECYCLE CREATED STARTED STOPPED REMOVED
  • 21.
    DEMO TIME BUILDING ALOCAL TWITTER ▸ Bootstrap demo ▸ Basic container usage
  • 22.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM EXPOSING SERVICES
  • 23.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM CONTAINER PORTS ARE NOT VISIBLE OUTSIDE OF THE DOCKER HOST
  • 24.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM CONTAINER PORTS ARE NOT VISIBLE OUTSIDE OF THE DOCKER HOST ? DOCKER HOST CONTAINER: DREAMY_HUGLE B00F46831AF3 80 443
  • 25.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM CONTAINER PORTS MUST BE MAPPED TO EXTERNALLY VISIBLE PORTS
  • 26.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM CONTAINER PORTS MUST BE MAPPED TO EXTERNALLY VISIBLE PORTS DOCKER HOST CONTAINER: DREAMY_HUGLE B00F46831AF3 80 443 8080
  • 27.
    DEMO TIME BUILDING ALOCAL TWITTER ▸ Bootstrap demo ▸ Basic container usage ▸ Running ngnix ▸ Exposing ports
  • 28.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS VERSIONED CONTAINER: TEST F0A1172ADB12 CREATED STARTED
  • 29.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS VERSIONED CONTAINER: TEST F0A1172ADB12 foo CREATED STARTED
  • 30.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS VERSIONED CONTAINER: TEST F0A1172ADB12 foo STARTED STOPPED
  • 31.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM SURVIVES RESTARTS CONTAINER: TEST F0A1172ADB12 foo STARTED STOPPED
  • 32.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM SURVIVES RESTARTS CONTAINER: TEST F0A1172ADB12 foo STARTED
  • 33.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS VERSIONED CONTAINER: TEST F0A1172ADB12 foo CREATED STARTED STOPPED REMOVED
  • 34.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS TRANSIENT CONTAINER: TEST F0A1172ADB12 foo STOPPED REMOVED
  • 35.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS TRANSIENT CONTAINER: TEST D8C89E9BB6AB CREATED STARTED
  • 36.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS TRANSIENT CONTAINER: TEST D8C89E9BB6AB CREATED STARTED
  • 37.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE CONTAINER FILESYSTEM IS SEPARATED FROM THE HOST ENVIRONMENT HOST CONTAINER: DREAMY_HUGLE B00F46831AF3
  • 38.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM PERSISTENT VOLUMES ARE USED TO SHARE DATA BETWEEN HOST AND CONTAINER HOST CONTAINER: DREAMY_HUGLE B00F46831AF3 CONTAINER: SLEEPY_GOLICK F0A1172ADB12 VOLUME: DATA
  • 39.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM PERSISTENT VOLUMES ARE USED TO SHARE DATA BETWEEN HOST AND CONTAINER HOST CONTAINER: MYWEB B00F46831AF3 VOLUME: ~/SHARED VOLUME: /USR/SHARE/NGINX/HTML/ foo.htmlfoo.html
  • 40.
    DEMO TIME BUILDING ALOCAL TWITTER ▸ Bootstrap demo ▸ Basic container usage ▸ Running ngnix ▸ Exposing ports ▸ Sharing volumes and data ▸ Monitoring
  • 41.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM THE DOCKERFILE IS THE RECIPE FOR AN IMAGE IMAGE KOENIGHOTZE/JDK8 Dockerfile
  • 42.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM READ WRITE LAYER READ LAYER READ LAYER READ LAYER
  • 43.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM
  • 44.
    OVERVIEW: DOCKER ANDTHE DOCKER ECOSYSTEM IMAGES ARE LAYERED; EACH LAYER IS CACHED OR FETCHED INDIVIDUALLY KOENIGHOTZE/JDK8 FROM GLIDERLABS/ALPINE:3.3 … CMD ["BASH", "-L"] MAINTAINER DAVID SCHMITZ VOLUME [$SRC_VOLUME]
  • 45.
  • 46.
    COMPOSITION COMPLEX SCENARIOS USINGCOMPOSE MANAGING DEPENDENCIES WITH DOCKER-COMPOSE CONTAINER: DREAMY_HUGLE B00F46831AF3 CONTAINER: SLEEPY_GOLICK F0A1172ADB12 CONTAINER: JOLLY_BABBAGE D0BAE89AD214
  • 47.
    COMPLEX SCENARIOS USINGCOMPOSE USING DOCKER-COMPOSE FOR DEPENDENCIES* BOOKING ping mongodb MONGODB GUEST curl $GUEST_URI *Note: Compose V1 Syntax
  • 48.
    MOVIE CONTAINER COMPLEX SCENARIOSUSING COMPOSE DOCKER SINGLE HOST NETWORKING USING LINKS MOVIE.WAR ACTOR CONTAINER ACTOR.WAR
  • 49.
    DEMO TIME CREATING ASIMPLE COMPOSITION WITH SPRING-BOOT AND DOCKER ▸ Create simple web application ▸ Add database as container ▸ Create compositions file ▸ Add volumes
  • 50.
    BEYOND DOCKER WHAT ISNEXT? ▸ CoreOs and rkt ▸ Docker Swarm and Kubernetes ▸ Unikernels (!)
  • 51.
    BEYOND DOCKER ANDSUMMARY SUMMARY ▸ Docker is production ready ▸ Docker-Compose is targeted towards developers and should not be used for production ▸ Might have some issues with regards to networking and clustering ▸ Multi-Cloud deployments possible ▸ Community is vital and eager to help
  • 52.
    WANT TO KNOWMORE? TRY ONE OF THESE GREAT VAULTS OF WISDOM ▸ Docker Home Page: https://www.docker.com/ ▸ Docker Cheat Sheet: https://github.com/wsargent/docker-cheat-sheet ▸ James Turnbull, Dockerbook: http//www.dockerbook.com/
  • 53.
  • 54.
  • 55.
    THE NEED FORCONTAINERS Loan Application JDK 7 MYSQL CORE OS WILDFLY Container JDK 8 NEO4J ALPINE JETTY Container RUBY POSTGRES ALPINE RAILS Container … … … … Container