informatica:sistemas_operativos:cursos:docker_avanzado:distribucion_de_imagenes
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| informatica:sistemas_operativos:cursos:docker_avanzado:distribucion_de_imagenes [2023/10/10 15:58] – creado tempwin | informatica:sistemas_operativos:cursos:docker_avanzado:distribucion_de_imagenes [2023/10/18 18:30] (actual) – [Caso práctico] tempwin | ||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| Contenido perteneciente al curso [[informatica: | Contenido perteneciente al curso [[informatica: | ||
| + | |||
| + | ===== Registro ===== | ||
| + | |||
| + | Para la distribución de imágenes usamos los registros | ||
| + | |||
| + | Podemos usar un registro público o uno privado | ||
| + | |||
| + | El registro público más conocido y usado es Docker Hub | ||
| + | |||
| + | ===== Docker Hub ===== | ||
| + | |||
| + | Para publicar en Docker Hub lo primero que necesitamos es crear una cuenta de usuario: https:// | ||
| + | |||
| + | Una vez tenemos la cuenta creada, tenemos que ir a la sección de repositorios y nos creamos nuestro propio repositorio: | ||
| + | |||
| + | Lo siguiente es iniciar sesión con nuestro usuario en nuestro docker cliente: | ||
| + | |||
| + | < | ||
| + | docker login --username={username} | ||
| + | </ | ||
| + | |||
| + | Ahora ya podemos crear imágenes con nuestro repositorio y subirlas a Docker Hub: | ||
| + | |||
| + | < | ||
| + | docker build {userName}/ | ||
| + | </ | ||
| + | |||
| + | Esto nos genera la imagen de forma local: | ||
| + | |||
| + | < | ||
| + | docker images | ||
| + | </ | ||
| + | |||
| + | El último paso es subirla al registro: | ||
| + | |||
| + | < | ||
| + | docker push {userName}/ | ||
| + | </ | ||
| + | |||
| + | ===== Docker Hub - Privado ===== | ||
| + | |||
| + | Tenemos la posibilidad de instalar un servidor privado de Docker Hub en nuestra infraestructura | ||
| + | |||
| + | Ejemplo rápido de instalación en un contenedor: | ||
| + | |||
| + | < | ||
| + | docker run -d -p 5000:5000 --restart always --name registry registry:2 | ||
| + | </ | ||
| + | |||
| + | Y lo podríamos usar así: | ||
| + | |||
| + | < | ||
| + | docker pull ubuntu | ||
| + | docker tag ubuntu localhost: | ||
| + | docker push localhost: | ||
| + | </ | ||
| + | |||
| + | Un ejemplo más completo de configuración: | ||
| + | docker-registry-on-ubuntu-18-04-es | ||
| + | |||
| + | ===== Práctica guiada: auditar vulnerabilidades ===== | ||
| + | |||
| + | Al igual que el resto de los componentes software, las imágenes de contenedores Docker, también suelen estar expuestas a vulnerabilidades que podrían desencadenar en una amenaza potencial cuando se ponga el contenedor en ejecución si no se detectan y tratan correctamente. | ||
| + | |||
| + | ==== Docker Scout ==== | ||
| + | |||
| + | Docker incorpora una herramienta llamada **Docker Scout** que nos puede ayudar a identificar estas vulnerabilidades en nuestras imágenes. Lo podemos ejecutar de forma directa en línea de comandos o integrarlo con nuestro registro (Docker Hub, …) y nuestras herramientas de CI. | ||
| + | |||
| + | Cuenta con los siguientes subcomandos: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Para instalar docker scout en Linux sin Docker Compose se puede usar [[https:// | ||
| + | |||
| + | < | ||
| + | curl -sSfL https:// | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Para usar docker scout es necesario tener un Docker ID, para ello hay que crearse una cuenta en [[https:// | ||
| + | </ | ||
| + | |||
| + | ==== Caso práctico ==== | ||
| + | |||
| + | Vamos a poner a prueba esta herramienta con una imagen de Ubuntu. | ||
| + | |||
| + | **1. Lo primero es descargar la imagen que queremos analizar** | ||
| + | |||
| + | < | ||
| + | docker pull ubuntu: | ||
| + | </ | ||
| + | |||
| + | **2. Visualizamos un resumen rápido de vulnerabilidades** | ||
| + | |||
| + | < | ||
| + | docker scout quickview ubuntu: | ||
| + | </ | ||
| + | |||
| + | Ejemplo de salida: | ||
| + | |||
| + | < | ||
| + | ✓ SBOM of image already cached, 143 packages indexed | ||
| + | |||
| + | Target | ||
| + | digest │ e4c58958181a | ||
| + | |||
| + | What's Next? | ||
| + | View vulnerabilities → docker scout cves ubuntu: | ||
| + | Include policy results in your quickview by supplying an organization → docker scout quickview ubuntu: | ||
| + | </ | ||
| + | |||
| + | **3. Vamos a consultar el detalle de todas las vulnerabilidades** | ||
| + | |||
| + | < | ||
| + | docker scout cves ubuntu: | ||
| + | </ | ||
| + | |||
| + | Ejemplo (resumido) de salida: | ||
| + | |||
| + | < | ||
| + | ✓ SBOM of image already cached, 143 packages indexed | ||
| + | ✗ Detected 12 vulnerable packages with a total of 14 vulnerabilities | ||
| + | |||
| + | |||
| + | ## Overview | ||
| + | |||
| + | │ | ||
| + | ────────────────────┼────────────────────────────── | ||
| + | Target | ||
| + | digest | ||
| + | platform | ||
| + | vulnerabilities │ 0C | ||
| + | size │ 34 MB | ||
| + | packages | ||
| + | |||
| + | |||
| + | ## Packages and Vulnerabilities | ||
| + | |||
| + | | ||
| + | pkg: | ||
| + | |||
| + | ✗ MEDIUM CVE-2022-48522 | ||
| + | https:// | ||
| + | Affected range : >=0 | ||
| + | Fixed version | ||
| + | CVSS Score : 9.8 | ||
| + | CVSS Vector | ||
| + | (...) | ||
| + | 14 vulnerabilities found in 12 packages | ||
| + | LOW 12 | ||
| + | MEDIUM | ||
| + | HIGH 0 | ||
| + | CRITICAL | ||
| + | </ | ||
| + | |||
| + | **4. Finalmente vamos a probar el comando de recomendaciones** | ||
| + | |||
| + | < | ||
| + | docker scout recommendations ubuntu: | ||
| + | </ | ||
| + | |||
| + | Ejemplo de salida: | ||
| + | |||
| + | < | ||
| + | ✓ SBOM of image already cached, 143 packages indexed | ||
| + | |||
| + | Could not display recommendations for ubuntu: | ||
| + | image has no base image | ||
| + | </ | ||
| + | |||
| + | **5. Ve a [[https:// | ||
| + | |||
| + | **6. Crea una imagen personalizada llamada '' | ||
| + | |||
| + | Dockerfile: | ||
| + | |||
| + | < | ||
| + | FROM ubuntu: | ||
| + | RUN apt-get update && apt-get upgrade | ||
| + | RUN apt-get clean | ||
| + | </ | ||
| + | |||
| + | **7. Repite los pasos 2, 3 y 4 sobre la imagen personalizada que acabamos de crear y analiza los resultados obtenidos. ¿Tenemos alguna posible solución para reducir las vulnerabilidades? | ||
| + | |||
| + | Al hacer: | ||
| + | |||
| + | < | ||
| + | docker scout recommendations ubuntu-updated | ||
| + | </ | ||
| + | |||
| + | Nos dice: | ||
| + | |||
| + | < | ||
| + | Change base image | ||
| + | The list displays new recommended tags in descending order, where the top results are rated as most suitable. | ||
| + | |||
| + | |||
| + | Tag | ||
| + | ──────────────────────────┼────────────────────────────────────────────────────────┼─────────────┼────────────────────────────── | ||
| + | | ||
| + | Major OS version update │ • Image is smaller by 2.2 MB | ||
| + | Also known as: │ • Image contains 18 fewer packages | ||
| + | • mantic | ||
| + | • rolling | ||
| + | • mantic-20231011 | ||
| + | │ │ │ | ||
| + | │ Image details: | ||
| + | │ • Size: 27 MB │ │ | ||
| + | │ • OS: 23.10 │ │ | ||
| + | │ │ │ | ||
| + | │ │ │ | ||
| + | │ │ │ | ||
| + | | ||
| + | Major OS version update │ • Image is smaller by 2.5 MB | ||
| + | Also known as: │ • Image contains 17 fewer packages | ||
| + | • lunar │ • Image introduces no new vulnerability but removes 8 │ │ | ||
| + | • lunar-20231004 | ||
| + | │ • 23.04 was pulled 1.5M times last month | ||
| + | │ │ │ | ||
| + | │ Image details: | ||
| + | │ • Size: 27 MB │ │ | ||
| + | │ • Flavor: ubuntu | ||
| + | │ • OS: 23.04 │ │ | ||
| + | </ | ||
| + | |||
| + | Vamos a hacer lo que nos sugiere y cambiar la imagen base por la '' | ||
| + | |||
| + | < | ||
| + | FROM ubuntu: | ||
| + | |||
| + | RUN apt-get update && apt-get upgrade | ||
| + | RUN apt-get clean | ||
| + | </ | ||
| + | |||
| + | **8. Finalmente vamos a probar la opción de comparación (OJO: es una función experimental del comando '' | ||
| + | |||
| + | Primero vamos a comparar la imagen base de ubuntu: | ||
| + | |||
| + | < | ||
| + | docker scout compare ubuntu: | ||
| + | </ | ||
| + | |||
| + | Resultado (resumido>: | ||
| + | |||
| + | < | ||
| + | WARN ' | ||
| + | ✓ SBOM of image already cached, 143 packages indexed | ||
| + | ...Storing image for indexing | ||
| + | ✓ Image stored for indexing | ||
| + | ...Indexing | ||
| + | ✓ Indexed 143 packages | ||
| + | |||
| + | |||
| + | ## Overview | ||
| + | |||
| + | │ | ||
| + | ────────────────────┼─────────────────────────────┼────────────────────────────── | ||
| + | Target | ||
| + | digest | ||
| + | platform | ||
| + | vulnerabilities │ 0C | ||
| + | │ │ | ||
| + | size │ 34 MB (-32 MB) │ 66 MB | ||
| + | packages | ||
| + | │ │ | ||
| + | |||
| + | |||
| + | ## Environment Variables | ||
| + | |||
| + | |||
| + | PATH=/ | ||
| + | (...) | ||
| + | ## Packages and Vulnerabilities | ||
| + | |||
| + | |||
| + | 143 packages unchanged | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | (...) | ||
| + | </ | ||
| + | |||
| + | A continuación, | ||
| + | |||
| + | < | ||
| + | docker scout compare ubuntu: | ||
| + | </ | ||
| + | |||
| + | Resultado (resumido): | ||
| + | |||
| + | < | ||
| + | WARN ' | ||
| + | ✓ SBOM of image already cached, 143 packages indexed | ||
| + | ...Storing image for indexing | ||
| + | ✓ Image stored for indexing | ||
| + | ...Indexing | ||
| + | ✓ Indexed 125 packages | ||
| + | |||
| + | |||
| + | ## Overview | ||
| + | |||
| + | │ | ||
| + | ────────────────────┼─────────────────────────────┼────────────────────────────── | ||
| + | Target | ||
| + | digest | ||
| + | platform | ||
| + | vulnerabilities │ 0C | ||
| + | │ +2 +12 │ | ||
| + | size │ 34 MB (+2.7 MB) │ 31 MB | ||
| + | packages | ||
| + | │ │ | ||
| + | |||
| + | |||
| + | ## Environment Variables | ||
| + | (...) | ||
| + | ## Packages and Vulnerabilities | ||
| + | |||
| + | |||
| + | + 23 packages added | ||
| + | - 5 packages removed | ||
| + | ⎌ 115 packages changed (↑ 0 upgraded, ↓ 115 downgraded) | ||
| + | 5 packages unchanged | ||
| + | |||
| + | |||
| + | + 14 vulnerabilities added | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | ↓ acl deb | ||
| + | + adduser | ||
| + | ↓ apt deb | ||
| + | ↓ attr | ||
| + | (...) | ||
| + | </ | ||
| + | ==== Trivy ==== | ||
| + | |||
| + | Si queremos hacer un examen más en profundidad podemos echar mano de la herramienta [[https:// | ||
| + | |||
| + | A diferencia de Docker Scout, Trivy tiene un ámbito de funcionamiento mucho mayor. La podemos utilizar para detectar CVEs en imágenes de contenedores, | ||
| + | virtuales, configuraciones de Kubernetes o de infraestructuras cloud, etc. | ||
| + | |||
| + | === Caso práctico === | ||
| + | |||
| + | La herramienta Trivy se puede instalar como un script de sistema en diferentes plataformas, | ||
| + | |||
| + | 1. Para poder utilizar Trivy y optimizar mejor el uso reiterado de la herramienta vamos a utilizar un bind para persistir la cache de la herramienta. Para ello creamos una carpeta que luego usaremos como volumen (También lo podemos hacer con un named volumen si lo preferimos) | ||
| + | |||
| + | < | ||
| + | mkdir ~/ trivy-cache | ||
| + | </ | ||
| + | |||
| + | 2. Vamos a ejecutar un análisis sobre la imagen de ubuntu: | ||
| + | |||
| + | < | ||
| + | docker run --rm -v / | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Al ligar '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | **3. Compara los resultados obtenidos con Trivy y los obtenidos con Docker Scan. ¿Tenemos más o menos VCEs?** | ||
| + | |||
| + | Resultado (resumido): | ||
| + | |||
| + | < | ||
| + | ubuntu: | ||
| + | ============================ | ||
| + | Total: 23 (UNKNOWN: 0, LOW: 17, MEDIUM: 6, HIGH: 0, CRITICAL: 0) | ||
| + | |||
| + | ┌──────────────────┬────────────────┬──────────┬──────────┬──────────────────────────┬───────────────┬─────────────────────────────────────────────────────────────┐ | ||
| + | │ | ||
| + | ├──────────────────┼────────────────┼──────────┼──────────┼──────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ | ||
| + | │ bash │ CVE-2022-3715 | ||
| + | │ │ │ │ │ │ │ https:// | ||
| + | ├──────────────────┼────────────────┤ | ||
| + | │ coreutils | ||
| + | │ │ │ │ │ │ │ session in chroot | ||
| + | │ │ │ │ │ │ │ https:// | ||
| + | ├──────────────────┼────────────────┤ | ||
| + | </ | ||
| + | |||
| + | ^ Vulnerabilidades ^ Docker Scout ^ Trivy ^ | ||
| + | | Unknown | ||
| + | | Low | 12 | 17 | | ||
| + | | Medium | ||
| + | | High | ||
| + | | Critical | ||
| + | |||
| + | Con '' | ||
informatica/sistemas_operativos/cursos/docker_avanzado/distribucion_de_imagenes.1696946329.txt.gz · Última modificación: por tempwin
