Docker Ecosystem - Part I
by
@mario21ic
Talleres
UNT
Agenda
Intro a Containers
Containers vs VMs
Docker Engine
Comandos
Dockerfile
Recomendaciones
Containers
Chroots con esteroides
Son procesos aislados que corren con recursos
asignados.
Comparten el mismo kernel del host
Livianos a comparacion de Hypervisor
Containers vs VMS
Containers vs VMS
Docker Engine
El problema
Solución
Docker Engine
Una plataforma abierta para aplicaciones distribuidas
para Developers y Sysadmins
Desarrollado inicialmente en Python y migrado a Go
Servidor (Linux) - Cliente (multiplataforma)
Open-source https://github.com/docker/docker
Docker Server - Cliente
Docker Engine
Docker syntax
command: accion a ejecutar
params: para cambiar comportamiento
image: la plantilla a usar
tag: la version de la plantilla
$ docker <command> [params] <image>:[tag]
Demo Images: search &
pull
• En cli ejecutar:
• Verificar:
$ docker search alpine
$ docker pull
alpine:latest
$ docker images
Demo Container: Hello
• En cli ejecutar:
• Verificar en otro terminal:
$ docker run -ti debian echo "Hello from container"
$ docker ps -a
Docker
Demo Container: Bash
• En cli ejecutar:
• Verificar en otro terminal:
$ docker run -ti debian:latest /bin/bash
$ docker ps
$ docker ps -a
Demo Container: Forward
port
• En cli ejecutar:
• Abrir browser:
http://localhost:8080/
$ docker run --name mynginx -p 8080:80 nginx
Demo Container: Volume
• En cli ejecutar:
• Abrir browser:
http://localhost:8080/
$ docker run --name mynginx 
-v $(pwd)/html:/usr/share/nginx/html 
-p 8080:80 nginx
Container save as Image
• En cli ejecutar:
• En otro terminal:
• Verificar:
$ docker run --name container_debian -ti debian
bash
# apt-get update && apt-get install -y htop
$ docker commit container_debian debian_hola
$ docker images
Dockerfile
Y como genero mi propio
Docker Image personalizado?
Dockerfile
• Generar archivo Dockerfile con contenido:
FROM nginx:latest
MAINTAINER Mario Inga <mario21ic@gmail.com>
RUN echo 'Building from Dockerfile'
COPY html/index.html /usr/share/nginx/html/index.html
Dockerfile
• Ejecutar:
• Verificar:
• Usar la imagen:
$ docker build -t image_from_dockerfile:latest .
$ docker images
$ docker run --name newcontainer -p 8088:80 -d
image_from_dockerfile
Docker Link
• Ejecutar:
• Browser: http://localhost:8080/
• Consola:
$ docker run --name some-mysql -p 3306:3306 
-e MYSQL_ROOT_PASSWORD=miclavedb -d mysql
$ docker run --name some-wordpress 
--link some-mysql:mysql -p 8080:80 -d wordpress
$ docker exec -ti some-wordpress bash
Recomendaciones
Antes de dockerizar un app primero mapear sus
servicios.
Cada container debe ser responsable de un solo
proceso.
Usar solo volumen en caso sea necesario.
Separar sus configs docker-compose.yml
Aprovechar la reutilizacion de capas al crear
imagenes.
Preguntas?

Docker Ecosystem - Part I - Engine

  • 1.
    Docker Ecosystem -Part I by @mario21ic Talleres UNT
  • 2.
    Agenda Intro a Containers Containersvs VMs Docker Engine Comandos Dockerfile Recomendaciones
  • 3.
    Containers Chroots con esteroides Sonprocesos aislados que corren con recursos asignados. Comparten el mismo kernel del host Livianos a comparacion de Hypervisor
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    Docker Engine Una plataformaabierta para aplicaciones distribuidas para Developers y Sysadmins Desarrollado inicialmente en Python y migrado a Go Servidor (Linux) - Cliente (multiplataforma) Open-source https://github.com/docker/docker
  • 10.
  • 11.
  • 12.
    Docker syntax command: acciona ejecutar params: para cambiar comportamiento image: la plantilla a usar tag: la version de la plantilla $ docker <command> [params] <image>:[tag]
  • 13.
    Demo Images: search& pull • En cli ejecutar: • Verificar: $ docker search alpine $ docker pull alpine:latest $ docker images
  • 14.
    Demo Container: Hello •En cli ejecutar: • Verificar en otro terminal: $ docker run -ti debian echo "Hello from container" $ docker ps -a
  • 15.
  • 16.
    Demo Container: Bash •En cli ejecutar: • Verificar en otro terminal: $ docker run -ti debian:latest /bin/bash $ docker ps $ docker ps -a
  • 17.
    Demo Container: Forward port •En cli ejecutar: • Abrir browser: http://localhost:8080/ $ docker run --name mynginx -p 8080:80 nginx
  • 18.
    Demo Container: Volume •En cli ejecutar: • Abrir browser: http://localhost:8080/ $ docker run --name mynginx -v $(pwd)/html:/usr/share/nginx/html -p 8080:80 nginx
  • 19.
    Container save asImage • En cli ejecutar: • En otro terminal: • Verificar: $ docker run --name container_debian -ti debian bash # apt-get update && apt-get install -y htop $ docker commit container_debian debian_hola $ docker images
  • 20.
    Dockerfile Y como generomi propio Docker Image personalizado?
  • 21.
    Dockerfile • Generar archivoDockerfile con contenido: FROM nginx:latest MAINTAINER Mario Inga <mario21ic@gmail.com> RUN echo 'Building from Dockerfile' COPY html/index.html /usr/share/nginx/html/index.html
  • 22.
    Dockerfile • Ejecutar: • Verificar: •Usar la imagen: $ docker build -t image_from_dockerfile:latest . $ docker images $ docker run --name newcontainer -p 8088:80 -d image_from_dockerfile
  • 23.
    Docker Link • Ejecutar: •Browser: http://localhost:8080/ • Consola: $ docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=miclavedb -d mysql $ docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -d wordpress $ docker exec -ti some-wordpress bash
  • 24.
    Recomendaciones Antes de dockerizarun app primero mapear sus servicios. Cada container debe ser responsable de un solo proceso. Usar solo volumen en caso sea necesario. Separar sus configs docker-compose.yml Aprovechar la reutilizacion de capas al crear imagenes.
  • 25.