¿Qué es docker?

Docker permite crear lo que ellos denominan contenedor, que son máquinas virtuales ligeras, portables y autosuficientes, que se ejecuta sobre el Docker engine, que sustituye a los hypervisores de las máquinas virtuales. Para ver una explicación nada mejor que la página oficial.

Una forma sencilla de aprender las nociones básicas de docker y ver sus posibilidades es a través del tutorial interactivo que se encuentra en su página.

Instalación

boot2docker

Docker solo funciona de forma nativa en linux, pero dispone de una herramienta, boot2docker, que permite su ejecución de forma sencilla tanto en Windows como en OSX. Boot2docker instalar docker en una máquina virtual en memoria usando virtualbox, permitiendo obtener información de la máquina virtual a través de diversos comandos.

boot2docker (start|stop|status): permite arrancar, parar o ver el estado de la máquina virtual que contiene docker.

boot2docker ip: Nos informa que IP tiene asignada la máquina virtual en la que esta instalado docker, para despues poder acceder.

Tanto en windows como en OSX, la instalación de boot2docker crea un enlace que permite arrancar docker. Una diferencia entre Windows y OSX, es que el cliente docker en windows se encuentra dentro de la maquina virtual que crear boot2docker, mientras que en OSX, esta en el propio OSX.

PROBLEMAS: La imagen de boot2docker requiere virtualización por hardware, por lo que si no arranca, una posible causa sea que no esta activada esta opción en la BIOS de la máquina.

NOTA: Si queremos ejecutar docker en OSX desde nuestro terminal favorito, en vez del terminal de boot2docker, solo será necesario ejecutar

Vagrant

Si ya se dispone de vagrant instalado, desde la versión 1.6, docker ya esta integrado como provider, lo que permite crear una maquina virtual con docker ya preinstalado. Un Vagrantfile básico de un Ubuntu 14.04 con docker sería:

La mayor ventaja de Vagrant es la facilidad de compartir carpetas, entre nuestro entorno y la maquina virtual (cosa que en boot2docker cuesta más). En su contra, el tiempo de arranque es sensiblemente mas lento que Boot2docker.

Operaciones básicas

docker version: obtienes la información de la instalación de docker

docker search [-s <numero>] <key>: Busca todos los containers que contiene la palabra buscada y filtra por el numero de estrellas.

docker pull <image>[:version]: Descarga la imagen del Docker Hub. Si no se indica la versión el cliente descargará localmente todas las versiones disponibles.

Por cada cambio que indica el Dockerfile (nos entenderemos en próximos posts sobre como utilizarlos), docker crea una una versión de los cambios en la imagen.

docker images: muestra todas las imágenes disponibles localmente

docker run <image> <command>: Ejecuta un comando en la imagen seleccionada. En el caso de no existir, la imagen se descargará.

docker run -d <image>: Ejecuta la imagen en background, devolviendo el id del container. Al ejecutar docker ps, veremos que el container esta en ejecución. Si queremos pararlo se tendrá que ejecutr docker stop <container_id>

docker run -it <image> <command>: Ejecuta el comando en el comando en modo interactivo, lo que permite realizar acciones dentro del container.

En este caso, estamos ejecutando un bash dentro del contenedor, lo que nos permitiría realizar cambio (tales como instalar aplicaciones) para posteriormente guardar el container.

 docker ps [-a]: Devuelve los containers que se estan ejecutando. En el caso que se añade la opción -a, tambien mostrará los containers que ya han finalizado.

docker commit <container_id> <name>: Crea una imagen a partir del estado de un container (los 3 primeros caracteres identifican de forma única al container).

En este caso, después de guardar la imagen con el estado del container en el que instalamos el ping, lo ejecutamos y comprobamos que el ping ya esta disponible.

Hasta aquí, un primer vistazo a docker. Dejamos para proximos posts:

  • Uso de dockerfile para la configuracíon de un container
  • Conexión entre container, mapeo de puertos y volumenes
  • Creación de entornos de desarrollo con docker, como un servidor de BBDD postgres o mongodb.
Be Sociable, Share!

About juanan