Skip to content

Imágenes y contenedores ​

Kubernetes ejecuta contenedores a partir de imágenes disponibles en un registro. La imagen incluye la aplicación y sus dependencias; el clúster descarga la imagen y el runtime del nodo inicia el contenedor dentro de un Pod.

Docker y Kubernetes ​

Docker es una herramienta muy utilizada para construir imágenes y ejecutar contenedores en desarrollo. Sin embargo, Kubernetes moderno no necesita Docker Engine en los nodos: utiliza un runtime compatible con la Container Runtime Interface (CRI), como containerd o CRI-O. Las imágenes construidas con Docker suelen ser imágenes OCI compatibles y se pueden ejecutar con esos runtimes.

En Kubernetes no se despliegan contenedores locales del equipo de desarrollo. Se publica la imagen en un registro accesible para los nodos y el manifiesto referencia la imagen mediante su nombre y etiqueta.

Construir una imagen ​

Ejemplo de Dockerfile multi-stage para una aplicación Node.js que genera dist y escucha en el puerto 3000:

dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

Adapta los comandos y las rutas al proyecto real. Un .dockerignore evita incluir archivos innecesarios o sensibles en el contexto de construcción:

text
.git
.env
node_modules
coverage

Construye y etiqueta la imagen con una versión identificable:

bash
docker build -t mi-usuario/mi-app:1.0.0 .

Evita usar latest como única referencia en despliegues: una etiqueta versionada hace más fácil identificar qué versión está ejecutándose y revertirla.

Publicar en un registro ​

Después de autenticarte en el registro correspondiente, publica la imagen:

bash
docker login
docker push mi-usuario/mi-app:1.0.0

En CI, utiliza credenciales protegidas del sistema de automatización en lugar de guardar contraseñas en el Dockerfile o en el repositorio. También puedes etiquetar una imagen con el identificador de commit para asociar el artefacto con su código fuente.

Usar una imagen en Kubernetes ​

Un contenedor de un Pod referencia la imagen del registro:

yaml
containers:
  - name: app
    image: mi-usuario/mi-app:1.0.0
    ports:
      - name: http
        containerPort: 3000

La sección es un fragmento; normalmente va dentro de spec.template.spec de un Deployment. Para imágenes privadas, crea un imagePullSecret en el mismo namespace y referencia su nombre mediante imagePullSecrets en la plantilla del Pod. No incluyas credenciales del registro en el manifiesto.

Kubernetes reutiliza imágenes locales si el runtime y la política de descarga lo permiten. En clústeres multi-nodo, publica la imagen en un registro compartido: una imagen construida solo en el equipo local no está automáticamente disponible en los nodos.