nerdear.la 2016 - Docker workshop

81 visualizaciones

Publicado el

Workshop de introducción a docker, desde lo más básico hasta un dockerfile de producción no muy sofisticado.

Incluye link a un repositorio para seguir un ejercicio a lo largo de la presentación

Publicado en: Ingeniería
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
81
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
4
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.
  • Introducirnos (mencionar restorando)
  • (multiples apps) ->
  • Container: basado en la imagen, layer nuevo para escribir, se pierde al matarlo y corre hasta que el proceso que iniciamos (CMD) muere! Ojo!
    Imagen: read-only template used to create containers
    Registry: publico/privado, aws y gcloud dan uno, se usa docker hub por default
  • nerdear.la 2016 - Docker workshop

    1. 1. Introduction to Docker http://bit.do/nerdearla-docker
    2. 2. 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
    3. 3. 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
    4. 4. ¿Quiénes somos? Rodrigo Campos rata Juan Barreneche jbarreneche @jbarreneche
    5. 5. Agenda Deployment tradicional Deployment con containers Docker containers Corriendo nuestro primer container Docker registries Definiendo containers
    6. 6. Configure Provisioning Deployment tradicional Deploy App Launch server New Application
    7. 7. 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
    8. 8. ¿Cómo podríamos solucionar estos problemas?
    9. 9. 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
    10. 10. 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
    11. 11. Corriendo nuestro primer container ● docker run -P IP:5000/nginx:1.10.0 ● docker run -P IP:5000/nginx:1.9.3 ● docker ps
    12. 12. Docker basic concepts Container Image Registry
    13. 13. $ docker run <image> $ docker images $ docker pull <image> $ docker build <directory> $ docker ps $ docker logs Basic docker commands
    14. 14. 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 .
    15. 15. 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
    16. 16. Armando nuestra primer imagen $ docker build -t workshop . $ docker run -P workshop $ docker ps
    17. 17. docker build -t workshop .
    18. 18. docker run -P workshop
    19. 19. 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
    20. 20. Build en CI
    21. 21. ¿Preguntas?
    22. 22. ● 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
    23. 23. Gracias! PD: Borren el insecure registry de su docker!

    ×