Sistema operativo base
Alpine, Debian, Ubuntu u otra distribución mínima.
Referencia de conceptos e instrucciones para construir imágenes Docker de forma automatizada y reproducible. Abra cada instrucción para ver ejemplos de sintaxis y recomendaciones de uso.
Conceptos
Concepto 1 de 6
Archivo de texto plano con instrucciones secuenciales para construir una imagen Docker de forma automatizada y reproducible.
Ventajas
Concepto 2 de 6
Una imagen es una plantilla inmutable de solo lectura con todo lo necesario para ejecutar una aplicación.
Alpine, Debian, Ubuntu u otra distribución mínima.
Python, Node.js, JVM u otro entorno de ejecución.
Librerías y paquetes requeridos por la aplicación.
El software que se ejecutará dentro del contenedor.
Variables de entorno y comandos de inicio.
Concepto 3 de 6
Cada instrucción del Dockerfile crea una capa inmutable y cacheable en la imagen resultante.
CMD ["python", "app.py"]COPY app.py /app/RUN pip install flaskFROM python:3.11Las capas funcionan así:
Elija qué cambia antes de reconstruir la imagen y observe qué capas se reutilizan desde la caché. Luego cree un contenedor para ver su capa de escritura.
CMD ["python", "app.py"]Solo metadatos: no agrega archivos · 0 BCACHEDCOPY app.py /app/Capa de sistema de archivos · ~4 KBCACHEDRUN pip install flaskCapa de sistema de archivos · ~10 MBCACHEDFROM python:3.11Capas de la imagen base · ~1 GBCACHEDConcepto 4 de 6
El conjunto de archivos y directorios que Docker puede acceder durante la construcción de la imagen.
$ docker build -t mi-app:1.0 . ↑ contexto (directorio actual)Active las líneas del .dockerignore y observe cuánto contexto se envía al construir. Los tamaños son ilustrativos.
.dockerignore · active cada línea
Directorio del proyecto
Dockerfile1 KBapp.py4 KBrequirements.txt1 KBsrc/2 MBnode_modules/180 MB.git/45 MBdist/12 MBdebug.log8 MB.env1 KBdocker build -t mi-app:1.0 . => [internal] load build context => => transferring context: 247.0MB
Instrucciones
Concepto 5 de 6
FROM, RUN, COPY, WORKDIR, ENV, EXPOSE, CMD, ENTRYPOINT y ADD: las instrucciones con las que se escribe la mayoría de los Dockerfile.
FROMImagen base. Define la imagen base desde la cual construir. Siempre es la primera instrucción.FROM python:3.11-slimFROM node:18-alpineFROM ubuntu:22.04
# Multi-stage buildFROM node:18 AS builderFROM nginx:alpine AS productionRUNEjecutar comandos. Ejecuta comandos durante la construcción. Cada RUN crea una nueva capa.# Comando únicoRUN apt-get update
# Múltiples comandos combinados (reduce capas)RUN apt-get update && apt-get install -y \ curl \ git && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*COPYCopiar archivos. Copia archivos o directorios del contexto de construcción a la imagen.COPY app.py /app/app.pyCOPY app.py requirements.txt /app/COPY ./src /app/srcCOPY --chown=appuser:appuser app.py /app/COPY . /app/WORKDIRDirectorio de trabajo. Define el directorio de trabajo para instrucciones subsecuentes. Se crea automáticamente si no existe.WORKDIR /app
# Los comandos siguientes se ejecutan en /appRUN ls -laCOPY . .ENVVariables de entorno. Define variables disponibles durante la construcción y en tiempo de ejecución del contenedor.ENV NODE_ENV=production
ENV APP_HOME=/app \ APP_USER=appuser \ PORT=8080
# Usar variables en instrucciones posterioresENV APP_DIR=/appWORKDIR ${APP_DIR}EXPOSEDocumentar puertos. Documenta qué puertos escucha el contenedor. No publica el puerto en el host.EXPOSE 8080EXPOSE 8080 8443EXPOSE 53/udpCMDComando por defecto. Define el comando que se ejecuta al iniciar el contenedor. Se puede sobrescribir en docker run.# Shell formCMD python app.py
# Exec form (recomendado)CMD ["python", "app.py"]
# Parámetros para ENTRYPOINTCMD ["--port", "8080"]ENTRYPOINTPunto de entrada. Define el ejecutable principal del contenedor. No se sobrescribe fácilmente.# Combinación típica ENTRYPOINT + CMDENTRYPOINT ["python", "app.py"]CMD ["--host", "0.0.0.0"]docker run.--entrypoint para sobrescribirlo.ADDCopiar con capacidades adicionales. Similar a COPY pero con extracción automática de tar y descarga de URLs.# Extrae automáticamente archivos tarADD archive.tar.gz /app/
# Descarga desde URLADD https://example.com/file.zip /tmp/Combine un Dockerfile con una forma de ejecutar el contenedor y observe qué proceso se inicia realmente.
Dockerfile
CMD ["python", "app.py"]Ejecución
docker run mi-appProceso que se inicia (PID 1)
python app.py
Concepto 6 de 6
ARG, USER, VOLUME, LABEL, HEALTHCHECK y ONBUILD: parametrización, seguridad, metadatos y verificación de salud.
ARGArgumentos de construcción. Variables disponibles solo durante la construcción, no en runtime. Se pasan con --build-arg.ARG PYTHON_VERSION=3.11FROM python:${PYTHON_VERSION}
ARG BUILD_DATERUN echo "Build date: ${BUILD_DATE}"$ docker build --build-arg PYTHON_VERSION=3.12 \ --build-arg BUILD_DATE=$(date) -t mi-app .USERCambiar usuario. Define el usuario para ejecutar instrucciones subsecuentes y el proceso del contenedor.# Crear usuario no-rootRUN adduser --disabled-password --gecos '' appuser
# Cambiar a usuario no-rootUSER appuser
# Usuario y grupoUSER appuser:appgroupVOLUMEPunto de montaje. Declara un punto de montaje para volúmenes persistentes.VOLUME /dataVOLUME ["/data", "/logs", "/config"]LABELMetadatos. Agrega metadatos a la imagen en formato clave-valor.LABEL version="1.0.0" \ maintainer="jesse@example.com" \ description="Mi aplicación dockerizada" \ org.opencontainers.image.source="https://github.com/user/repo"HEALTHCHECKVerificación de salud. Define cómo verificar si el contenedor está saludable.HEALTHCHECK --interval=30s --timeout=3s \ --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/health || exit 1
# Deshabilitar healthcheck heredadoHEALTHCHECK NONEONBUILDTriggers para imágenes base. Ejecuta instrucciones cuando la imagen se usa como base para otra construcción.# En la imagen baseONBUILD COPY . /appONBUILD RUN npm install
# Cuando otra imagen use FROM esta-imagen,# los ONBUILD se ejecutan automáticamenteAutoevaluación
Cinco preguntas rápidas para verificar las ideas clave de la lectura. Cada respuesta incluye una explicación.
0/5 respuestas correctas