Docker es una plataforma de software que permite a los desarrolladores crear, probar e implementar aplicaciones en contenedores de forma rápida. Se trata de un conocido formato que empaqueta todo el código junto a las dependencias de una aplicación, incluidas bibliotecas, herramientas del sistema y más, para facilitar su ejecución de manera rápida, ligera y fiable en entornos informáticos.
Diferencias entre Docker y una Virtual Machine
Una máquina virtual es un sistema que actúa exactamente como una computadora. En términos simples, hace posible ejecutar en una única computadora lo que antiguamente se ejecutaba en computadoras separadas. Cada VM requiere su sistema operativo subyacente y luego se virtualiza el hardware.
En cambio, Docker es una herramienta que utiliza contenedores para facilitar la creación, implementación y ejecución de aplicaciones. Vincula la aplicación y sus dependencias dentro de un contenedor. Pero entonces, ¿cuáles son las diferencias entre Docker y una VM?
A grandes rasgos, podemos mencionar la compatibilidad con el sistema operativo, la seguridad, la portabilidad y el rendimiento. Vamos a analizar cada una de estas:
- Soporte del sistema operativo
El soporte del sistema operativo de la máquina virtual y el contenedor Docker es muy diferente. En la imagen de arriba, se puede ver que cada máquina virtual tiene su sistema operativo invitado por encima del sistema operativo host, lo que hace que las máquinas virtuales sean pesadas.
Por otro lado, los contenedores Docker comparten el sistema operativo host y eso los hace más livianos, ayudándoles a iniciarse en tan solo unos segundos. Por lo tanto, la sobrecarga para administrar el sistema de contenedores es muy baja en comparación con la de las máquinas virtuales.
Los contenedores de la ventana acoplable son adecuados para situaciones en las que se desea ejecutar varias aplicaciones en un solo kernel de sistema operativo. Pero si tiene aplicaciones o servidores que deben ejecutarse en diferentes tipos de sistemas operativos, entonces se requieren máquinas virtuales.
- Seguridad La máquina virtual no comparte el sistema operativo y existe un fuerte aislamiento en el kernel del host. Por lo tanto, son más seguros en comparación con los contenedores. Un contenedor tiene muchos riesgos de seguridad y vulnerabilidades, ya que tienen un núcleo de host compartido. Además, dado que los recursos de la ventana acoplable se comparten y no tienen un espacio de nombres, un atacante puede explotar todos los contenedores de un clúster si obtiene acceso incluso a un sólo contenedor. En una máquina virtual, no se obtiene acceso directo a los recursos y el hipervisor está ahí para restringir el uso de recursos en una VM.
- Portabilidad Los contenedores Docker son fácilmente portables porque no tienen sistemas operativos separados. Un contenedor se puede portar a un sistema operativo diferente y puede iniciarse inmediatamente. Por otro lado, las máquinas virtuales tienen sistemas operativos separados, por lo que portar una máquina virtual es difícil en comparación con los contenedores, y también lleva mucho tiempo portar una máquina virtual debido a su tamaño.Para propósitos de desarrollo donde las aplicaciones deben desarrollarse y probarse en diferentes plataformas, los contenedores Docker son la opción ideal.
- Resumen
¿Por qué usar Docker?
Son muchas las ventajas que te da el usar Docker, pero algunas con más importancia las decimos a continuación:
- Despliegue rápido La implementación de un entorno de desarrollo o producción con Docker, reduce el tiempo a segundos ya que se crea un contenedor para cada proceso y no arranca un sistema operativo completo, lo que lo hace mucho más manejable para eliminarlo y volverlo a crear sin arriesgar todos los datos.
- Inversión y costos Docker ayuda a reducir drásticamente los costos de implementación en recursos de infraestructura ya que su naturaleza es utilizar recursos específicos que requiere una aplicación, y esto puede optimizar el ahorro en todo, desde los requerimientos de un servidor, hasta en el personal necesario para su mantenimiento.
- Aislamiento de recursos Docker facilita que las aplicaciones cuentan con sus recursos necesarios dentro de sus aplicaciones y que esté de manera aislada de otros contenedores. Y también los facilita que solo utilicen sus recursos asignados.
- Estandarización Debido al uso de imágenes, esto nos ayuda a tener una estandarización de los recursos en los cuales se está trabajando ya que se utilizara la misma imagen de Docker en el desarrollo de una aplicación. Esto ahorra mucho tiempo en el momento de implementar un entorno de desarrollo y producción, ya que se tiene lo necesario en una imagen de Docker.
- Simplicidad y configuraciones rápidas Uno de los grandes beneficios de utilizar Docker es su simplicidad, ya que con solo 3 comandos puedes tener levantado un servidor de páginas web sin depender del sistema operativo, a comparación de una instalación tradicional ya que implica ver las versiones y la compatibilidad al sistema operativo.
- Caso de uso Vamos a hablar de un caso en donde usar Docker es la solución más eficiente. Podríamos montar en un contenedor Docker un sitio WordPress completo y luego acceder al mismo. Transportar dicho sitio es cuestión de mover el contenedor a otra parte y volver a levantarlo. Podemos fácilmente versionar el sitio, respaldarlo , hacer copias, duplicarlo tantas veces como queramos y con mucha velocidad (el contenedor contiene el sitio, la base de datos , el Web Server, es decir TODO lo necesario y configurado). Un contenedor de Docker mínimo para este caso puede ocupar 100 MB. En cambio, una máquina virtual puede andar en el orden de los 5 a 20GB, además de los recursos de hardware que consume. Este es un ejemplo muy especial, debido a que la interfaz gráfica de un sitio es un navegador (es decir, una aplicación externa a Docker) usando un protocolo y acceso por puerto.
Terminología Docker
En el mundo Docker existen diferentes términos que tenés que conocer para comenzar a utilizar esta herramienta.
- Contenedor
A diferencia de una máquina virtual que proporciona virtualización de hardware, un contenedor proporciona virtualización ligera a nivel de sistema operativo mediante la abstracción del "espacio del usuario". Los contenedores comparten el núcleo del sistema host con otros contenedores. Un contenedor que se ejecuta en el sistema operativo host, es una unidad de software estándar que empaqueta código y todas sus dependencias, para que las aplicaciones se puedan ejecutar de forma rápida y fiable de un entorno a otro. Los contenedores no son persistentes y se activan desde imágenes.
- Motor de Docker
El software de host de código abierto que crea y ejecuta los contenedores. Los motores de Docker funcionan como la aplicación del servidor del cliente que admite contenedores en varios servidores Windows y sistemas operativos Linux, como Oracle Linux, CentOS, Debian, Fedora, RHEL, SUSE y Ubuntu.
- Imágenes de Docker
Colección de software que se ejecutará como un contenedor que incluye un conjunto de instrucciones para crear un contenedor que se pueda ejecutar en la plataforma Docker. Las imágenes no son modificables, de modo que para realizar cambios en una imagen es preciso crear otra nueva.
- Docker Hub
El Docker Hub es un registro para repositorios de software basado en la nube, es decir, una especie de biblioteca para las imágenes Docker. Este servicio online está formado por repositorios públicos y privados. En los primeros se ofrece a los usuarios la posibilidad de subir sus propias imágenes y compartirlas con la comunidad. Aquí se dispone de un gran número de imágenes Docker oficiales realizadas por el equipo de desarrolladores de la plataforma así como de proyectos de código abierto consolidados. Por el contrario, en los repositorios privados del registro no todo el mundo tiene acceso a las imágenes que se cargan, aunque estas sí pueden ser compartidas dentro de una misma empresa o en un determinado círculo. Al repositorio de Docker Hub se accede a través de hub.docker.com
- Instalando Docker
Pasos para instalar Docker:
1. Abre la terminal en Ubuntu 2. Borra cualquier archivo Docker que esté corriendo en el sistema, usando el siguiente comando:
$ sudo apt-get remove docker docker-engine docker.io
A continuación, te pedirá que ingreses la clave del root y presionar enter
3. Chequea que el sistema esté actualizado usando el siguiente comando
$ sudo apt-get update
4. Instala Docker usando el siguiente comando
$ sudo apt install docker.io
5. Instala todas las dependencias usando el siguiente comando
$ sudo snap install docker
6. Antes de probar docker, chequea la versión instalada usando el siguiente comando
$ docker --version
Antes de comenzar la instalación, asegúrate de tener una versión de Windows entre Pro, Enterprise o Education. Si tienes Windows Home, tendrás que instalar WSL 2, un subsistema para Windows que permite crear un entorno Linux en el que se pueda ejecutar Docker. Ingresa en el enlace para obtener la Guía de instalación de WSL 2: https://docs.microsoft.com/en-us/windows/wsl/install-win10
En este punto tendrás que descargar el instalador. El instalador de Docker para Windows se puede obtener desde https://hub.docker.com/editions/community/docker-ce-desktop-windows/
Haz doble clic en el ejecutable .exe y sigue estos pasos:
- Cuando te indique, asegúrate que la opción para habilitar Hyper-V esté marcada.
- Sigue las instrucciones del instalador y dale permiso para continuar.
- Completa el proceso y cierra el instalador.
Para lanzar Docker, busca «Docker» y elige «Docker Desktop» entre los resultados.
Al igual que con Windows, para instalar Docker en Mac, debes descargar el instalador de https://hub.docker.com/editions/community/docker-ce-desktop-mac/. Como requisito mínimo, deberás tener una versión de macOS igual o posterior a la 10.14. Cuando hayas descargado el instalador con la extensión .dmg, haz doble clic. Se abrirá una ventana con el icono de Docker y la carpeta de aplicaciones. Arrastra Docker.app a la carpeta de aplicaciones.
Ahora busca Docker desde el spotlight (cmd + espacio) e inicia Docker. En la barra de estado superior derecha deberías poder ver el icono de Docker.
El proceso de arranque finalizará cuando el icono permanece fijo.
Comandos Docker
Docker maneja una amplia gama de comandos que podemos ejecutar por línea de comandos. Entre los más comunes, podemos mencionar los siguientes:
- Help Este comando lista todos los comandos que posee docker, es una herramienta que viene muy bien para recordarlos.
$ docker help
- Run El comando Run sirve para ejecutar una imagen y crear un container, en caso de que la imagen no exista, la buscará y descargará de dockerhub (lo explicaremos en una próxima entrega).
$ docker run [parámetros] <nombre_imagen>
Parámetros Opcionales
Para asignarle un nombre al container
—-name
Podrán interactuar con el contenedor que ejecutan
-it
Se ejecutará el contenedor pero la salida de stdout no quedará unida a la consola. El contenedor se ejecuta en 2do plano.
-d
El contenedor se eliminará automáticamente cuando termine de ejecutarse.
–rm
En el siguiente enlace podrás encontrar todos los parámetros que se pueden usar con Run. https://docs.docker.com/engine/reference/commandline/run/
- Ps El comando Ps nos sirve para listar todos los contenedores que tenemos corriendo en este momento.
$ docker ps [parametros]
Parámetros Opcionales
Muestra todos los containers incluyendo los que se cerraron
--all , -a
Muestra el tamaño de los containers
--size , -s
El comando Ps posee muchísimos parámetros más, pero son menos utilizados. En el siguiente link, encontrarás más información: https://docs.docker.com/engine/reference/commandline/ps/
- Start / Stop Con Start y Stop podrás ejecutar o detener algún contenedor que esté en tu máquina.
$ docker start [container-name]
$ docker stop [container-name]
- Kill El comando **Kill **se utiliza para eliminar un contenedor.
$ docker kill [container-name]
El comando kill también se puede utilizar para eliminar todos los contenedores
$ docker kill $(docker ps -q)