Docker on Azure

May 2016 JaxARCSig

Docker

  • What are Containers?
  • New Docker Beta
  • Docker Commands

Docker Facts

  • Project started out dotCloud
  • Written in Go
  • Using Linux Isolation features of namespaces and cgroups 
  • Offer services like Docker Hub and Docker Cloud
  • Windows 2016 Server is adding Docker

Docker Beta

  • Uses hyper-V on Windows
  • Use xhyve on Mac OS X
  • Remove need for Oracle VirtualBox
  • Containers coming to Windows 2016

Docker terms

  • Docker Engine
  • Docker Machine
  • Docker Compose
  • Docker Swarm
  • Docker Hub
  • Docker Cloud

Common Docker Commands

  • docker build
  • docker run
  • docker run -i -t
  • docker run -d
  • docker attach
  • docker ps
  • docker ps -a
  • docker commit

Docker-Machine

  • docker-machine ls
  • docker-machine create
  • eval "$(docker-machine env default)"
  • docker-machine start
  • docker-machine stop
  • docker-machine kill

Docker Compose

  • Organize your containers and services
  • docker-compose.yml
  • 'docker-compose up' to deploy containers
  • Gives an abstraction for deploying multiple services

Docker Swarm

  • Combine a pool of Docker hosts into 1
  • Can create Clusters
  • Uses Docker API
  • Discovery Services
  • Scheduling

Docker Hub

  • A host for containers
  • Publish your containers
  • Search Public repositories
  • Pull down to build containers

Docker Cloud

  • Deploy to your own cloud
  • Define a node
  • Define cluster of nodes of same type
  • Cluster Nodes have to by of the same provider
  • You can use with AWS, Azure, Digital Ocean or your own hosts

Building Containers

  • Start with base image
  • Use Dockerfile to define and set up
  • Can run and commit, but better to use Dockerfile 
  • For Nodejs apps, split the npm install and adding code step into separate steps

Dockerfile

FROM node:6.2.0

RUN mkdir /src
COPY package.json /src
WORKDIR /src 
RUN npm install

ENV foo bar
 
# Add your source files
COPY . /src  
CMD ["npm","start"] 

Dockerfile commands

  • FROM specify base container image
  • ADD/COPY lets you add files to container
  • RUN will let you run a Bash command
  • CMD takes an array of commands
  • ENV sets up an environment variable
  • EXPOSE exposes a port
  • USER to set the user
  • WORKDIR to set the directory your working dir

Docker Build

bash > docker build -t username/container:version /src

Docker run

bash > docker run -d -p 80:3000 username/container:version

Provision Docker on Azure

bash > docker-machine create --driver azure --azure-subscription-id <subs-id> <machine-name>

Azure Docker tips

  • Use new management portal
  • Turn off when not using
  • Delete storage when not used
  • Add ports to firewall that you need
  • --azure-open-port

Honorable Mentions

  • Kubernetes
  • Mesos
  • Heroku

Demo

Code

  • https://github.com/jaxnode-UG/jaxnodechat
  • https://slides.com/davidfekke/dockerazure

Questions

Contact

  • David Fekke @ gmail dot com
  • Twitter @JaxNode
  • Skype: davidfekke