About me...Mariano Germán Egui
Trabajo como desarrollador webMe gustan las buenas prácticasMe preocupa la seguridad de la aplicaciónParticipó de Meetups y voy a conferencias relacionadas a desarrollo e InfraestructuraSoy 100% amateur, programo en muchos lenguajes y me mande hacer el elefante de PHP
Twitter: @EguiMariano
@EguiMariano
¿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
¿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
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...
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...
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
¿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
¿Quienes soportan Docker?
@EguiMariano
Instalar Docker
~➤ sudo apt-get install docker.io
@EguiMariano
https://docs.docker.com/engine/installation/
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
Hello world@EguiMariano
~➤ docker run ubuntu /bin/echo ‘Hello world’Hello world
~➤ docker run -t -i ubuntu /bin/bashroot@af8bae53bdd3:/#
attachAdjunta a un contenedor corriendo
buildConstruye un contenedor de un archivo Docker
commitCrea una nueva imagen de los cambios del contenedor
cpCopia archivos/carpetas de los contenedores del sistema de archivos a la ruta de host
versionMuestra la información de versión de Docker
Comandos de Docker@EguiMariano
diffInspecciona los cambios en el sistema de archivos de un contenedor
eventsObtiene eventos en tiempo real desde el servidor
exportTransmite el contenido de un contenedor como un archivo tar
historyMuestra el historial de una imagen
Fuente: https://docs.docker.com/engine/reference/commandline
imagesLista las imágenes
importCrea una nueva imagen del sistema de archivos de los contenidos a partir de un archivo tar
infoMuestra el sistema de información de la pantalla
insertInserta un archivo en una imagen
tagEtiqueta una imagen en un repositorio
inspectRegresa información de bajo nivel en un contenedor
killMata a un contenedor en ejecución (corriendo)
loadCarga una imagen desde un archivo tar
loginRegistra la sesión para el servidor de registro de Docker
logsObtiene los registros de un contenedor
Fuente: https://docs.docker.com/engine/reference/commandline
@EguiMariano
portBusca el puerto público el cual está NAT-eado y lo hace privado (PRIVATE_PORT)
psLista los Contenedores
pullDescarga una imagen o un repositorio del servidor de registros Docker
pushEmpuja una imagen o un repositorio del servidor de registro Docker
restartReinicia un contenedor en ejecución (corriendo)
topBusca los procesos en ejecución de un contenedor
rmElimina uno o más contenedores
rmiElimina una o más imágenes
runEjecuta un comando en un contenedor
saveGuarda una imagen en un archivo tar
searchBusca una imagen en el índice de Docker
startInicia un contenedor detenido
stopDetiene un contenedor en ejecución (corriendo)
Fuente: https://docs.docker.com/engine/reference/commandline
@EguiMariano
Dockerfile@EguiMariano
~➤ echo 'FROM ubuntu:14.04.4 MAINTAINER Mariano Egui <[email protected]>RUN apt-get updateRUN apt-get -y install apache2EXPOSE 80CMD /usr/sbin/apache2ctl -D FOREGROUND
' > Dockerfile
Información general sobre comandos Dockerfile@EguiMariano
ADDCopia un archivo desde el host en el contenedor
CMDConfigura comandos por defecto para ser ejecutado, o se pasa al punto de entrada ENTRYPOINT
ENTRYPOINTAjusta el punto de entrada por defecto de la aplicación desde el contenedor
ENVInicializa variables de entorno (por ejemplo, "clave=valor")
EXPOSEExpone un puerto al exterior
FROMConfigura la imagen base para usar
RUNEjecuta un comando y cambia (commit) el resultado de la la imagen final (contenedor)
USEREstablece el usuario para ejecutar los contenedores de la imagen
VOLUMENMonta un directorio desde el host al contenedor
WORKDIREstablece el directorio para las directivas de CMD que se ejecutarán
Fuente: https://docs.docker.com/engine/reference/builder
Imagen en caliente@EguiMariano
~ ➤ docker images REPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest 44776f55294a 8 days ago 120.1 MB~➤ docker run -it ubunturoot@b0114a140333:/#root@b0114a140333:/# apt-get updateroot@b0114a140333:/# apt-get install apache2root@b0114a140333:/#
~ ➤ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb0114a140333 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 SIZElocal apache2 5ec5c7debed7 8 seconds ago 256 MBubuntu latest 44776f55294a 8 days ago 120.1 MB
Terminal 1
Terminal 2
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