Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LinuxChixAR - Nerdearla 2017 - Introducción a ...

vkmc
June 24, 2017

LinuxChixAR - Nerdearla 2017 - Introducción a Docker

vkmc

June 24, 2017
Tweet

More Decks by vkmc

Other Decks in Programming

Transcript

  1. 2 WHOAMI ¡HOLA! Victoria Martinez de la Cruz Ingeniera de

    Software en Red Hat Co-fundadora de LinuxChix Argentina @vkmc @linuxchixar
  2. 3 LINUXCHIX ARGENTINA Nuestra comunidad en acción - 20 miembros

    activos - Reuniones (todos los meses) - Charlas, talleres, difusión - Nerdear.la 2016 - PyConAR 2016 - DevDayAR 2016 - FLISOL 2017 Avellaneda (22/04) Más sedes - LinuxChix La Plata
  3. 4 TALLER DE DOCKER Formato del taller - Introducción teórica

    a Docker containers - Hands on: comandos básicos - Hands on: deploy MySQL 5.7 + Wordpress
  4. 6 ¿QUÉ SON LOS CONTAINERS? Virtualización a nivel de sistema

    operativo → Método de virtualización de servidores en el cual el kernel de un sistema operativo permite que existan múltiples user-spaces aislados
  5. 8 ¿QUÉ ES DOCKER? Docker es una plataforma que facilita

    la creación, el despliegue y la ejecución de aplicaciones en containers. Actualmente, Docker es la plataforma líder de administración containers - Existen 460K apps en DockerHub. Este número crece aproximadamente en 4-5K por semana. (Ben Golub, DockerCon 2016) - Durante el 2016 creció al menos un 30% la adopción de Docker en ambientes productivos (https://www.datadoghq.com/docker-adoption/)
  6. 9 DOCKER PARA DEVS - Elimina el problema de dependencias.

    Basta del problema de “funciona en mi máquina”. Se empaquetan las dependencias con la aplicación para contribuir a la portabilidad y predictibilidad. Entornos limpios, seguros y aislados. - Se adapta a cualquier stack de desarrollo. Construí, probá, debugueá y desplegá aplicaciones escritas en el lenguaje de programación que prefieras. El dev se libera de la tediosa tarea de desplegar el entorno de desarrollo. - Facilidad de emular diferentes tipos de entornos. Entornos de development, testing y staging más fácil.
  7. 10 DOCKER PARA SYSADMINS - Configura una vez, desplegá tantas

    veces como quieras. Basta de tener que configurar todo para cada entorno que quieras desplegar. Menos downtime al realizar actualizaciones y rollbacks más veloces. - Mayor escalabilidad. El sistema de orquestación de Docker permite escalar a miles de nodos y containers. Los containers se crean/eliminan en segundos, haciendo fácil escalar de acuerdo a la demanda. - Nuevas versiones más rápido. Dado que los procesos de desarrollo se ven acelerados, la disponibilidad de actualizaciones también se ve mejorada. Los usuarios de estas aplicaciones cuentan con nuevas funcionalidades y arreglos de vulnerabilidades mucho más rápido.
  8. 11 ¿CÓMO FUNCIONA DOCKER? Docker agrega una capa de abstracción

    y automatización de la virtualización a nivel del sistema operativo. cgroups → Funcionalidad del kernel que permite asignar recursos de hardware (tiempo de CPU, mem, storage I/O, network bandwidth) para diferentes conjuntos de procesos definidos por el usuario. namespaces → Funcionalidad del kernel que permite aislar y virtualizar recursos del sistema (process IDs, network access, IPC, filesystem access) de un conjunto de procesos
  9. 12 STORAGE EN DOCKER Docker utiliza el concepto de data

    volume para brindar el servicio de storage a las aplicaciones que son ejecutadas dentro del contenedor. Un data volume es un directorio especial dentro del container que es mapeado directamente con el storage real disponible en el host. Están diseñados para persistir datos en forma independiente del ciclo del vida del contenedor. Los data volumes permiten: - Compartir datos entre containers. ¡Ojo con la concurrencia! - Persistir datos aunque el container se elimine, el container puede ser recreado y tomar el estado del anterior. - Son inicializados al crearse el container y todos sus datos son copiados al storage del host.
  10. 13 NETWORKING EN DOCKER Al momento de la instalación Docker

    crea tres redes: Bridge, None y Host. La red Bridge es la red a la que automáticamente se conectan todos los containers si es que no le especificamos una red distinta y es por ésta red por donde se comunican entre sí. Algunas consideraciones: - Containers conectados a distintas redes no pueden comunicarse entre sí. - Un container puede estar conectado a más de una red. - Un container puede mapear sus puertos de aplicaciones con puertos del host para poder ser accedido desde una red externa a Docker (la red del host). Es posible crear sus propias redes para aislar y restringir la comunicación entre los containers.
  11. 15 GLOSARIO DOCKER - Imagen: Una imagen es una colección

    ordenada de cambios en el sistema de archivos raíz y sus correspondientes parámetros de ejecución para ser utilizados para instanciar un container. Las imágenes no tienen estado y nunca cambian. - Container: Un container es la instancia en tiempo de ejecución de una imagen de Docker. Un container de Docker se compone de: - Una imagen de Docker - Un entorno de ejecución - Un conjunto de instrucciones estándar - Docker Hub: Utilizamos Docker Hub como nuestro repositorio de imágenes. Allí podemos accederlas cuando querramos, y compartirlas a quienes querramos. Accedelo en https://hub.docker.com/. - Dockerfile: Documento de texto que contiene todos los comandos que ejecutarías normalmente para construir una imagen de Docker. Docker puede construir imágenes automágicamente leyendo las instrucciones de un Dockerfile.
  12. 17 HANDS ON: COMANDOS BÁSICOS # Veamos todos los comandos

    $ docker # Descarguemos una imagen $ docker pull hello-world # Listemos nuestras imágenes $ docker images # Ejecutemos nuestro primer container $ docker run hello-world # Listemos los containers en ejecución $ docker ps -a
  13. 18 HANDS ON: COMANDOS BÁSICOS # Ahora probemos un programa

    más divertido $ docker run docker/whalesay cowsay "Hola nerdear.la!" # Extendamos este programa $ mkdir mydockerbuild && cd mydockerbuild/ $ vi Dockerfile FROM docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune -a | cowsay # Creamos nuestra imagen $ docker build -t docker-whale . # Comprobamos que nuestra imagen está lista para usar $ docker images # Ejecutemos un container con esa imagen $ docker run docker-whale
  14. 19 HANDS ON: COMANDOS BÁSICOS # Creamos una etiqueta para

    nuestra imagen $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker-whale latest 7d9495d03763 38 minutes ago 273.7 MB $ docker tag 7d9495d03763 \ lxar.nerdearla/docker-whale:latest $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE lxar.nerdearla/docker-whale latest 7d9495d03763 5 minutes ago 273.7 MB # Accedemos a nuestra cuenta $ docker login # Subimos nuestra imagen al repositorio (!) $ docker push lxar.nerdearla/docker-whale
  15. 21 HANDS ON: MYSQL # MySQL 5.7 $ docker pull

    mysql:5.7 # Primer intento $ docker run --name db -d mysql:5.7 $ docker ps $ docker logs db $ docker rm db # Segundo intento (sin DB) $ docker run --name db -e MYSQL_ROOT_PASSWORD=linuxchixar -d mysql:5.7 $ docker ps $ docker logs db $ docker exec -it db bash $ docker rm -f db
  16. 22 HANDS ON: MYSQL # MySQL 5.7 # Tercer intento

    (con DB) $ docker run --name db -e MYSQL_ROOT_PASSWORD=linuxchixar -e MYSQL_DATABASE=wordpressdb -d mysql:5.7 # Verificamos que la DB fue creada $ docker exec -it db bash > mysql -u root -p Enter password: <password> mysql> show databases; mysql> use wordpressdb; mysql> show tables;
  17. # Wordpress $ docker pull wordpress # Primer intento $

    docker run -e WORDPRESS_DB_PASSWORD=linuxchixar -d --name wordpress --link db:mysql wordpress $ docker inspect wordpress $ docker rm -f wordpress # Segundo intento (este es el que queremos :) $ docker run -e WORDPRESS_DB_PASSWORD=linuxchixar -d --name wordpress --link db:mysql -p 127.0.0.2:8080:80 wordpress 23 HANDS ON: WORDPRESS
  18. 25 DOCKER COMPOSE Docker Compose es una herramienta para definir

    y ejecutar aplicaciones multi-container. Con un simple archivo YAML (Yet Another Markup Language), ejecutado por un único comando, indicamos cómo crear y cómo ejecutar nuestras aplicaciones. Docker Compose es muy útil para entornos de development, testing y staging (todavía de prueba pero equivalente a un entorno de producción). NOTA: Es una herramienta aparte, no se instala de forma automática cuando instalamos Docker. Excepción: Si usamos Docker Toolbox, ya contamos con Docker Compose. Más información en https://docs.docker.com/compose/overview/
  19. # Creamos un directorio $ mkdir my_wordpress $ cd my_wordpress

    # Creamos un YAML (Yet Another Markup Language) $ vi docker-compose.yml 26 DOCKER COMPOSE
  20. 27 DOCKER COMPOSE version: '2' services: db: image: mysql:5.7 volumes:

    - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: linuxchixar MYSQL_DATABASE: wordpressdb MYSQL_USER: linuxchixar MYSQL_PASSWORD: linuxchixar wordpress: depends_on: - db image: wordpress:latest ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: linuxchixar volumes: db_data:
  21. # Ejecutamos Docker Compose $ docker-compose up -d # Eliminamos

    nuestro entorno $ docker-compose down $ docker-compose down --volumes 28 DOCKER COMPOSE