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/)
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.
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.
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
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.
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.
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.
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
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
(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;
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/