Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En DevOps Última actualización: 15 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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.

dockerhub-geekflare

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.

archivo 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:

precios docker - geekflare

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.

contenedor nginx

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.

código

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.

  • Avi
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre DevOps
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder