2. About me...
Mariano Germán Egui
Trabajo como desarrollador web
Me gustan las buenas prácticas
Me preocupa la seguridad de la aplicación
Participó de Meetups y voy a conferencias relacionadas a
desarrollo e Infraestructura
Soy 100% amateur, programo en muchos lenguajes y me
mande hacer el elefante de PHP
Twitter: @EguiMariano
egui.mariano@gmail.com
@EguiMariano
4. ¿Que es Docker?
Docker permite empaquetar una aplicación con todas sus
dependencias en una unidad estandarizada para el
desarrollo de software.
@EguiMariano
Fuente: https://www.docker.com/what-docker
5. ¿Cómo lo hace?
Usando LXC (Linux Containers)….
Wikipedia.org:
“ Es una tecnología de virtualización en el nivel de sistema
operativo (SO) para Linux. LXC permite que un servidor físico
ejecute múltiples instancias de sistemas operativos aislados,
conocidos como Servidores Privados Virtuales (SPV o VPS en
inglés) o Entornos Virtuales (EV). LXC no provee de una
máquina virtual, más bien provee un entorno virtual que tiene
su propio espacio de procesos y redes. “
Fuente: https://es.wikipedia.org/wiki/LXC
@EguiMariano
6. Un container tiene las aplicaciones, librerías,
configuraciones, etc. que podamos necesitar y el
resto lo toma del host y recursos compartidos.
@EguiMariano
Simplificado por favor...
7. Entonces….
Docker es una herramienta más
que usa LXC
Docker utiliza la tecnología de LXC, porque
es más liviana, rapida y eficiente. Pero a
diferencia de otras herramientas Docker
incluye un kernel entre el Host y el Container
que permite su portabilidad entre sistemas
operativos y el completo aislamiento entre
otros contenedores...
8. Una comparación entre Virtualbox y Docker
La tecnología de virtualización es similar a las máquinas virtuales, pero más ligero, ya que no se
carga un sistema operativo completo para cada contenedor
@EguiMariano
9. ¿Para qué sirve?
● Definir runtime environments distribuibles
● Colaboración entre DevOps y Devs
● Para entornos de desarrollo, CI y producción
● Versionar las aplicaciones y su entornos
● Escalable
14. Docker posee su repositorio
Todas las imágenes se buscan en el host (local) y después en el repositorio Docker Hub,
el repositorio puede ser public o privado.
https://hub.docker.com/
Fuente: https://hub.docker.com/
@EguiMariano
15. Hello world
@EguiMariano
~➤ docker run ubuntu /bin/echo ‘Hello world’
Hello world
~➤ docker run -t -i ubuntu /bin/bash
root@af8bae53bdd3:/#
16. attach
Adjunta a un contenedor corriendo
build
Construye un contenedor de un archivo Docker
commit
Crea una nueva imagen de los cambios del
contenedor
cp
Copia archivos/carpetas de los contenedores del
sistema de archivos a la ruta de host
version
Muestra la información de versión de Docker
Comandos de Docker
@EguiMariano
diff
Inspecciona los cambios en el sistema de
archivos de un contenedor
events
Obtiene eventos en tiempo real desde el
servidor
export
Transmite el contenido de un contenedor
como un archivo tar
history
Muestra el historial de una imagen
Fuente: https://docs.docker.com/engine/reference/commandline
17. images
Lista las imágenes
import
Crea una nueva imagen del sistema de
archivos de los contenidos a partir de un
archivo tar
info
Muestra el sistema de información de la
pantalla
insert
Inserta un archivo en una imagen
tag
Etiqueta una imagen en un repositorio
inspect
Regresa información de bajo nivel en un
contenedor
kill
Mata a un contenedor en ejecución
(corriendo)
load
Carga una imagen desde un archivo tar
login
Registra la sesión para el servidor de
registro de Docker
logs
Obtiene los registros de un contenedor
Fuente: https://docs.docker.com/engine/reference/commandline
@EguiMariano
18. port
Busca el puerto público el cual está NAT-
eado y lo hace privado (PRIVATE_PORT)
ps
Lista los Contenedores
pull
Descarga una imagen o un repositorio del
servidor de registros Docker
push
Empuja una imagen o un repositorio del
servidor de registro Docker
restart
Reinicia un contenedor en ejecución
(corriendo)
top
Busca los procesos en ejecución de un
contenedor
rm
Elimina uno o más contenedores
rmi
Elimina una o más imágenes
run
Ejecuta un comando en un contenedor
save
Guarda una imagen en un archivo tar
search
Busca una imagen en el índice de Docker
start
Inicia un contenedor detenido
stop
Detiene un contenedor en ejecución
(corriendo)
Fuente: https://docs.docker.com/engine/reference/commandline
@EguiMariano
19. Dockerfile
@EguiMariano
~➤ echo '
FROM ubuntu:14.04.4
MAINTAINER Mariano Egui <egui.mariano@gmail.com>
RUN apt-get update
RUN apt-get -y install apache2
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND
' > Dockerfile
20. Información general sobre comandos Dockerfile
@EguiMariano
ADD
Copia un archivo desde el host en el
contenedor
CMD
Configura comandos por defecto para ser
ejecutado, o se pasa al punto de entrada
ENTRYPOINT
ENTRYPOINT
Ajusta el punto de entrada por defecto de la
aplicación desde el contenedor
ENV
Inicializa variables de entorno (por ejemplo,
"clave=valor")
EXPOSE
Expone un puerto al exterior
FROM
Configura la imagen base para usar
RUN
Ejecuta un comando y cambia (commit) el
resultado de la la imagen final (contenedor)
USER
Establece el usuario para ejecutar los
contenedores de la imagen
VOLUMEN
Monta un directorio desde el host al
contenedor
WORKDIR
Establece el directorio para las directivas de
CMD que se ejecutarán
Fuente: https://docs.docker.com/engine/reference/builder
22. Imagen en caliente
@EguiMariano
~ ➤ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 44776f55294a 8 days ago 120.1 MB
~➤ docker run -it ubuntu
root@b0114a140333:/#
root@b0114a140333:/# apt-get update
root@b0114a140333:/# apt-get install apache2
root@b0114a140333:/#
~ ➤ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0114a140333 ubuntu "/bin/bash" 35 minutes ago Up 35 minutes furious_knuth
~ ➤ docker commit --help
~ ➤ docker commit b0114a140333 local:apache2
Sha256:5ec5c7debed77ed44285cfee560ab11b45f2fe71faeabf32866b042ea10529b2
~ ➤ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local apache2 5ec5c7debed7 8 seconds ago 256 MB
ubuntu latest 44776f55294a 8 days ago 120.1 MB
Terminal 1
Terminal 2
23. Docker Compose
@EguiMariano
Componer es una
herramienta para la
definición y ejecución de
contenedores para
aplicaciones “multi-Docker”.
Fuente: https://github.com/schoren