Hazte una idea del contenedor Docker.
En el espacio tecnológico actual, "funciona en mi sistema" es una frase muy común entre los desarrolladores. Pero hay muchos casos en los que la aplicación que se ejecuta en un sistema de desarrollador no funciona en la máquina de un probador o en una máquina de producción, lo que lleva al caos.
Docker se introdujo para resolver este tipo de problemas. 💯
¿Por qué Docker?
Permítanme contarles mi experiencia personal de por qué Docker es tan esencial.
Estaba trabajando en un proyecto full-stack con mi equipo, en el que tenía que crear una aplicación que utilizara Angular en el frontend, Node.js en el backend y MySQL como base de datos. Nos encontramos con varios problemas mientras trabajábamos en esta aplicación utilizando múltiples tecnologías.
- El primer problema era la compatibilidad con el sistema operativo. Dado que estaba utilizando múltiples tecnologías, tuve que asegurarme de que todas las tecnologías son compatibles con el sistema operativo que estoy utilizando. Hubo casos en los que la versión de Angular no funcionaba con la versión del sistema operativo que estaba utilizando, así que tuve que cambiar la versión del sistema operativo varias veces.
- Como la arquitectura de la aplicación que estaba creando cambiaba con el tiempo, me encontré con situaciones en las que había que actualizar las versiones y dependencias del software y las bibliotecas. Me enfrenté a muchos problemas de compatibilidad antes de llegar a una versión estable de todas las tecnologías que utilizaba para mi aplicación. Actualizar incluso una sola herramienta utilizada en mi aplicación era un asunto arriesgado.
- Más tarde, tuve más desarrolladores trabajando en mi aplicación. Como la pila tecnológica era pesada, tenían que ejecutar varios comandos durante horas para configurar su entorno, que era compatible con la aplicación. Tuve que comprobar y evaluar el entorno de cada desarrollador para asegurarme de que no había desajustes con la versión de la tecnología que estaba utilizando.
- Por último, si alguno de los desarrolladores no se sentía cómodo con el sistema operativo que yo utilizaba para crear mi aplicación, le resultaba difícil trabajar en ella.
Todo esto dificultaba el desarrollo, la construcción y el envío de la aplicación a tiempo. Aquí es donde Docker entró en escena. Resuelve todos los problemas que acabo de mencionar.
¿Qué es Docker?
Docker es una plataforma de contenedorización que empaqueta la aplicación y sus dependencias dentro de un contenedor para que la aplicación funcione sin problemas en cualquier entorno, ya sea Desarrollo, Puesta en escena o Producción.
Es una herramienta diseñada para facilitar la creación, despliegue y ejecución de aplicaciones mediante el uso de contenedores. Los contenedores Docker son ligeros alternativas a las máquinas virtuales, y utiliza el sistema operativo del host. En los contenedores no es necesario preasignar memoria RAM como en las máquinas virtuales.
Se trata de una plataforma de código abierto para que desarrolladores, administradores de sistemas y empresas creen, distribuyan y ejecuten aplicaciones distribuidas sobre la marcha.
Para saber más sobre el funcionamiento interno de Docker, consulte la página Arquitectura Docker.
Imágenes Docker, Contenedores, Dockerfile
Imagen Docker
Una imagen Docker es una plantilla necesaria para ejecutar una aplicación. Consta de código de aplicación, bibliotecas, herramientas, dependencias, etc.
Las imágenes Docker son archivos inmutables de sólo lectura, que a veces también se denominan instantáneas. No se inicia ni se ejecuta una imagen Docker; se crea un contenedor a través de ella. Cuando se crea un contenedor a partir de una imagen Docker, se crea una capa de contenedor sobre la capa de la imagen.
Tiene que haber una imagen docker base que se utilice para crear otras múltiples imágenes docker con algunas modificaciones de la imagen base.
Centro Docker es un repositorio de imágenes Docker para casi todas las pilas tecnológicas. Puedes extraer una imagen Docker de DockerHub y empezar a crear contenedores.

Contenedores Docker
Los contenedores Docker son paquetes de software ejecutables que incluyen todas las dependencias necesarias para ejecutar una aplicación. Con los contenedores Docker, las aplicaciones pueden funcionar eficazmente en distintos entornos informáticos.
A continuación se detallan las características de los contenedores Docker:
- Ligero
- Mínima sobrecarga (CPU/IO/Red)
- Despliegues más rápidos
- Fácilmente ampliable
- Disminuir el consumo de almacenamiento
- Portátil, llévalo a todas partes.
- Sistema operativo de base mínima
- Aislamiento de aplicaciones
Dockerfile
Dockerfile es un script de shell que define todas las tareas que deben ejecutarse. A partir de un archivo docker, se crea una imagen docker; a partir de la imagen docker, se crea un contenedor docker.

Instalación de Docker
Docker puede instalarse fácilmente en varias plataformas Linux, Windows o macOS. Echa un vistazo a este post sobre Cómo instalar Docker en Ubuntu, CentOS, Debian y Windows.
También, Escritorio Docker está disponible para máquinas Windows y Mac. Se trata de una aplicación ejecutable muy fácil de instalar que ayuda a crear y contenerizar aplicaciones en entornos Windows y Mac.
Ediciones y precios de Docker
Existen dos ediciones de Docker:
- Edición comunitaria (CE)
- Edición Enterprise (EE)
La edición comunitaria de Docker es de código abierto y de uso gratuito. Docker CE tiene como objetivo "hágalo usted mismo" enfoque en el que DevOps ingenieros pueden contenerizar sus aplicaciones por su cuenta.
Docker enterprise edition viene con tres versiones - básico, estándar, y avanzado. La edición básica viene con una plataforma docker, soporte y certificación, mientras que las ediciones estándar y avanzada vienen con funciones de gestión de contenedores y escaneo de seguridad docker añadidas a las funciones de la edición básica.
La mayoría de los técnicos utilizan Docker de forma gratuita. Pero si necesitas funciones avanzadas, puedes utilizar la versión de pago de Docker. El precio depende de características como la gestión de repositorios, las funciones de CI/CD, la gestión de usuarios, las herramientas para desarrolladores y las opciones de soporte.
A continuación se detallan los planes de Docker:

Ahora que conoces los fundamentos de Docker déjame mostrarte un ejemplo muy simple de Docker.
Contenedor Docker Hello World
Voy a tirar de un imagen docker hello-world de DockerHub y construir la imagen para crear un contenedor Docker que ejecutará la aplicación. Esta imagen contiene una aplicación sencilla para imprimir un mensaje de hola desde Docker.
En primer lugar, tengo que tirar de la imagen docker hello-world en mi máquina Ubuntu.
NotaEsto supone que Docker ya está instalado. Si aún no lo está, consulte la guía de instalación.
geekflare@geekflare:~$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Status: Downloaded newer image for hello-world:latest
Comprueba si la imagen docker ha sido extraída.
geekflare@geekflare:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 7 months ago 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 months ago 90.8MB
geekflare_mongodb latest 095d17727ca0 12 months ago 325MB
Ejecute el siguiente comando para crear un contenedor y ejecutar la aplicación.
geekflare@geekflare:~$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Ahora, lista todos los contenedores docker. Puedes ver que el contenedor hello-world se ejecutó hace 1 minuto.
geekflare@geekflare:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a1056caffc4 hello-world "/hello" 1 minutes ago Exited (0) 1 minutes ago zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/…" 12 months ago Exited (0) 12 months ago mongo_container
Empiece a explorar Docker; pruebe estas herramientas fundamentales comandos docker.
Ejecutar Nginx dentro de un contenedor Docker
Aquí, te mostraré cómo desplegar Nginx dentro de un contenedor.
El siguiente comando busca una imagen Nginx localmente. Como no hay ninguna imagen local disponible, extrae la imagen docker de Nginx del docker hub. A continuación, crea un contenedor con el nombre nginx_geekflare
utilizando la imagen docker Nginx y ejecuta Nginx en el puerto 80.
geekflare@geekflare:~$ docker run --name nginx_geekflare -p 80:80 -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bf5952930446: Pull complete
ba755a256dfe: Pull complete
c57dd87d0b93: Pull complete
d7fbf29df889: Pull complete
1f1070938ccd: Pull complete
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Status: Downloaded newer image for nginx:latest
fdad18387b27b48b8f2e14f8641791cc4d5edf667cc664198b67579cd76a5162
Cuando enumere las imágenes Docker disponibles en su sistema, podrá ver que se ha extraído la imagen Docker de Nginx.
geekflare@geekflare:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08393e824c32 4 days ago 132MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 months ago 90.8MB
geekflare_mongodb latest 095d17727ca0 12 months ago 325MB
Ejecute el siguiente comando para listar todos los contenedores en ejecución. Puede ver el contenedor nginx_geekflare
está funcionando a 0.0.0.0:80
geekflare@geekflare:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdad18387b27 nginx "/docker-entrypoint.…" 58 seconds ago Up 32 seconds 0.0.0.0:80->80/tcp nginx_geekflare
1a1056caffc4 hello-world "/hello" About an hour ago Exited (0) About an hour ago zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/…" 12 months ago Exited (0) 12 months ago mongo_container
Ve a tu navegador y abre 0.0.0.0:80, puedes ver que nginx está funcionando dentro de un contenedor.

Casos comunes de uso de Docker
Simplificación de la configuración: Docker puede ejecutarse en cualquier plataforma con la ayuda de su configuración sin la sobrecarga real de una máquina virtual.
Le permite poner el archivo de configuración en el código y pasar variables de entorno para atender a diferentes entornos. De modo que una imagen Docker podría utilizarse en un entorno diferente.
Gestión de códigos: El código pasa por un entorno diferente en su viaje del desarrollo a la producción.
Cada entorno tiene una ligera variación con respecto al otro. Docker elimina esta diferencia proporcionando un entorno consistente, haciendo que el desarrollo y la codificación sean mucho más cómodos.

Como las imágenes Docker son inmutables, tienen la ventaja de que el entorno de la aplicación no cambia de desarrollo a producción.
Mejora de la productividad del desarrollo: Los dos objetivos esenciales en el ecosistema de desarrollo, es tener el entorno de desarrollo replicar lo más cerca posible al entorno de producción y el siguiente objetivo para obtener código de calidad entregado tan pronto como sea posible.
Docker permite que el código se ejecute en un contenedor que refleja el entorno de producción y, a diferencia de las máquinas virtuales, tiene menos sobrecarga de memoria, lo que ayuda a ejecutar varios servicios.
El otro objetivo se consigue ya que utilizamos el volumen compartido de Docker para que el código de la aplicación esté disponible para el contenedor desde el host. Esto permite al desarrollador editar el código fuente desde su plataforma y editor, lo que se reflejará en el entorno de ejecución dentro del Docker.
Aislamiento de aplicaciones: Hay casos en los que puede ser necesario aislar las aplicaciones, por ejemplo, API servidores que requieren diferentes apache y un conjunto diferente de dependencias.
Ejecutar servidores API en contenedores diferentes es una solución mucho mejor.
Funciones de depuración: Docker proporciona numerosas herramientas que funcionan bien con contenedores, con la capacidad de insertar puntos de control dentro de los contenedores y también diferentes contenedores, que son bastante esenciales mientras se prueban aplicaciones.
Despliegue rápido: Los contenedores Docker se pueden crear con bastante rapidez, lo que se consigue ya que los contenedores no arrancan un sistema operativo, sino que solo ejecutan la aplicación.
Una vez configurados, te dan la tranquilidad de que una vez que el código ha funcionado, funcionará en todos los entornos.
Conclusión
Docker, con sus enormes ventajas, se está convirtiendo en una valiosa adición a la infraestructura de TI. Espero que lo anterior te dé una idea al respecto. Si estás interesado en tomar cursos en línea, te recomendaría tomar Curso en línea Docker Mastery.