Slide 1

Slide 1 text

RUN/DOCKER/RUN INTRODUCCIÓN A DOCKER

Slide 2

Slide 2 text

2 WHOAMI ¡HOLA! Victoria Martinez de la Cruz Ingeniera de Software en Red Hat Co-fundadora de LinuxChix Argentina @vkmc @linuxchixar

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

DOCKER CONTAINERS 5 Qué son y por qué me conviene usarlos

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

7 DIFERENTES OPCIONES Canonical LXD FreeBSD Jails VMWare ThinApp

Slide 8

Slide 8 text

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/)

Slide 9

Slide 9 text

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.

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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.

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

COMANDOS BÁSICOS 14 Cómo interactuar con Docker

Slide 15

Slide 15 text

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.

Slide 16

Slide 16 text

16 PLAY WITH DOCKER play-with-docker.com

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

WORDPRESS & MYSQL 20 Caso de uso

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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: mysql> show databases; mysql> use wordpressdb; mysql> show tables;

Slide 23

Slide 23 text

# 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

Slide 24

Slide 24 text

DOCKER COMPOSE 24 Damos el extra-mile

Slide 25

Slide 25 text

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/

Slide 26

Slide 26 text

# Creamos un directorio $ mkdir my_wordpress $ cd my_wordpress # Creamos un YAML (Yet Another Markup Language) $ vi docker-compose.yml 26 DOCKER COMPOSE

Slide 27

Slide 27 text

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:

Slide 28

Slide 28 text

# Ejecutamos Docker Compose $ docker-compose up -d # Eliminamos nuestro entorno $ docker-compose down $ docker-compose down --volumes 28 DOCKER COMPOSE

Slide 29

Slide 29 text

Q&A ¡Gracias! MOAR training: http://training.play-with-docker.com/ IRC: https://webchat.freenode.net/ @ #linuxchixar Twitter: @linuxchixar Facebook: linuxchixar Email: [email protected]