Docker desde cero

24
desde cero @EguiMariano

Transcript of Docker desde cero

Page 2: Docker desde cero

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

[email protected]

@EguiMariano

Page 4: Docker desde cero

¿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

Page 5: Docker desde cero

¿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

Page 6: Docker desde cero

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...

Page 7: Docker desde cero

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...

Page 8: Docker desde cero

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

Page 9: Docker desde cero

¿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

Page 10: Docker desde cero

¿Quienes soportan Docker?

@EguiMariano

Page 11: Docker desde cero

¿Quienes usan Docker?

@EguiMariano

Page 12: Docker desde cero

Docker en la practica

@EguiMariano

Page 13: Docker desde cero

Instalar Docker

~➤ sudo apt-get install docker.io

@EguiMariano

https://docs.docker.com/engine/installation/

Page 14: Docker desde cero

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

Page 15: Docker desde cero

Hello world@EguiMariano

~➤ docker run ubuntu /bin/echo ‘Hello world’Hello world

~➤ docker run -t -i ubuntu /bin/bashroot@af8bae53bdd3:/#

Page 16: Docker desde cero

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

Page 17: Docker desde cero

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

Page 18: Docker desde cero

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

Page 19: Docker desde cero

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

Page 20: Docker desde cero

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

Page 22: Docker desde cero

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

Page 23: Docker desde cero

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