Introduction to Docker
Alexander González {Microsoft Student Partner}
[email protected]Agenda
Section 1: Section 3:
What is Docker
What is Docker Not Networking
Basic Docker Commands
Dockerfiles
Section 2: Section 4:
Anatomy of a Docker image Docker compose / stacks
Docker volumes
Demo
FIRST OF ALL!
App A App A
Maquina programador/Entorno desarrollo Servidor/Entorno producción
Section 1:
What is Docker
Basic Docker Commands
Dockerfiles
What is a container?
• Standardized packaging for
software and
dependencies
• Isolate apps from each
other
• Share the same OS kernel
• Works for all major Linux
distributions
• Containers native to Windows
Server 2016
The Role of Images and Containers
D o c ke r I m a g e D o c ke r Container
E xa m p l e : U b u ntu with N od e. j s a n d C re a t e d b y u s i n g a n i m a ge . R u n s
A p p l i ca ti o n C o d e you r applicati on.
Docker containers are NOT VMs
• Easy connection to make
• Fundamentally different architectures
• Fundamentally different benefits
Maquina Virtual Contenedores
7
Docker Containers Versus Virtual Machines
App 1 App 2
B i n s / L i bs B i n s / L i bs
App 1 App 2
Gu est O S Gu est O S
Bins/Libs Bins/Libs
Hyp e r v i s o r D o c ke r E n g i n e
Ho st O p e rati n g Sy s te m Ho st O p e rati n g Sy s te m
Virtual Machines D o c ke r Conta in ers
• Li ght w eig ht , open, secure platform
• S im pli f y building, shipping, running
W h a t Is D o c ke r ?
apps
• R u n s natively o n L i n u x or W i n d o w s
S e rv er
• R u n s o n W i n d o w s or Mac
D e v e l o p m e n t m ac hine s (with a
virtual m ac hin e)
• Relies o n " i m a g e s " a n d
"containers"
Using Docker: Build, Ship, Run Workflow
Developers IT Operations
BUILD SHIP RUN
Development Environments Create & Store Images Deploy, Manage, Scale
10
Some Docker vocabulary
Docker Image
The basis of a Docker container. Represents a full application
Docker Container
The standard unit in which the application service resides and executes
Docker Engine
Creates, ships and runs Docker containers deployable on a physical or
virtual, host locally, in a datacenter or cloud service provider
Registry Service (Docker Hub(Public) or Docker Trusted
Registry(Private))
11 Cloud or server based storage and distribution service for your images
Basic Docker Commands
$ docker image pull node:latest
$ docker image ls
$ docker container run –d –p 5000:5000 –-name node node:latest
$ docker container ps
$ docker container stop node(or <container id>)
$ docker container rm node (or <container id>)
$ docker image rmi (or <image id>)
$ docker build –t node:2.0 .
$ docker image push node:2.0
$ docker --help
Dockerfile – Linux Example
• Instructions on
how to build a
Docker image
• Looks very similar
to “native”
commands
• Important to
optimize your
Dockerfile
14
Section 2:
Anatomy of a Docker Container
Docker Volumes
Volume Use Cases
Let’s Go Back to Our Dockerfile
15
Each Dockerfile Command Creates a Layer
…
EXPOSE
COPY
WORKDIR
RUN
FROM
Kernel
16
Docker Image Pull: Pulls Layers
17
Docker Volumes
• Volumes mount a directory on the host into the container at a specific location
• Can be used to share (and persist) data between containers
• Directory persists after the container is deleted
• Unless you explicitly delete it
• Can be created in a Dockerfile or via CLI
18
Why Use Volumes
• Mount local source code into a running container
docker container run -v
$(pwd):/usr/src/app/ myapp
• Improve performance
− As directory structures get complicated traversing the tree can slow system
performance
• Data persistence
19
Section 3:
Networking
What is Docker Bridge Networking
Docker host Docker host
Cntnr 1 Cntnr 2 Cntnr 3 Cntnr 4 Cntnr 5 Cntnr 6 Cntnr 7
bridgenet1 bridgenet2 bridgenet3
docker network create -d bridge --name bridgenet1
21
Docker Bridge Networking and Port Mapping
Docker host 1
Host port Container port
Cntnr1
10.0.0.8 :80
$ docker container run -p 8080:80 ...
Bridge
172.14.3.55 :8080
L2/L3 physical network
22
Section 4:
Docker Compose
Docker Compose: Multi Container Applications
• Build and run one container at a time • Define multi container app in compose.yml file
• Manually connect containers together • Single command to deploy entire app
• Must be careful with dependencies and start • Handles container dependencies
up order • Works with Docker Swarm, Networking,
Volumes, Universal Control Plane
49
Docker Compose: Multi Container Applications
version: '2' # specify docker-compose version
# Define the services/containers to be run
services:
angular: # name of the first service
build: client # specify the directory of the Dockerfile
ports:
- "4200:4200" # specify port forewarding
express: #name of the second service
build: api # specify the directory of the Dockerfile
ports:
- "3977:3977" #specify ports forewarding
database: # name of the third service
image: mongo # specify image to build container from
ports:
- "27017:27017" # specify port forewarding
Docker Compose: Scale Container
Applications
Demo
Angular Node.js/Express Mongo DB