Antes de decir lo que es Docker es casi mejor decir qué hace, que al final es lo que nos interesa.
Docker maneja contenedores aislados que contienen un código determinado. Ese código se independiza de tal forma que hasta permite que el contenedor que lo contiene sea compartido entre diferentes máquinas.
Ahora vamos a lo que no es.
Los contenedores de docker no son máquinas virtuales ya que lo que contiene son piezas de software y no máquinas completas.
Un contenedor de docker es una unidad de software que está autocontenida en el contenedor que contiene todo lo necesario para ejecutar ese código incluyendo código, configuración, procesos, dependencias o red e incluso puede contener la parte del sistema operativo necesaria para ejecutar la aplicación concreta.
Lo primero que necesitamos es instalar docker en nuestro sistema operativo, si es windows o mac tenemos que bajarnos el programa de docker.com y si es linux o bien seguimos las intrucciones de la web de docker o instalamos de los repositorios, de todos modos es bastante sencilla su instalación y no requiere nada en especial.
Una imagen es cualquier fichero que tiene lo suficiente del sistema operativo para hacer lo que necesitamos. Pensad que en una máquina virtual completa instalaríamos todo el sistema operativo, aquí no es necesario con lo que la imagen resultante será más pequeña que una máquina virtual completa.
Para ver las imagenes que tenemos en nuestro sistema, si es que tenemos alguna sería con el comando
docker images
Este comando nos va a dar entre otros valores el repositorio, la etiqueta y el ID de la imagen.
El repositorio es de donde viene la imagen, la etiqueta nos indica la versión, es muy probable que veáis como versión latest, y el ID de imagen es el identificativo interno de Docker.
Para referirnos a una imagen podemos hacerlo con el nombre y la etiqueta, o en caso de no tener tendríamos que hacerlo a través del ID de imagen.
Para ejecutar un contenedor usaremos el comando
docker run -ti repositorio:versión bash
Donde -ti significa terminal interactive
Y si en otra pantalla en paralelo ponéis
docker ps
Podréis ver los contenedores que estáis ejecutando. Es importante cuando lo ejecutéis que os deis cuanta que el ID del contenedor no es el mismo ID que el de la imagen, son números diferentes que no se pisan. Una cosa es la imagen y otra el contenedor.
Ahora bien, si ejecutamos un contenedor y luego lo cerramos todos los cambios que hayamos hechos se perderán, así que tenemos que hacer una copia del contenedor en imagen.
Para convertir un contenedor en imagen mientras el contenedor está activo haremos un
docker commit
docker tag xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mi-etiqueta
Al hacer el commit nos creará una imagen con una etiqueta larguísima, así que habrá que renombrarla por algo más fácil de recordar.
Para borrar una imagen
docker image rm etiqueta
En este punto ya sabemos arrancar una instancia, pero necesitamos saber como ejecutar algo en un contendor, que al final esa es la razón para la que utilizar contenedor .
El contendor va a parar cuando termine lo que estamos ejecutando, para ello
docker run imagen proceso
Poniendo un ejemplo añadiendo comandos al bash como parámetro
edu@thinkpad ~ # docker run -ti nginx:latest bash -c "sleep 3; ls -lisa; echo ya termine"
total 72
2 4 drwxr-xr-x 33 root root 4096 Apr 21 12:58 .
2 4 drwxr-xr-x 33 root root 4096 Apr 21 12:58 ..
67 0 -rwxr-xr-x 1 root root 0 Apr 21 12:58 .dockerenv
27 4 drwxr-xr-x 2 root root 4096 Oct 20 2016 bin
70 4 drwxr-xr-x 2 root root 4096 Sep 12 2016 boot
2 0 drwxr-xr-x 5 root root 360 Apr 21 12:58 dev
11 4 drwxr-xr-x 58 root root 4096 Apr 21 12:58 etc
73 4 drwxr-xr-x 2 root root 4096 Sep 12 2016 home