Appearance
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
coverageConstruye 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.0En 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: 3000La 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.