Ejercicios - 352.3 Docker

Pregunta 1

¿Cuál es la diferencia entre las instrucciones CMD y ENTRYPOINT en un Dockerfile?

a) No hay diferencia, son sinónimos b) CMD define el ejecutable principal y ENTRYPOINT los argumentos c) ENTRYPOINT define el ejecutable principal; CMD proporciona argumentos por defecto que pueden sobrescribirse d) CMD solo acepta formato shell, ENTRYPOINT solo formato exec

Respuesta

c) ENTRYPOINT define el ejecutable principal; CMD proporciona argumentos por defecto que pueden sobrescribirse

ENTRYPOINT define el ejecutable que siempre se ejecuta. CMD proporciona argumentos por defecto que se pasan a ENTRYPOINT y pueden ser sobrescritos al hacer docker run imagen nuevos-args. ENTRYPOINT solo se sobrescribe con --entrypoint.

Pregunta 2

¿Qué ventaja proporcionan los multi-stage builds en un Dockerfile?

a) Permiten ejecutar múltiples contenedores simultáneamente b) Aceleran la descarga de la imagen base c) Reducen el tamaño de la imagen final al separar las etapas de compilación y ejecución d) Permiten usar múltiples sistemas operativos en un mismo contenedor

Respuesta

c) Reducen el tamaño de la imagen final al separar las etapas de compilación y ejecución

Los multi-stage builds permiten usar una imagen con herramientas de compilación en la primera etapa y copiar solo el binario resultante a una imagen mínima final. COPY --from=builder copia archivos de una etapa anterior.

Pregunta 3

¿Qué tipo de red Docker permite la resolución DNS automática de contenedores por nombre?

a) La red bridge por defecto (docker0) b) La red host c) Una red bridge personalizada (user-defined) d) La red none

Respuesta

c) Una red bridge personalizada (user-defined)

Las redes bridge personalizadas (creadas con docker network create) incluyen un servidor DNS interno que permite a los contenedores resolverse por nombre. La red bridge por defecto (docker0) no ofrece esta funcionalidad; solo permite comunicación por IP.

Pregunta 4

¿Qué hace el archivo .dockerignore?

a) Lista las imágenes que Docker debe ignorar del registry b) Excluye archivos y directorios del contexto de build enviado al daemon c) Define reglas de seguridad para el contenedor d) Lista contenedores que no deben iniciarse automáticamente

Respuesta

b) Excluye archivos y directorios del contexto de build enviado al daemon

.dockerignore funciona como .gitignore: excluye archivos del contexto de build. Esto reduce el tamaño del contexto enviado al daemon, acelera la construcción y evita incluir archivos sensibles (.env, .git, node_modules) en la imagen.

Pregunta 5

¿Qué comando ejecuta un proceso bash interactivo dentro de un contenedor Docker ya en ejecución?

a) docker run -it contenedor bash b) docker attach contenedor c) docker exec -it contenedor bash d) docker shell contenedor

Respuesta

c) docker exec -it contenedor bash

docker exec ejecuta un nuevo proceso dentro de un contenedor en ejecución. -i mantiene stdin abierto y -t asigna un pseudo-TTY. docker run crearía un nuevo contenedor. docker attach conecta al proceso principal del contenedor, no crea uno nuevo.

Pregunta 6

¿Cuál es la diferencia entre un volumen Docker y un bind mount?

a) Los bind mounts son más portátiles que los volúmenes b) Los volúmenes son gestionados por Docker; los bind mounts mapean una ruta específica del host c) Los volúmenes solo funcionan en Linux; los bind mounts en cualquier SO d) No hay diferencia, son sinónimos

Respuesta

b) Los volúmenes son gestionados por Docker; los bind mounts mapean una ruta específica del host

Los volúmenes Docker son creados y gestionados por Docker (almacenados en /var/lib/docker/volumes/). Los bind mounts mapean directamente un directorio o archivo del host al contenedor. Los volúmenes son más portátiles y recomendados para datos persistentes.

Pregunta 7

¿Qué comando detiene todos los servicios definidos en un docker-compose.yml y elimina los volúmenes asociados?

a) docker compose stop --volumes b) docker compose down -v c) docker compose rm --volumes d) docker compose destroy -v

Respuesta

b) docker compose down -v

docker compose down detiene y elimina contenedores, redes y la configuración creada por up. La opción -v (o --volumes) también elimina los volúmenes nombrados definidos en la sección volumes del archivo compose.

Pregunta 8

¿Qué instrucción del Dockerfile se recomienda en lugar de ADD para copiar archivos locales?

a) PUT b) COPY c) INSERT d) IMPORT

Respuesta

b) COPY

COPY es la instrucción recomendada para copiar archivos locales al contenedor. ADD tiene funcionalidad extra (descomprimir tar, descargar URLs) que puede causar comportamientos inesperados. ADD solo se justifica cuando se necesita específicamente la descompresión automática de archivos tar.

Pregunta 9

¿Qué opción de docker run hace que el contenedor se elimine automáticamente cuando se detiene?

a) --auto-remove b) --rm c) --clean d) --disposable

Respuesta

b) --rm

La opción --rm elimina automáticamente el contenedor y su filesystem cuando el proceso principal sale. Es útil para contenedores efímeros usados en pruebas o ejecuciones puntuales: docker run -it --rm ubuntu bash.

Pregunta 10

¿Qué comando elimina contenedores detenidos, redes no usadas, imágenes sin referencia y caché de build?

a) docker cleanup b) docker system prune c) docker purge all d) docker gc

Respuesta

b) docker system prune

docker system prune elimina todos los recursos no utilizados: contenedores detenidos, redes sin contenedores, imágenes dangling y caché de build. Con --volumes también elimina volúmenes no usados. docker system df muestra el uso de disco antes de limpiar.

Pregunta 11

¿Qué instrucción del Dockerfile define una comprobación periódica del estado de salud del contenedor?

a) CHECK b) MONITOR c) HEALTHCHECK d) STATUS

Respuesta

c) HEALTHCHECK

HEALTHCHECK define un comando que Docker ejecutará periódicamente para verificar que el contenedor funciona correctamente. Opciones como --interval, --timeout y --retries controlan la frecuencia y tolerancia. Ejemplo: HEALTHCHECK --interval=30s CMD curl -f http://localhost/ || exit 1.

Pregunta 12

¿Qué opción de docker run establece una política de reinicio para que el contenedor se reinicie siempre excepto cuando se detiene manualmente?

a) --restart always b) --restart unless-stopped c) --restart on-failure d) --restart auto

Respuesta

b) --restart unless-stopped

--restart unless-stopped reinicia el contenedor automáticamente si se detiene por cualquier razón, excepto cuando fue detenido manualmente con docker stop. A diferencia de always, no reinicia el contenedor tras un reinicio del daemon Docker si fue detenido manualmente.

Pregunta 13

¿Qué tipo de red Docker permite que el contenedor comparta directamente la pila de red del host?

a) bridge b) overlay c) host d) macvlan

Respuesta

c) host

La red host elimina el aislamiento de red entre el contenedor y el host. El contenedor comparte directamente la pila de red del host, incluyendo interfaces, puertos e IP. No se necesita mapeo de puertos con -p. Es útil cuando el rendimiento de red es crítico pero reduce el aislamiento.

Pregunta 14

¿Qué hace la instrucción ARG en un Dockerfile a diferencia de ENV?

a) ARG persiste como variable de entorno en el contenedor final b) ARG define variables disponibles solo durante la construcción de la imagen, no en el contenedor final c) ARG y ENV son idénticos en funcionalidad d) ARG solo acepta valores numéricos

Respuesta

b) ARG define variables disponibles solo durante la construcción de la imagen, no en el contenedor final

ARG declara variables que solo existen durante el proceso de docker build y pueden sobrescribirse con --build-arg. ENV establece variables de entorno que persisten en la imagen final y están disponibles cuando el contenedor se ejecuta. Se pueden combinar: ARG VERSION seguido de ENV APP_VERSION=$VERSION.

Pregunta 15

¿Qué comando crea una nueva imagen Docker a partir de un contenedor en ejecución con cambios realizados?

a) docker save b) docker export c) docker commit d) docker snapshot

Respuesta

c) docker commit

docker commit contenedor mi-imagen:v1 crea una nueva imagen a partir del estado actual de un contenedor, incluyendo todos los cambios realizados en su filesystem. Aunque útil para pruebas, no se recomienda para producción donde se debe usar un Dockerfile para reproducibilidad.

Pregunta 16

¿Qué configuración en /etc/docker/daemon.json habilita user namespaces para mejorar la seguridad de Docker?

a) {"security-opts": ["userns"]} b) {"userns-remap": "default"} c) {"user-namespaces": true} d) {"remap-users": "enabled"}

Respuesta

b) {"userns-remap": "default"}

La opción "userns-remap": "default" en /etc/docker/daemon.json habilita el remapeo de usuarios. Docker creará automáticamente un usuario dockremap y asignará rangos de UIDs/GIDs subordinados. El UID 0 dentro del contenedor se mapeará a un UID sin privilegios en el host.

Pregunta 17

¿Cuál es la diferencia entre docker stop y docker kill?

a) No hay diferencia b) docker stop envía SIGTERM y espera un timeout antes de SIGKILL; docker kill envía SIGKILL inmediatamente c) docker stop elimina el contenedor; docker kill solo lo detiene d) docker kill funciona solo con contenedores privilegiados

Respuesta

b) docker stop envía SIGTERM y espera un timeout antes de SIGKILL; docker kill envía SIGKILL inmediatamente

docker stop envía SIGTERM al proceso principal del contenedor, dándole un período de gracia (por defecto 10 segundos, configurable con -t) para un apagado limpio. Si no se detiene, envía SIGKILL. docker kill envía SIGKILL (o la señal especificada con -s) inmediatamente.

Pregunta 18

¿Qué instrucción del Dockerfile establece el directorio de trabajo para las instrucciones RUN, CMD, ENTRYPOINT, COPY y ADD posteriores?

a) WORKDIR b) CHDIR c) DIR d) BASEDIR

Respuesta

a) WORKDIR

WORKDIR /app establece el directorio de trabajo para todas las instrucciones posteriores del Dockerfile. Si el directorio no existe, se crea automáticamente. Se pueden usar múltiples WORKDIR en un Dockerfile, y las rutas relativas se resuelven respecto al WORKDIR anterior.

Pregunta 19

¿Qué driver de red Docker permite crear redes que abarcan múltiples hosts Docker en un clúster Swarm?

a) bridge b) host c) overlay d) macvlan

Respuesta

c) overlay

El driver overlay crea redes virtuales que abarcan múltiples hosts Docker, permitiendo que contenedores en diferentes nodos de un clúster Swarm se comuniquen entre sí. Utiliza VXLAN para encapsular el tráfico de red entre los hosts.

Pregunta 20

¿Qué opción de docker run monta el filesystem del contenedor en modo solo lectura?

a) --readonly b) --read-only c) --ro d) --fs-readonly

Respuesta

b) --read-only

docker run --read-only monta el filesystem raíz del contenedor en modo solo lectura, impidiendo cualquier escritura. Se pueden usar volúmenes o tmpfs para las rutas que necesiten escritura (como /tmp). Es una buena práctica de seguridad que previene la modificación del contenido de la imagen.

Pregunta 21

Escribe el comando para construir una imagen Docker con la etiqueta mi-app:v2 usando el Dockerfile ubicado en el directorio actual.

Respuesta

docker build -t mi-app:v2 .

docker build construye una imagen a partir de un Dockerfile. -t (tag) asigna nombre y etiqueta a la imagen. El . al final especifica el contexto de build (directorio actual), que es el conjunto de archivos accesibles durante la construcción.

Pregunta 22

Escribe el comando para ver el uso de disco de Docker mostrando imágenes, contenedores y volúmenes.

Respuesta

docker system df

docker system df muestra un resumen del uso de disco de Docker, desglosado por tipo: imágenes, contenedores y volúmenes. Indica el espacio total, activo y recuperable. Con -v muestra detalles de cada recurso individual.

Pregunta 23

Escribe el comando para ejecutar un contenedor nginx en modo daemon, con nombre web, mapeando el puerto 8080 del host al 80 del contenedor.

Respuesta

docker run -d —name web -p 8080:80 nginx

-d ejecuta el contenedor en modo daemon (background). --name web asigna el nombre. -p 8080:80 mapea el puerto 8080 del host al puerto 80 del contenedor. Se accede al servicio en http://localhost:8080.

Pregunta 24

Escribe el comando para copiar el archivo /etc/nginx/nginx.conf desde el contenedor web al directorio actual del host.

Respuesta

docker cp web:/etc/nginx/nginx.conf ./

docker cp copia archivos entre un contenedor y el host. El formato es contenedor:ruta para la fuente o destino dentro del contenedor. Funciona tanto con contenedores en ejecución como detenidos.

Pregunta 25

Escribe el comando de Docker Compose para levantar todos los servicios en modo daemon y reconstruir las imágenes.

Respuesta

docker compose up -d —build

docker compose up -d --build levanta todos los servicios definidos en docker-compose.yml en modo daemon (-d) y reconstruye las imágenes antes de iniciar (--build). Sin --build, Docker Compose reutiliza imágenes existentes si están disponibles.