nerdear.la 2016 - Docker workshop
-
Upload
restorando -
Category
Engineering
-
view
125 -
download
3
Transcript of nerdear.la 2016 - Docker workshop
Antes de empezar
Instalar Docker:
● MacOS/Windows○ Bajar docker toolbox: https://www.docker.com/products/docker-
toolbox○ Mac: https://docs.docker.com/v1.8/installation/mac/○ Windows: https://docs.docker.com/v1.8/installation/windows/
● Linux○ Instalar del sistema de paquetes○ O ver acá segun distro: https://docs.docker.com/v1.
8/installation/debian/
Clonar este repo: https://github.com/restorando/docker-workshop
Configurar nuestro registry local
● Por si no anda muy bien internet, pueden bajar las imágenes desde la LAN
● Inseguro porque no tenemos DNSs ni sabiamos a priori nuestra IP acá
● Con docker nativo en OSX:○ pinata set daemon '{"insecure-registries":
["IP:5000"]}'● Con docker-machine o Linux:
○ DOCKER_OPTS=”--insecure-registry IP:5000”○ (ver https://docs.docker.com/registry/insecure/)
● IMPORTANTE probar: docker pull IP:5000/debian:jessie
Agenda
Deployment tradicional
Deployment con containers
Docker containers
Corriendo nuestro primer container
Docker registries
Definiendo containers
Consecuencias de esta forma
● Servers mutables
○ Posibles diferencias entre ambientes y/o diferentes nodos
● Puede haber conflictos entre aplicaciones si usan el mismo servidor
○ En general lleva a un server por app y desperdicio de recursos
● El escalado suele ser “manual” o complicado de automatizar por completo
● Desarrolladores dependenden del sector de operaciones
Desventajas● Más cosas para manejar
○ Complicado hacerlo manualmente o
con las herramientas tradicionales
● Otro layer de abstracción no
trivial
● Dificulta el deployment de
aplicaciones que mantienen
estado
Deployment con containers
Ventajas● Devs más libertades e
involucrados en la definición de infraestructura
● Menos dependencia con equipo de “Operaciones”
● Permite monitoreo de recursos más preciso
● Fácilmente adaptable a buenas prácticas como 12 factor app
Docker containers
● Aisla con namespaces○ PID, network, mount, IPC, users, etc.
● Limita los recursos con cgroups● Se estandarizó el runtime
○ runC con la iniciativa OCI○ CoreOS está haciendo rocket○ Hyper es otro (runV) con VMs y un “mini kernel”
● Docker es más que un runtime○ Formato de la imagen, crearlo, distribuirlo y correrlo○ Es un daemon y un cliente
Corriendo nuestro primer container
● docker run -P IP:5000/nginx:1.10.0
● docker run -P IP:5000/nginx:1.9.3
● docker ps
$ docker run <image>
$ docker images
$ docker pull <image>
$ docker build <directory>
$ docker ps
$ docker logs
Basic docker commands
Definiendo imágenes
● Se especifica paso a paso en un Dockerfile
● Cada imágen se compone de uno más “layers”
○ Cada paso genera un “layer”
● Es inmutable una vez que se construyó
● Se usa repositorio y tag para identificarla
○ Por ejemplo: myapp:v1.0
● Toma un contexto (“.”, URL) para crear el container
○ Por ejemplo: docker build .
El Dockerfile
FROM IP:5000/debian:jessie
RUN apt-get update && \
apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
→ Define la imágen base de la que empezamos
→ Corre un comando en el container
(en el repo está completo)
→ Copia algo del contexto al container
→ Dice que este container expone ese puerto
→ Qué correr al levantar el container
FROM registry.restorando.com/ruby-2.1-web:v1.3
WORKDIR /app/
COPY Gemfile Gemfile.lock /app/
RUN bundle install -j 4 --retry 5 --without development test --deployment
COPY . /app/
RUN bin/rake assets:precompile
EXPOSE 3000
CMD ["bin/unicorn", "-p", "3000", "-c", "config/unicorn.rb"]
Un Dockerfile productivo
● Doc completa del formato del Dockerfile:○ https://docs.docker.com/engine/reference/builder/
● Más doc del CLI: ○ https://docs.docker.com/engine/reference/commandline/
● Training de docker: ○ https://training.docker.com/introduction-to-docker
● Why containers?○ http://kubernetes.io/docs/whatisk8s/
○ Google “Lessons learned from three container-management systems over a decade”: http://queue.acm.org/detail.cfm?id=2898444
Referencias y artículos interesantes