Saltar a contenido

Fundamentos de Docker

Imagen

Como es ampliamente conocido, una de las tareas más tediosas en el desarrollo de software es la configuración del entorno. Las diferencias en los entornos de ejecución pueden llevar a resultados inesperados, pero el uso de Docker puede evitar este tipo de problemas.

Docker y la Tecnología de Contenedores

Docker empaca el software en sí mismo junto con el entorno de ejecución necesario, de modo que no es necesario configurar el entorno al utilizarlo (ya que el entorno se encuentra dentro del paquete). Esto asegura que tu entorno sea idéntico al de los desarrolladores, evitando problemas causados por diferencias en el entorno de ejecución.

Docker utiliza la tecnología de contenedorización. Cuando hablamos de contenedorización, podemos compararla con un contenedor de envío. Es un contenedor grande y estandarizado que se puede cargar y descargar fácilmente entre varios medios de transporte, como barcos, trenes y camiones, sin preocuparse por su contenido interno específico. De manera similar, la tecnología de contenedorización empaqueta la aplicación y todas sus dependencias en un entorno independiente y portátil, llamado contenedor.

El objetivo principal de la tecnología de contenedorización es lograr una implementación rápida de aplicaciones, escalabilidad y aislamiento del entorno. Al empaquetar la aplicación y sus dependencias en un contenedor, garantizamos que la aplicación se ejecute de manera coherente en diferentes computadoras o servidores, sin preocuparnos por las diferencias en el entorno o los conflictos de dependencias. Esto permite a los desarrolladores entregar aplicaciones más rápidamente y simplifica el proceso de implementación y gestión de aplicaciones.

Una de las principales ventajas de la tecnología de contenedorización es que proporciona una solución de virtualización ligera. En comparación con las máquinas virtuales tradicionales, la tecnología de contenedorización es más liviana y consume menos recursos. Cada contenedor se ejecuta en el mismo kernel del sistema operativo anfitrión, compartiendo los recursos del sistema operativo. Como resultado, los contenedores se inician más rápido, utilizan menos memoria y pueden ejecutarse simultáneamente en la misma máquina.

Docker es una de las soluciones de contenedorización más populares en la actualidad. Se compone principalmente de tres elementos: Imagen (Image), Contenedor (Container) y Repositorio (Repository).

  • Imagen (Image): Una imagen es un archivo ejecutable que contiene el sistema de archivos completo de una aplicación, incluyendo código, tiempo de ejecución, herramientas del sistema y bibliotecas. Puedes pensar en una imagen como una plantilla para crear múltiples instancias de contenedores diferentes.
  • Contenedor (Container): Un contenedor es una instancia en ejecución creada a partir de una imagen. Cada contenedor es un entorno aislado e independiente en el que se puede ejecutar una aplicación.
  • Repositorio (Repository): Un repositorio es un lugar para almacenar y compartir imágenes. Puedes cargar tus propias imágenes en un repositorio y también descargar imágenes creadas por otros.

La relación entre los contenedores y las imágenes es similar a la relación entre objetos y clases en la programación orientada a objetos.

Instalación y Configuración de Docker

Antes de instalar Docker, puedes desinstalar versiones antiguas de paquetes con el siguiente comando para evitar conflictos:

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

Para los sistemas Linux más comunes, puedes utilizar el siguiente script oficial para descargar e instalar Docker Engine (debes tener permisos de usuario root):

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run

Dado que Docker se ejecuta en un entorno Linux y depende de él, tiene un impacto prácticamente nulo en la eficiencia. Sin embargo, si deseas implementar Docker en otros sistemas, primero debes instalar un entorno Linux virtual.

Imagen

Para obtener instrucciones sobre cómo instalar Docker en Windows, consulta la documentación oficial Instalar Docker Desktop en Windows.

Para obtener instrucciones sobre cómo instalar Docker en MacOS, consulta la documentación oficial Instalar Docker Desktop en Mac.

Una vez que hayas instalado Docker siguiendo el procedimiento, puedes verificar si la instalación se realizó con éxito utilizando el siguiente comando:

docker version

Si deseas utilizar Docker Engine en Linux sin ser un usuario root, puedes configurar los permisos con los siguientes comandos:

sudo groupadd docker
sudo usermod -aG docker $USER

Después de configurar esto, es posible que necesites cerrar sesión y volver a iniciarla para actualizar los permisos.

Si encuentras problemas durante la instalación, puedes consultar la documentación oficial en Troubleshoot Docker Engine installation.

Ejemplo: Hello World

A continuación, se utilizará el ejemplo oficial de hello-world para demostrar Docker. Abre una terminal o símbolo del sistema e ingresa el siguiente comando para ejecutar un contenedor hello-world:

docker run hello-world

Esto descargará la imagen hello-world desde el repositorio de Docker, creará y ejecutará el contenedor. Cuando veas la salida de "hello world", significará que la ejecución fue exitosa.

Algunos comandos comunes de Docker CLI

Docker proporciona una serie de comandos potentes y completos para administrar y operar recursos como contenedores, imágenes, redes, y más. Aquí tienes algunos comandos comunes de Docker CLI:

  • docker run: Crea y ejecuta un nuevo contenedor basado en una imagen especificada. Por ejemplo, docker run -d -p 8080:80 nginx ejecutará un contenedor NGINX en segundo plano y mapeará el puerto 8080 del host al puerto 80 del contenedor.
  • docker ps: Lista los contenedores en ejecución. Por defecto, muestra información sobre los contenedores en ejecución, como su ID, imagen y comando. Puedes usar docker ps -a para ver todos los contenedores, incluyendo los detenidos.
  • docker stop: Detiene uno o varios contenedores en ejecución. Puedes especificar el ID o nombre del contenedor. Por ejemplo, docker stop mycontainer detendrá el contenedor llamado mycontainer.
  • docker start: Inicia uno o varios contenedores que están detenidos. Puedes usar el ID o nombre del contenedor para especificar cuál iniciar.
  • docker restart: Reinicia uno o varios contenedores.
  • docker rm: Elimina uno o varios contenedores. Si necesitas eliminar un contenedor en ejecución, puedes usar docker rm -f.
  • docker images: Enumera las imágenes locales, mostrando información como ID, tamaño y fecha de creación.
  • docker rmi: Elimina una o varias imágenes. Puedes especificar las imágenes por su ID o etiqueta. Por ejemplo, docker rmi myimage:1.0 eliminará la imagen llamada myimage con la etiqueta 1.0.
  • docker build: Construye una imagen personalizada basada en un Dockerfile. Por ejemplo, docker build -t myimage:1.0 . construirá una imagen llamada myimage con la etiqueta 1.0 en función del Dockerfile en el directorio actual.
  • docker exec: Ejecuta un comando en un contenedor en ejecución. Puedes especificar el ID o nombre del contenedor, así como el comando que deseas ejecutar. Por ejemplo, docker exec -it mycontainer bash abrirá un terminal interactivo en el contenedor llamado mycontainer.

Estos son algunos de los comandos más comunes de Docker para administrar contenedores e imágenes. Existen más comandos que puedes explorar utilizando docker --help para ver la lista completa y otras opciones disponibles. También puedes consultar la documentación oficial en Use the Docker command line para obtener más información sobre Docker. Si deseas obtener más conocimientos relacionados con Docker, te invitamos a consultar artículos adicionales.

Si deseas sumergirte directamente en la práctica, también puedes consultar la siguiente serie de artículos:

Referencias y Agradecimientos

Dirección original del artículo: https://wiki-power.com/ Este artículo está protegido por la licencia CC BY-NC-SA 4.0. Si desea reproducirlo, por favor indique la fuente.

Este post está traducido usando ChatGPT, por favor feedback si hay alguna omisión.