Docker

Organización de los ejercicios

Hay dos páginas de ejercicios de Docker:

Contenedores

Los contenedores se distinguen de las máquinas virtuales en que las máquinas virtuales emulan un ordenador físico en el que se instala un sistema operativo completo, mientras que los contenedores usan el kernel del sistema operativo anfitrión pero contienen las capas superiores (sistema de ficheros, utilidades, aplicaciones).

Al ahorrarse la emulación del ordenador y el sistema operativo de la máquina virtual, los contenedores son más pequeños y rápidos que las máquinas virtuales. Pero al incluir el resto de capas de software, se consigue el aislamiento e independencia entre contenedores que se busca con las máquinas virtuales.

Los contenedores son útiles en los servidores, pero también para pruebas de software, ya que incluyen todos los elementos que necesitan las aplicaciones, lo que facilita la instalación y elimina los problemas de incompatibilidad de versiones en bibliotecas y aplicaciones auxiliares. También podría utilizarse para la distribución de software en general, pero en ese caso juega en contra la duplicidad que supone el que cada contenedor incluye todas las capas de software.

Docker

Logotipo Docker

Docker es un sistema de virtualización de aplicaciones mediante contenedores, creado por Solomon Hykes y otros ingenieros. En 2013 se convirtió en un proyecto de software libre (licencia Apache) en el que participan cada vez más empresas. La versión 1.0 se publicó en junio de 2014 y ha tenido un desarrollo muy rápido.

En marzo de 2017, Docker anunció una desarrollo todavía más rápido, pasando a publicar una nueva versión cada mes. La numeración de las versiones adoptó al formato AA.MM (año y mes). Estas versiones mensuales se mantuvieron solamente durante un mes, aunque cada trimestre una de esas versiones se mantuvo durante cuatro meses (la primera fue Docker 17.03).

En julio de 2018, Docker anunció [archive.org] que volvían a un desarrollo más pausado. Por un lado, se dejaron de publicar las versiones mensuales (aunque se publica una versión diaria inestable) y que a partir de Docker 18.09, en vez de una versión "estable" cada tres meses habría una versión "estable" cada seis meses que se mantendrá durante siete meses. Aunque la denominación de cada versión sigue la regla mes-año, en la práctica las versiones se están publicando meses después de la fecha teórica.

Docker ofrecía una versión Enterprise (de pago) y una versión Community (gratuita). La diferencia radicaba en el nivel de soporte y certificación que proporcionaba Docker a la versión Enterprise.

Pero en noviembre de 2019, Docker anunció la venta de su división empresarial a Mirantis, una empresa de servicios en la nube especializada en Kubernetes y OpenStack. Docker pretende centrarse en las herramientas dirigidas a desarrolladores: Docker Desktop y Docker Hub.

Docker Actualizado 21-01-2024 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 0.1 0.5 0.10 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 17.03 17.06 17.09 17.12 18.03 18.06 18.09 19.03 20.10 23.0 24.0 25.0


Docker empezó estando disponible solamente para distribuciones GNU/Linux, pero desde junio de 2016 también está disponible como aplicación nativa en Windows Server 2016 y Windows 10.

Docker utiliza la virtualización ofrecida por el sistema operativo. En el caso de Windows 10, eso significa que para usar Docker de forma nativa hay que activar Hyper-V que, por desgracia, es incompatible con VirtualBox. Para poder utilizar Docker en Windows 7 o en Windows 10 sin Hyper-V, Docker ofrece desde agosto de 2015 Docker Toolbox, que realmente es una máquina virtual (que se ejecuta en VirtualBox) que contiene Docker.

El componente básico de Docker es el Docker Engine, pero Docker ofrece también una serie de herramientas para administrar, distribuir e instalar contenedores: Docker Compose, Docker Desktop, etc.


Aunque un contenedor puede incluir cualquier número de aplicaciones, lo habitual es que un contenedor contenga una sola aplicación (y los programas necesarios para ponerse en marcha). Por ejemplo, si una aplicación web guarda la información en una base de datos, en vez de incluir la aplicación y la base de datos en el mismo contenedor, se suelen crear dos contenedores: uno con la aplicación web y otro con la base de datos. Por supuesto, en el contenedor de la aplicación web sí que se incluiría un servidor web.

Para que varios contenedores puedan comunicarse entre sí, Docker permite la creación de redes virtuales privadas en la que se incluyen los contenedores.

Cuando varios contenedores contienen aplicaciones web, los servidores web de cada contenedor en principio entrarían en conflicto puesto que todos atienden al puerto 80. Ese problema se presenta siempre que contenedores distintos incluyen aplicaciones que atienden a través de los mismos puertos (base de datos, etc.). Para resolver este problema, Docker permite que los contenedores escuchen por un puerto cualquiera, aunque internamente el servidor sigue utilizando su puerto habitual. En estos casos se debe utilizar un proxy inverso que redirija las peticiones exteriores al puerto correspondiente.


El proceso de creación de un contenedor incluye varias fases.

No es necesario realizar todas estas fases para crear un contenedor, pues en Internet podemos encontrar imágenes ya preparadas por los creadores de las aplicaciones o por terceros (como Bitnami).

Saber más

Contenedores Docker de Bitnami

Los contenedores Docker de aplicaciones de Bitnami incluyen únicamente la aplicación, aunque también están disponibles contenedores de aplicaciones de infraestructura (lenguajes de programación, bases de datos, servidores web, etc.).

Actualmente (diciembre de 2019) el número de contenedores que ofrece Bitnami es menor que el que ofrece en forma de instaladores (unos 120 contenedores frente a unos 200 instaladores).

Los contenedores de Bitnami están creados con una herramienta que se llamaba Stacksmith y que desde 2019 se integra en la plataforma Tanzu, que vmware ofrece para crear contenedores personalizados.

Algunos comandos de Docker

Imágenes

En los comandos siguientes REPOSITORIO es el nombre del repositorio en el que se encuentra la imagen (por ejemplo bitnami/phpmyadmin) e IMAGEN es el nombre de la imagen descargada. Realmente, las imágenes descargadas se llaman igual que los repositorios de donde se han descargado, pero he distinguido los nombres para dejar claro cuándo nos estamos haciendo referencia a la imagen del repositorio y cuándo a la imagen local.

Contenedores

En los comandos siguientes CONTENEDOR es el nombre del contenedor, que podemos elegir al crearlo, y RED es el nombre de una red ya existente.

Redes

En los comandos siguientes RED es el nombre de la red privada.

Sistema