SlideShare a Scribd company logo
Another introduction to Docker
Tibor Vass
Who Am I?
• Core maintainer on Docker Engine

• Previously Ops @ StumbleUpon

• I ♡ Go

2
Tibor Vass, Chapel Hill, NC
IRC #docker: tibor
Twitter: @tiborvass
Outline
• Challenges
• What’s needed
• What is Docker
• Getting started
• Docker concepts
– Engine
– Images & Containers
– Builds
– Compose
• Deployment Workflow
3
Challenges
1. Deployment & Guarantees
1. Separation of concerns (Dev vs Ops)
Code deployment…
7
CI fetches code
builds it and runs tests
If ok, allow deployment of code
push code to git server
Prod
Deploy code
hook
kicks CI
… in different environments!
8
Newest version of Python
Code assumes port 1234 available
Older version of Python
Port 1234 taken
Missing dependency
… in different environments!
9
Newest version of Python
Code assumes port 1234 available
Older version of Python
Port 1234 taken
Missing dependency
Angry
Users
… in different environments!
10
Newest version of Python
Code assumes port 1234 available
Older version of Python
Port 1234 taken
Missing dependency
Angry
Users
“Works for me!”
11
Code deployment
12
Code deployment
13
Code deployment
Need “Code + environment” deployment
14
Code deployment
Need “Code + environment” deployment
Need a portable unit of deployment
(guaranteed to work everywhere)
15
Virtual Machines?
2. Density & Resource usage
Density & Resource usage
• One app per server
– waste of idle resources
– huge costs
• One app per VM, multiple VMs per server
– Better resource pooling
– Easier to scale
– Pay as you go (cloud)
– Not *that* portable
– Requires resource allocation

(cpu, RAM, disk, …)
– GuestOS duplicated
– Resource hungry
17 Hardware
Host OS
Hypervisor
GuestOS GuestOS
AppApp
Hardware
Host OS
App
3. Move fast, and don’t break things
19
Make your product better faster (stronger♫)
to gain competitive advantage
What’s needed
What’s needed
• Something like VMs…
• Isolates processes from storage, networking, memory, cpu (sandboxing)
• …but lighter
• Lightweight portable unit of deployment (packaging & distribution)
21
22
Docker container/image
23
Hardware
Host OS
App App App
24
Hardware
Host OS
Hardware
Host OS
Hypervisor
GuestOS GuestOS
code
bins/libs
code
bins/libs
code code code
bins/libsshared bins/libs
As many shared
layers as possible
VM Container
VM vs Container
What is Docker?
Challenge #0: Satisfying Users’
expectation of reliability and availability
27
Dream: what if, you could build distributed apps

easily, and focus on your product?
28
Distributed and scalable services gotta be
independent from the machines they run on
29
Containers are part of the answer
30
Docker’s greatest value does not lie

in its technology
31
It lies in its ability to get people

agree on something
32
Open platform inviting you to
help make the dream happen
33
Or simply enjoy and contribute to
each independent piece along the way
Docker
• Engine
• Hub
• Distribution (Private registry)
• Machine
• Compose
• Swarm
• Kitematic
• More to come…
34
Getting Started
36
Install Docker:
https://docs.docker.com/installation/
37
(install Machine and Compose as well)
Docker concepts
1. Engine
Engine
• Docker Daemon + REST(ish) API
• Docker Client (CLI) talks to the API

• Daemon manages the Docker containers
• Start it with: docker -d
• docker version to test if docker is set up correctly
40
2. Images & Containers
Images vs Containers
• Images: About storing or moving your app
• Containers: About running your app
42
Image
• Read-only snapshots (templates) for creating containers
• Stored on the Docker Hub or on a private registry (or in a tar archive)
• Cannot be run, has to be instantiated into a container
• Look around on Docker Hub for existing images
• List images:

docker images
• Download busybox:

docker pull busybox
• Remove busybox image:

docker rmi busybox
43
Containers
• Sandboxed application
• docker ps
• docker create —name hello busybox echo hello posscon
• docker start -a hello
• docker start -a hello # same container started again
• docker rm hello
• docker run busybox echo hello posscon
• WARNING: run = create + start, so each “run” spawns a new container
(ephemeral)
44
Containers
• Launch an interactive shell:

docker run -i -t busybox sh
• Expose ports of an image:

docker run -P training/webapp python app.py
• Read host port on docker ps
• Detached mode:

docker run -d -P training/webapp python app.py
• Expose to specific host ports:

docker run -d -p 1234:5000 training/webapp python
app.py
45
3. Builds aka Dockerizing
Build images
• Example layout of a Dockerfile placed alongside with the code

• FROM ubuntu:14.04
• RUN apt-get update && apt-get install -y golang
• ENV GOPATH=/go
• COPY . /go/src/myapp
• EXPOSE 8080
• RUN go build myapp
• CMD [“/go/bin/myapp”]
• Build new image named myapp: docker build -t myapp .
• Change code, and rerun the build command: notice that Docker cached the dependencies and
won’t fetch them again by default (use —no-cache if desired)
47
Build with official images
• No need to use FROM ubuntu and install common dependencies anymore!
• Use official golang image:
• FROM golang
• COPY . /go/src/myapp
• …
• Even simpler:
• FROM golang:onbuild
• # something will listen on port 8080
• EXPOSE 8080
48
4. Compose
Compose your stack of containers
• In a docker-compose.yml:
• wordpress:
• image: wordpress
• links:
• - db:mysql
• ports:
• - 8080:80
• db:
• image: mariadb
• environment:
• MYSQL_ROOT_PASSWORD: example
• docker-compose up
• http://<IP>:8080 where IP is the IP of the Docker daemon
50
Deployment Workflow
App deployment…
52
CI fetches code
builds an IMAGE on which it runs tests
push code to git server
hook
kicks CI
Prod
Docker Hub or

private registry
If ok, push
IMAGE to
registry
Deploy IMAGE
… in different environments!
53
Dockerfile described the Docker

image with its dependencies and

Dev tested his code in that Docker image
Same Dockerfile
Same Docker image
Docker image safely

stored and tagged
Learn more
Learn more
• https://docs.docker.com/
• swarm
• security
• machine
• volumes
• exec
• logging
• monitoring
55
THANK YOU

More Related Content

PPTX
Docker Basics
PDF
Docker Introduction
PPTX
Docker introduction (1)
PPTX
Docker: From Zero to Hero
PDF
Docker in real life
PPTX
Docker introduction for the beginners
PPTX
Getting started with Docker
PPT
Docker introduction
Docker Basics
Docker Introduction
Docker introduction (1)
Docker: From Zero to Hero
Docker in real life
Docker introduction for the beginners
Getting started with Docker
Docker introduction

What's hot (20)

PDF
Introduction to container based virtualization with docker
PPTX
Docker introduction &amp; benefits
PPTX
Docker 101 : Introduction to Docker and Containers
PPTX
Docker intro
PDF
Docker multi-stage build
PDF
Introduction to Docker - VIT Campus
PDF
Introduction to Docker
PDF
Introduction to Docker
PDF
Introduction to docker
PPTX
Why Docker
PDF
Introduction to Docker storage, volume and image
PPTX
Introduction to Docker
PDF
Introduction to Docker Compose
PDF
Docker architecture-04-1
PPTX
Introduction to Docker - 2017
PDF
Docker Introduction
PDF
Docker Registry V2
PPTX
Dockers and containers basics
PPTX
Docker and kubernetes
Introduction to container based virtualization with docker
Docker introduction &amp; benefits
Docker 101 : Introduction to Docker and Containers
Docker intro
Docker multi-stage build
Introduction to Docker - VIT Campus
Introduction to Docker
Introduction to Docker
Introduction to docker
Why Docker
Introduction to Docker storage, volume and image
Introduction to Docker
Introduction to Docker Compose
Docker architecture-04-1
Introduction to Docker - 2017
Docker Introduction
Docker Registry V2
Dockers and containers basics
Docker and kubernetes
Ad

Similar to Docker 101: An Introduction (20)

PPTX
Dockerize the World - presentation from Hradec Kralove
PDF
Docker basic
PDF
PPTX
Dockerize the World
PPTX
Containerization using docker and its applications
PPTX
Containerization using docker and its applications
PPTX
Docker, how to use it. organize a meeting with IBM products...
PDF
Docker for dev
PPTX
docker : how to deploy Digital Experience in a container drinking a cup of co...
PPTX
.docker : how to deploy Digital Experience in a container drinking a cup of c...
PDF
Docker 101 - Zaragoza Docker Meetup - Universidad de Zaragoza
PDF
Dockercon 23 - Getting started with Docker
PDF
Docker for Developers
PDF
Docker at Djangocon 2013 | Talk by Ken Cochrane
PDF
Django and Docker
PPTX
Up & Running with Docker
PPTX
Docker: Introduction to Container Moduls
PDF
DCEU 18: Building Your Development Pipeline
PDF
Velocity NYC 2017: Building Resilient Microservices with Kubernetes, Docker, ...
PPTX
Docker for the new Era: Introducing Docker,its components and tools
Dockerize the World - presentation from Hradec Kralove
Docker basic
Dockerize the World
Containerization using docker and its applications
Containerization using docker and its applications
Docker, how to use it. organize a meeting with IBM products...
Docker for dev
docker : how to deploy Digital Experience in a container drinking a cup of co...
.docker : how to deploy Digital Experience in a container drinking a cup of c...
Docker 101 - Zaragoza Docker Meetup - Universidad de Zaragoza
Dockercon 23 - Getting started with Docker
Docker for Developers
Docker at Djangocon 2013 | Talk by Ken Cochrane
Django and Docker
Up & Running with Docker
Docker: Introduction to Container Moduls
DCEU 18: Building Your Development Pipeline
Velocity NYC 2017: Building Resilient Microservices with Kubernetes, Docker, ...
Docker for the new Era: Introducing Docker,its components and tools
Ad

More from POSSCON (20)

PDF
Why Meteor.JS?
PDF
Vagrant 101
PDF
Tools for Open Source Systems Administration
PPTX
Assembling an Open Source Toolchain to Manage Public, Private and Hybrid Clou...
PPTX
Accelerating Application Delivery with OpenShift
PDF
Openstack 101
ODP
Community Building: The Open Source Way
PPTX
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
PDF
Software Defined Networking (SDN) for the Datacenter
PDF
Application Security on a Dime: A Practical Guide to Using Functional Open So...
ODP
Why Your Open Source Story Matters
PDF
How YARN Enables Multiple Data Processing Engines in Hadoop
PPTX
Google Summer of Code
PDF
Introduction to Hadoop
PDF
How to Use Cryptography Properly: The Common Mistakes People Make When Using ...
PPTX
Cyber Security and Open Source
PDF
Intro to AngularJS
PDF
Graph the Planet!
PDF
Software Freedom Licensing: What You Must Know
PDF
Contributing to an Open Source Project 101
Why Meteor.JS?
Vagrant 101
Tools for Open Source Systems Administration
Assembling an Open Source Toolchain to Manage Public, Private and Hybrid Clou...
Accelerating Application Delivery with OpenShift
Openstack 101
Community Building: The Open Source Way
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
Software Defined Networking (SDN) for the Datacenter
Application Security on a Dime: A Practical Guide to Using Functional Open So...
Why Your Open Source Story Matters
How YARN Enables Multiple Data Processing Engines in Hadoop
Google Summer of Code
Introduction to Hadoop
How to Use Cryptography Properly: The Common Mistakes People Make When Using ...
Cyber Security and Open Source
Intro to AngularJS
Graph the Planet!
Software Freedom Licensing: What You Must Know
Contributing to an Open Source Project 101

Recently uploaded (20)

PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPT
Teaching material agriculture food technology
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Empathic Computing: Creating Shared Understanding
PPTX
A Presentation on Artificial Intelligence
PDF
cuic standard and advanced reporting.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Modernizing your data center with Dell and AMD
The Rise and Fall of 3GPP – Time for a Sabbatical?
Reach Out and Touch Someone: Haptics and Empathic Computing
Digital-Transformation-Roadmap-for-Companies.pptx
NewMind AI Weekly Chronicles - August'25 Week I
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Unlocking AI with Model Context Protocol (MCP)
Building Integrated photovoltaic BIPV_UPV.pdf
Teaching material agriculture food technology
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Empathic Computing: Creating Shared Understanding
A Presentation on Artificial Intelligence
cuic standard and advanced reporting.pdf
MYSQL Presentation for SQL database connectivity
Advanced methodologies resolving dimensionality complications for autism neur...
20250228 LYD VKU AI Blended-Learning.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Spectral efficient network and resource selection model in 5G networks
Modernizing your data center with Dell and AMD

Docker 101: An Introduction

  • 1. Another introduction to Docker Tibor Vass
  • 2. Who Am I? • Core maintainer on Docker Engine
 • Previously Ops @ StumbleUpon
 • I ♡ Go
 2 Tibor Vass, Chapel Hill, NC IRC #docker: tibor Twitter: @tiborvass
  • 3. Outline • Challenges • What’s needed • What is Docker • Getting started • Docker concepts – Engine – Images & Containers – Builds – Compose • Deployment Workflow 3
  • 5. 1. Deployment & Guarantees
  • 6. 1. Separation of concerns (Dev vs Ops)
  • 7. Code deployment… 7 CI fetches code builds it and runs tests If ok, allow deployment of code push code to git server Prod Deploy code hook kicks CI
  • 8. … in different environments! 8 Newest version of Python Code assumes port 1234 available Older version of Python Port 1234 taken Missing dependency
  • 9. … in different environments! 9 Newest version of Python Code assumes port 1234 available Older version of Python Port 1234 taken Missing dependency Angry Users
  • 10. … in different environments! 10 Newest version of Python Code assumes port 1234 available Older version of Python Port 1234 taken Missing dependency Angry Users “Works for me!”
  • 13. 13 Code deployment Need “Code + environment” deployment
  • 14. 14 Code deployment Need “Code + environment” deployment Need a portable unit of deployment (guaranteed to work everywhere)
  • 16. 2. Density & Resource usage
  • 17. Density & Resource usage • One app per server – waste of idle resources – huge costs • One app per VM, multiple VMs per server – Better resource pooling – Easier to scale – Pay as you go (cloud) – Not *that* portable – Requires resource allocation
 (cpu, RAM, disk, …) – GuestOS duplicated – Resource hungry 17 Hardware Host OS Hypervisor GuestOS GuestOS AppApp Hardware Host OS App
  • 18. 3. Move fast, and don’t break things
  • 19. 19 Make your product better faster (stronger♫) to gain competitive advantage
  • 21. What’s needed • Something like VMs… • Isolates processes from storage, networking, memory, cpu (sandboxing) • …but lighter • Lightweight portable unit of deployment (packaging & distribution) 21
  • 24. 24 Hardware Host OS Hardware Host OS Hypervisor GuestOS GuestOS code bins/libs code bins/libs code code code bins/libsshared bins/libs As many shared layers as possible VM Container VM vs Container
  • 26. Challenge #0: Satisfying Users’ expectation of reliability and availability
  • 27. 27 Dream: what if, you could build distributed apps
 easily, and focus on your product?
  • 28. 28 Distributed and scalable services gotta be independent from the machines they run on
  • 29. 29 Containers are part of the answer
  • 30. 30 Docker’s greatest value does not lie
 in its technology
  • 31. 31 It lies in its ability to get people
 agree on something
  • 32. 32 Open platform inviting you to help make the dream happen
  • 33. 33 Or simply enjoy and contribute to each independent piece along the way
  • 34. Docker • Engine • Hub • Distribution (Private registry) • Machine • Compose • Swarm • Kitematic • More to come… 34
  • 37. 37 (install Machine and Compose as well)
  • 40. Engine • Docker Daemon + REST(ish) API • Docker Client (CLI) talks to the API
 • Daemon manages the Docker containers • Start it with: docker -d • docker version to test if docker is set up correctly 40
  • 41. 2. Images & Containers
  • 42. Images vs Containers • Images: About storing or moving your app • Containers: About running your app 42
  • 43. Image • Read-only snapshots (templates) for creating containers • Stored on the Docker Hub or on a private registry (or in a tar archive) • Cannot be run, has to be instantiated into a container • Look around on Docker Hub for existing images • List images:
 docker images • Download busybox:
 docker pull busybox • Remove busybox image:
 docker rmi busybox 43
  • 44. Containers • Sandboxed application • docker ps • docker create —name hello busybox echo hello posscon • docker start -a hello • docker start -a hello # same container started again • docker rm hello • docker run busybox echo hello posscon • WARNING: run = create + start, so each “run” spawns a new container (ephemeral) 44
  • 45. Containers • Launch an interactive shell:
 docker run -i -t busybox sh • Expose ports of an image:
 docker run -P training/webapp python app.py • Read host port on docker ps • Detached mode:
 docker run -d -P training/webapp python app.py • Expose to specific host ports:
 docker run -d -p 1234:5000 training/webapp python app.py 45
  • 46. 3. Builds aka Dockerizing
  • 47. Build images • Example layout of a Dockerfile placed alongside with the code
 • FROM ubuntu:14.04 • RUN apt-get update && apt-get install -y golang • ENV GOPATH=/go • COPY . /go/src/myapp • EXPOSE 8080 • RUN go build myapp • CMD [“/go/bin/myapp”] • Build new image named myapp: docker build -t myapp . • Change code, and rerun the build command: notice that Docker cached the dependencies and won’t fetch them again by default (use —no-cache if desired) 47
  • 48. Build with official images • No need to use FROM ubuntu and install common dependencies anymore! • Use official golang image: • FROM golang • COPY . /go/src/myapp • … • Even simpler: • FROM golang:onbuild • # something will listen on port 8080 • EXPOSE 8080 48
  • 50. Compose your stack of containers • In a docker-compose.yml: • wordpress: • image: wordpress • links: • - db:mysql • ports: • - 8080:80 • db: • image: mariadb • environment: • MYSQL_ROOT_PASSWORD: example • docker-compose up • http://<IP>:8080 where IP is the IP of the Docker daemon 50
  • 52. App deployment… 52 CI fetches code builds an IMAGE on which it runs tests push code to git server hook kicks CI Prod Docker Hub or
 private registry If ok, push IMAGE to registry Deploy IMAGE
  • 53. … in different environments! 53 Dockerfile described the Docker
 image with its dependencies and
 Dev tested his code in that Docker image Same Dockerfile Same Docker image Docker image safely
 stored and tagged
  • 55. Learn more • https://docs.docker.com/ • swarm • security • machine • volumes • exec • logging • monitoring 55