Antes de comenzar a leer este post es necesario que tengan instalado docker en sus computadoras. Si aun no lo tienen les recomiendo que se pasen por este post para aprender a instalarlo.
El objetivo de este post es que después de instalarlo comprendan un poco mejor algunos de los conceptos básicos de los contenedores, las imágenes y el funcionamiento en general de docker.
Para correr un famoso “hola mundo” con docker, basta con poner el siguiente comando en la terminal:
$ docker run hello-world -------------------------------------------------------------------------------- > Unable to find image 'hello-world:latest' locally > latest: Pulling from library/hello-world > 78445dd45222: Pull complete > Digest: > sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 > Status: Downloaded newer image for hello-world:latest > Hello from Docker! > This message shows that your installation appears to be working correctly. ...
Y así nada mas, con esa facilidad tenemos nuestro “hola mundo”, pero ¿Qué pasó exactamente?
- Se ejecuto el comando run en la terminal
- El cliente docker contacto al docker daemon y le pidió que creara un contenedor a partir de la imagen que se llama hello-world
- El docker daemon reviso si tenia esa imagen almacenada localmente, y como no la tenia, se la solicito al registro de docker (DockerHub)
- El registro de docker (DockerHub) si contenía esa imagen, entonces se procedió a descargar hacia el docker daemon
- El docker daemon creo un nuevo contenedor a partir de la imagen hello-world y corrió el ejecutable que produjo la salida “Hello from Docker!”
- El docker daemon transmitió esta salida hacia el cliente de docker.
- El cliente docker a su vez, lo envió a la terminal.
Este flujo puede ser representado con el siguiente diagrama:
¿Qué es docker daemon?
El docker daemon (dockerd) escucha las peticiones del API de docker y gestiona los objetos tales como imágenes, contenedores, redes y volumenes. Un docker daemon, también se puede comunicar con otros docker daemons para gestionar servicios de docker.
¿Qué es el cliente docker?
El cliente Docker (docker), es la forma principal en la que los usuarios interactúan con Docker, Cuando usamos los comandos como docker run, el cliente envía estos al dockerd, el cual se encarga de llevarlos a cabo. Cada comando docker hace uso de el API de Docker. Y el cliente docker también se puede comunicar con mas de un daemon.
¿Qué es el registro docker?
Un registro docker almacena imagenes de docker. Docker Hub y Docker Cloud son registros publicos que cualquiera puede usar, y Docker viene configurado por defecto para buscar imágenes en Docker Hub. Podemos ademas administrar nuestro propio registro privado.
Cuando usamos el comando docker pull o docker run, las imagenes requeridas son descargadas de su registro configurado. Y cuando usamos docker push, las imágenes son publicadas en el registro configurado también.
Docker Store nos permite comprar y vender imágenes o distribuirlas de forma gratuita. Por ejemplo, pueden comprar una imagen de docker que contiene una aplicación o un servicio de un proveedor y usar esa imagen para desplegar la aplicación en sus ambientes de pruebas, de staging y de producción. Ademas pueden mejorar a aplicación publicando nuevas versiones y re-instalando los contenedores.