Dockerize and Ship it

Introducción a Docker
¿Que es Docker?
Docker es una plataforma abierta para desarrollar, entregar y correr aplicaciones.
Docker permite empaquetar una aplicación con todas sus dependencias dentro de una unidad estandarizada para el desarrollo de aplicaciones.
Docker vs Virtual Machines

Docker vs Virtual Machines
Las aplicaciones dentro de containers corren en un ambiente aislado directamente sobre el host server y no requieren emulación de hardware.
En cambio las VM son sistemas operativos completos que corren en hardware virtualizado a través de un Hypervisor, quien se encarga de la comunicación entre el guest y el host os.
Docker vs Virtual Machines
Beneficios de aplicaciones en containers
- Menor tiempo de inicio.
- Mejor distribución de los recursos.
- Acceso directo al hardware.
- Menor redundancia.
Un poco de historia
Docker fue creado por Salomon Hykes como un proyecto interno en dotCloud presentado en la pyCon en 2013.
El runtime de Docker esta escrito en Go, para la fecha los grandes contribuidores del proyecto han sido Google, Microsoft, IBM, Huawei, Red Hat y el Docker Team.
Beneficios de Docker
- Rapidez (deployment, migración, reinicio).
- Ligereza (Disk & CPU)
- Open Source.
- Aplicaciones portables.
- Microservicios e integraciones (APIs)
- Simplifica DevOps
- Control de versiones
Usos comunes de Docker
- Ambientes Sandbox (develop, test, debug).
- Integración continua y deployment.
- Escalamiento de aplicaciones.
- Desarrollo colaborativo.
- Configuración de infraestructura.
- Desarrollo local.
- Aplicaciones multi-tier.
- PaaS y SaaS.
Arquitectura de Docker
Componentes
- Cliente
- Deamon
- Engine
- Machine
- Compose
- Swarm
- Registry
Componentes
Docker Client
Interface de usuario que interactúa con docker. Acepta comandos desde el usuario y tiene comunicación bidirecional con el Docker deamon.
Componentes
Docker Deamon
Deamon que corre en la maquina host. El usuario no interactua directo con el, sino a través del cliente vía Api Rest o Sockets.
Componentes
Docker Engine
Dupla Cliente-Deamon al igual que Docker Compose. Usualmente conocido como "Docker".
Componentes
Herramienta que permite crear con facilidad docker hosts en tu computador o en cloud providers (Amazon, DO, Google) y dentro de un data center propio.

Docker Machine
Componentes
Herramienta para definir y correr aplicaciones más complejas con docker (ej. Multi-cointainer apps) con un solo archivo.
Docker Compose

Componentes
Herramienta para el clustering de Docker. Swarm agrupa varios docker host y los expone como un virtual docker host. Permite escalamiento de multiples host.
Docker Swarm

Workflow
Text
- Descarga la imagen ubuntu:15.04 de docker registry
- Crea un nuevo container.
- Aloja un filesystem y monta un capa de escritura y lectura.
- Asigna una dirección IP
- Ejecuta un proceso especificado ( bin/bash).
- Captura y provee una salida a ala aplicación
docker run -i -t -d ubuntu:15.04 /bin/bash
Docker Image
Text

Docker Container

Dockerfile
Archivo de texto que contiene los comandos usados por el usuario para crear una imagen
FROM busybox
MAINTAINER Gustavo Gimenez <gimenezanderson@gmail.com>
RUN mkdir /app
ADD build/geo /app
RUN mkdir /app/data
RUN chmod -R 777 /app
EXPOSE 4000
CMD ["./app/geo"]
Docker commands
Comandos de Docker más usados.
// Información general
man docker // man docker-run
docker help // docker help run
docker info
docker version
docker network ls
// Imagenes
docker images // docker [IMAGE_NAME]
docker pull [IMAGE] // docker push [IMAGE]
// Contenedores
docker run
docker ps // docker ps -a, docker ps -l
docker stop/start/restart [CONTAINER]
docker stats [CONTAINER]
docker top [CONTAINER]
docker port [CONTAINER]
docker inspect [CONTAINER]
docker inspect -f "{{ .State.StartedAt }}" [CONTAINER]
docker rm [CONTAINER]
Ejemplos
SSH dentro de un contenedor
docker pull ubuntu
docker run -it --name ubuntu_example ubuntu /bin/bash
Ejemplos
Crear una imagen
FROM busybox
MAINTAINER Gustavo Gimenez <gimenezanderson@gmail.com>
RUN mkdir /app
ADD build/server /app
RUN mkdir images
ADD images /images
RUN chmod -R 777 /app
EXPOSE 9000
ENTRYPOINT "/app/server"
Dockerfile
// Build image
docker build -t image-server .
// Run it
docker run -d -p 9000:9000 --name server-ex image-server
Comandos
Ejemplos
Docker Volume
// Run it
docker run -d -p 8080:90 --name volume-server-example -v $(pwd):/usr/share/nginx/html nginx
Usemos un Nginx Server
Ejemplos
Docker Compose
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
docker-compose.yml
Ejemplos
Docker Compose
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Dockerfile
docker-compose up
Start up
Ejemplos
Test Docker Image
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Dockerfile
docker run -it --name sinatra-test sinatra-app rspec spec/app_spec.rb
Run image
Ejemplos
Test Docker Image
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Dockerfile
docker run -it --name sinatra-test sinatra-app rspec spec/app_spec.rb
Run image
Ejemplos
Test Docker Image
FROM gusga/sinatra-app:0.1
CMD [ "sh", "-c", "rspec"]
Build image
docker run -it --name sinatra-test sinatra-app rspec spec/app_spec.rb
Run it
docker build -f Dockerfile.test -t sinatra-test-image .
Dockerfile.test
Ejemplos
Share Image
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Build image
docker push gust/sinatra-app
Publish
docker build . -t gusga/sinatra-app
Dockerfile file
Alternativas a Docker


Rkt
Linux Containers LCX
LXD container hypervisor
Docker Services
Tipo | Software |
---|---|
Clustering/orchestration | Swarm, Kubernetes, Marathon, MaestroNG, decking, shipyard |
Docker registries | Portus, Docker Distribution, hub.docker.com, quay.io, Google container registry, Artifactory, projectatomic.io |
PaaS with Docker | Rancher, Tsuru, dokku, flynn, Octohost, DEIS |
OS made of Containers | RancherOS |
Mas allá de Docker
Cloud Native Apps

Cloud Native Apps
Stack

Cloud Native Apps
Stack

Dockerize
By Gustavo Giménez
Dockerize
- 446