Table of Contents

Cómo crear contenedores Docker

Docker es una potente herramienta que se puede utilizar para crear aplicaciones portátiles y fácilmente desplegables. En esta guía, cubriremos los pasos básicos para crear y construir contenedores Docker. También repasaremos algunas de las mejores prácticas y consejos para asegurar que tus contenedores Docker sean eficientes, seguros y fáciles de usar.

Entendiendo Docker

Antes de empezar a construir contenedores Docker, es importante entender qué es Docker y cómo funciona.

Docker es una herramienta que te permite empaquetar una aplicación y sus dependencias en un contenedor que puede ejecutarse en cualquier sistema. El contenedor está aislado del sistema anfitrión e incluye todo lo necesario para ejecutar la aplicación, incluido el código, el tiempo de ejecución, las herramientas del sistema, las bibliotecas y la configuración.

Los contenedores son ligeros y fáciles de desplegar, lo que los convierte en una opción popular para crear y desplegar aplicaciones. Con Docker, puede crear, gestionar y ejecutar contenedores con una sencilla interfaz de línea de comandos.

Creación de una imagen Docker

Para construir un contenedor Docker, primero necesitas crear una imagen Docker. Una imagen Docker es una instantánea de un contenedor que incluye todos los archivos, librerías y dependencias necesarias para ejecutar la aplicación.

Estos son los pasos básicos para crear una imagen Docker:

  1. Crear un archivo Docker.
  2. Construir la imagen
  3. **Ejecutar el contenedor

Paso 1: Crear un Dockerfile

El primer paso para construir una imagen Docker es crear un Dockerfile. Un Dockerfile es un archivo de texto que contiene las instrucciones necesarias para construir la imagen. Aquí tienes un ejemplo de un Dockerfile sencillo:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Vamos a desglosar este Dockerfile:

  • FROM ubuntu:latest especifica la imagen base a utilizar para el contenedor. En este caso, estamos utilizando la última versión de Ubuntu.
  • RUN apt-get update && apt-get install -y nginx actualiza la lista de paquetes e instala el servidor web nginx.
  • COPY index.html /var/www/html/ copia el archivo index.html a la raíz web del contenedor.
  • EXPOSE 80 expone el puerto 80 al sistema anfitrión.
  • CMD ["nginx", "-g", "daemon off;"] inicia el servidor nginx y lo ejecuta en primer plano.

Paso 2: Construir la Imagen

Después de crear el archivo Dockerfile, puedes construir la imagen usando el comando docker build comando. He aquí un ejemplo:

docker run -d -p 80:80 my-nginx-image

Vamos a desglosar esta orden:

  • docker run le dice a Docker que ejecute un contenedor.
  • -d ejecuta el contenedor en modo separado, lo que significa que se ejecuta en segundo plano.
  • -p 80:80 asigna el puerto 80 del sistema anfitrión al puerto 80 del contenedor.
  • my-nginx-image especifica el nombre de la imagen Docker que se utilizará para el contenedor.

Mejores prácticas

Ahora que sabes cómo construir contenedores Docker, vamos a repasar algunas de las mejores prácticas para asegurar que tus contenedores Docker son eficientes, seguros y fáciles de usar.

Use Imágenes Base Pequeñas

Para mantener tus contenedores Docker pequeños y rápidos de desplegar, es mejor usar imágenes base pequeñas que sólo contengan las dependencias que tu aplicación necesita. Por ejemplo, en lugar de utilizar un sistema operativo completo como Ubuntu o CentOS, puede utilizar una imagen más pequeña como Alpine Linux o BusyBox.

Minimizar Capas

Cada línea en tu Dockerfile crea una nueva capa en tu imagen Docker, y cada capa aumenta el tamaño de la imagen. Para mantener tus imágenes Docker tan pequeñas como sea posible, deberías intentar minimizar el número de capas en tu imagen. Una forma de hacerlo es agrupar comandos similares en una sola línea en tu Dockerfile. Por ejemplo, en lugar de utilizar dos comandos RUN para actualizar la lista de paquetes e instalar un paquete, puede utilizar un único comando RUN para hacer ambas cosas a la vez.

Ej:

RUN apt update 
RUN apt install apache -y

vs

RUN apt update && apt install apache -y

Utilizar variables de entorno

El uso de variables de entorno en su Dockerfile en lugar de valores hardcoding hace que sea más fácil de personalizar su contenedor en tiempo de ejecución y asegura que su Dockerfile es portátil. Por ejemplo, puede utilizar variables de entorno para especificar el puerto en el que se ejecuta su aplicación o la ubicación de un archivo de configuración.

Ej:

docker run -e PORT=3000 my-app
FROM node:14

# Set the working directory
WORKDIR /app

# Copy package.json and yarn.lock to the container
COPY package.json yarn.lock ./

# Install dependencies
RUN yarn install --frozen-lockfile

# Copy the application code to the container
COPY . .

# Expose the application port
EXPOSE $PORT

# Start the application
CMD ["yarn", "start"]

Use Volume Mounts

Los montajes de volumen son una forma de compartir datos entre tu sistema anfitrión y tu contenedor Docker. Esto facilita la gestión de datos y reduce el tamaño de su contenedor Docker. Por ejemplo, puede utilizar un montaje de volumen para compartir un archivo de base de datos entre su sistema host y su contenedor.

Ej:

docker run -v /home/user/app/data:/app/data my-app
FROM node:14

# Set the working directory
WORKDIR /app

# Copy the package.json and yarn.lock files to the container
COPY package.json yarn.lock ./

# Install dependencies
RUN yarn install --frozen-lockfile

# Copy the rest of the application code to the container
COPY . .

# Expose the application port
EXPOSE 3000

# Start the application
CMD ["yarn", "start"]

# Mount a volume for the application data
VOLUME ["/app/data"]

Avoid Running as Root

Ejecutar tu contenedor Docker como usuario root puede suponer un riesgo de seguridad. En su lugar, debe crear un nuevo usuario en su Dockerfile y ejecutar el contenedor como ese usuario. Por ejemplo, puede utilizar la opción USER en su Dockerfile para crear un nuevo usuario y luego cambiar a ese usuario al ejecutar el contenedor.

Ej:

FROM node:14

# Create a new user to run the container
RUN useradd --user-group --create-home --shell /bin/false app

# Change the working directory to the app user's home directory
WORKDIR /home/app

# Install dependencies as the app user
COPY package.json yarn.lock ./
RUN chown -R app:app /home/app
USER app
RUN yarn install --frozen-lockfile --production

# Copy the application code as the app user
COPY --chown=app:app . .

# Expose the port
EXPOSE 3000

# Start the application as the app user
CMD ["yarn", "start"]

Mantener imágenes actualizadas

Para asegurar que tus contenedores Docker son seguros y libres de vulnerabilidades, es importante mantener tus imágenes Docker actualizadas. Esto significa actualizar regularmente la imagen base y cualquier dependencia de la que dependa tu aplicación. Por ejemplo, puede utilizar el archivo apt-get update y apt-get upgrade en su Dockerfile para mantener su contenedor actualizado con los últimos parches de seguridad y correcciones de errores.

Ej:

FROM ubuntu:latest

# Update the package list and install security updates
RUN apt-get update && apt-get upgrade -y && apt-get clean

# Install the nginx web server
RUN apt-get install -y nginx

# Copy the application code to the container
COPY . /var/www/html/

# Expose port 80 to the host system
EXPOSE 80

# Start the nginx server
CMD ["nginx", "-g", "daemon off;"]

Amplíe sus estudios

Documentación de Docker

Docker es una plataforma de código abierto para crear, enviar y ejecutar aplicaciones en contenedores. El sitio web de documentación de Docker proporciona información detallada sobre cómo instalar, configurar y utilizar Docker para una variedad de sistemas operativos y casos de uso. El sitio web también incluye información sobre las API de Docker, los comandos de la CLI de Docker y consejos para la resolución de problemas.

Algunas secciones útiles de la documentación de Docker incluyen:

La documentación de Docker es un gran recurso para aprender a utilizar Docker y para solucionar cualquier problema que pueda surgir.

Docker Hub

Docker Hub es un repositorio basado en la nube que permite almacenar, compartir y gestionar imágenes Docker. Docker Hub incluye repositorios públicos y privados, así como compilaciones y flujos de trabajo automatizados. Puede utilizar Docker Hub para almacenar sus propias imágenes Docker, así como para encontrar imágenes pre-construidas para aplicaciones de software y herramientas populares.

Algunas características útiles de Docker Hub incluyen:

Docker Hub es una herramienta esencial para trabajar con Docker, y puede ahorrarte mucho tiempo y esfuerzo a la hora de gestionar y compartir imágenes Docker.

Conclusión

Docker es una poderosa herramienta que puede ayudar a que sus aplicaciones sean más portátiles, eficientes y fáciles de implementar. Siguiendo estas mejores prácticas y consejos, puedes crear contenedores Docker que sean seguros, fáciles de usar y rápidos de desplegar. Tanto si estás creando una nueva aplicación como migrando una existente a Docker, estos pasos te ayudarán a empezar a crear contenedores Docker.