Docker es una maravillosa herramienta disruptiva que está revolucionando el mundo de la virtualización. Nos permite levantar sistemas operativos como quien levanta el NotePad. Realmente al principio parece magia. Bueno para los que no hayan utilizado virtualización, Docker le dejará desconcertado, y a los que ya están familiarizados, simplemente alucinados, o por lo menos a mi me pasó.
Pero al final que es? Imagínate que pudieras tener en Windows un sistema operativo linux, con un Apache y un MySQL con un WordPress en un fichero de menos de 120 megas, y que diciendo las palabras mágicas, en menos de un segundo este respondiendo peticiones web. Pues no lo imagines esto lo puedes hacer con Docker. Pero imaginate que ese fichero tal cual lo llevas a un Mac y zas funciona, y lo vuelvo a llevar a un Ubuntu y lo mismo. A que parece difícil de creer. Sobre todo que se ejecuta instantáneamente!!
Conceptos
Otra cosa impresionante es que hay miles de preinstalaciones en el repositorio de docker.com hechas por la comunidad con todas las configuraciones que se te puedan ocurrir, un Tomcat, un Apache con MySQL, un Nginx con PostgreSQL, programas preinstalados como WordPress, Odoo, … lo que se te ocurra ya lo habrá montado alguien, antes que tú.
A estas pre-instalaciones/plantillas se les llaman imágenes. Cuando tengas instalado docker solo tendrás que indicar que imagen quieres ejecutar y docker se encarga de bajarlo a tu repositorio local y ejecutarlo.
La copia/instancia de una imagen que se puede ejecutar se llama contenedor. Una imagen puede hacer ejecutar varios contenedores al mismo tiempo.
Cada vez se para un contenedor y se vuelve a arrancar, todas las carpetas se incian como esta definido por la imagen inicial. Si se quieren guarda esos datos para otro momento, hay que enlazar carpetas del contenedor a carpetas de tú maquina o a unos ficheros llamados volumenes que gestiona docker.
Imagen –> Contenedor parado –> Contenedor en Ejecución
Bueno pues ya es el momento de que os dirijáis a la página de docker y lo instaleis, da igual el sistema operativo.
Chuleta rápida
# Descarga (si no tiene la imagen de un ubuntu) y la arranca.
>docker run ubuntu
# Visualiza los procesos en curso de docker.
>docker ps -a
# Esto arranca una imagen y le manda hacer un comando que hace # q nunca se cierre la imagen porque no tiene fin.
>docker run nombre_image tail -f /dev/null
# Copiar algo del container al host
>docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
# Copiar algo del host al container
>docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
# Acceder al shell de un contenedor
>docker exec -i -t container_name /bin/bash
# Ejecuta la imagen de forma interactiva para poder ejecutar su # shell.
>docker run -it ubuntu
# Ejecuta un comando en el contenedor, en este caso un bash.
>docker exec -it nombre_contenedor bash
# Ejecuta el contenedor pero el --detach o -d si es un proceso # iterativo, no lo muestra y te deja continuar.
# El -p 8080:8080 hace visible el puerto para la maquina
# anfitriona donde se ejecuta el docker. Primer puerto es como # sale al pc donde se ejecuta y el segundo es el puerto de
# dentro del contenedor.
>docker run --detach --name servidor_http -p 8080:80 nginx
# -v indica q una carpeta de dentro del contenedor se asocia a # una carpeta de mi computadora.
>docker run --name db -d -v c:/User/mine/MongoData:/data/db mongo
# -- inspect muestra un json con toda la configuración de ese contenedor.
>docker --inspect nombre_contenedor
# Limpia volúmenes que no están asociados a ningún contendor.
>docker volume prune
# Muestra lista de volúmenes de tu equipo.
>docker volume ls
# Crea un nuevo volumen.
>docker volume create nombre_volumen
# --mount Asociar el directorio de un contenedor a un volumen.
>docker run -d --name db --mount src=dbdata,dst=/data/db
>docker run --restart no --name crash1 crashing
# Para ver los logs de una instancia.
>docker logs nombre_instacia_docker
# Para matar un proceso que no se da cerrado
>docker kill -s 9 nombre_instancia
Listado de Comandos Docker
Para ejecutar los comando de docker tendrás que escribir: docker comando
docker search imagen_a_buscar
Busca todos los paquetes haya en la web de docker.com que tengan la imagen_a_buscar (por ejemplo apache) y te los muestra.
docker run imagen
Descarga si no la tienes y ejecuta en tu equipo la imagen indicada. Normalmente el nombre del repositorio consta del nombre del que la hizo la imagen, el nombre de la imagen y la versión, pero si no se indica la versión (o no la hay) coge la última:
proveedor/nombre:versión
Las imágenes mas «oficiales» lo simplifican, por ejemplo la versión 14.04 de ubuntu será:
ubuntu:14.04
pull imagen
Solo se descarga la imagen.
image ls
Muestra todas las imágenes que tienes descargadas.
ps
Muestra las imágenes que están en ejecución.
rm
Elimina un contenedor.
rmi
Elimina una imagen del equipo.
start imagen
Arranca una imagen.
stop imagen
Para la imagen.
docker run -i imagen comando_shell
Ejecuta un comando del shell dentro de la imagen. Ej: docker run -i ubuntu ls
run -i imagen /bin/bash
Te abre el terminal de la máquina de la imagen para ejecutar comandos shell. Para salir hay que ejecutar la orden exit.
commit
Crea una nueva imagen de los cambios del contenedor
attach
Adjunta a un contenedor corriendo
build
Construye un contenedor de un archivo Docker
cp
Copia archivos/carpetas de los contenedores del sistema de archivos a la ruta de host
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
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
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
port
Busca el puerto público el cual está NAT-eado y lo hace privado (PRIVATE_PORT)
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)
save
Guarda una imagen en un archivo tar
tag
Etiqueta una imagen en un repositorio
top
Busca los procesos en ejecución de un contenedor
version
Muestra la información de versión de Docker
Deja una respuesta