Dockers es una plataforma de código abierto, su motor nos permite ir un paso más allá de la virtualización permitiendo paquetizar aplicaciones o servicios en un nivel superior, sin que el sistema se vea afectado o modificado. Está escrito en GO y utiliza las ventajas del kernel de Linux para desarrollar sus funcionalidades.
La idea principal de Docker es poder crear contenedor ligeros y portables para que la aplicaciones que desarrollamos puedan ejecutarse en cualquier máquina con el motor de docker instalado.
La diferencia entre las máquinas virtuales y los docker.
Las principales inconvenientes de la Virtualización:
- Tamaño. Almacenas todo el SO
- Gestión. Administración más costosa.
- Velocidad. Son más lentas. Tienes que esperar a que la máquina virtual se inicialice.
Las ventajas de Docker frente a la virtualización son:
- Versátiles. Son mucho más ligeras (MB), tiene todas las dependencias y funcionan en cualquier lugar.
- Eficientes. Solo ejecutan procesos. No el SO completo.
- Aislados. Lo que se rompe en el container se queda en él.
Podemos utilizar dockers para diferentes usos, como por ejemplo transformar una aplicación antigua en un contenedor, crear microservicios, mejorar los flujos de trabajo para el desarrollo y despliegue de software, uso en entornos de BigData, Edge Computing, Cloud Migration, Digital Transformation y Migracion de Windows Server.
Componentes de Dockers
Cliente Docker (Docker Daemon): es el encargado de gestionar las operaciones que se realizan sobre los contenedores, se comunica con el Docker Daemon (Demonio Docker). Es el componente que usuario manega para comunicarse con el motor de docker.
Demonio Docker (Docker Daemon): se instala en el equipo que hace las funciones de servidor, puede estar instalado independientemente del cliente. Se encarga de gestionar los contenedores y los servicios necesarios.
Índice de imágenes Docker (Docker Images Index) o Registro Docker (Docker Registry): es donde se almacenan las imágenes Docker que puede ser en un repositorio público o privado. En el caso de público suelen subirse a docker hub donde cualquier usuario puede reutilizar estas imágenes.
Imágenes Docker (Docker Imágenes): son las imágenes que se utilizan como la base de los sistemas operativos y los snapshot, estas imágenes también contienen las plantillas donde se definen los componentes necesarios para crear estas imágenes.
Contenedor Docker (Docker Container): es el entorno de ejecución de docker que contiene las carpetas y ficheros donde tenemos descrita la aplicación que queremos utilizar, además de incluir el sistema operativo necesario para ejecutarla.
Dockerfiles: es el fichero que contiene el conjunto de scripts en los que se describe la forma para automatizar la creación de imágenes. En este fichero se puede indicar todos los pasos necesarios para ejecutar la creación y los posteriores pasos de configuración.
La diferencia entre contenedores e imágenes
Es importante entender que no es posible la ejecución de un contenedor sin una imagen. Para entenderlo podríamos decir que un contender es como si dijéramos un snapshot de una imagen. Por lo tanto podemos tener diferentes snapshots basados en una imagen.
Cuando se elimina un contenedor, los cambios que se han realizado sobre la imagen son eliminados a no ser que se realice un docker commit. De todas formas cuando se hace una modificación no se realizan sobre la imagen original sino que se creará una imagen nueva que incluira en su núcleo principal los cambios que hayamos querido hacer persistentes en nuestro contenedor.