Etiqueta: docker

  • Diferencia entre Máquinas Virtuales, Contenedores y Servicios

    Máquinas Virtuales (VM):

    • Aislamiento: Las VMs proporcionan un aislamiento completo, ya que ejecutan un sistema operativo completo independiente del host.
    • Recurso Intensivo: Las VMs pueden consumir más recursos, porque cada una tiene su propio sistema operativo y una cantidad significativa de recursos dedicados.
    • Arranque Más Lento: El arranque de una VM es más lento, puesto que implica iniciar un sistema operativo completo.
    • Hypervisor: Las VMs se ejecutan en un hipervisor, que gestiona y asigna recursos para cada máquina virtual.

    Contenedores:

    • Aislamiento Ligero: Los contenedores comparten el mismo kernel del sistema operativo del host, lo que proporciona un aislamiento más ligero.
    • Eficiencia de Recursos: Los contenedores son más eficientes en términos de recursos, ya que comparten el mismo sistema operativo y solo incluyen las bibliotecas y dependencias necesarias.
    • Arranque Rápido: Los contenedores tienen un arranque rápido, por el hecho de que no requieren iniciar un sistema operativo completo.
    • Docker, Containerd, etc.: Docker es una de las tecnologías de contenedores más populares, y otras implementaciones incluyen containerd, rkt, etc.
  • ¿Qué es Docker?

    Docker es una plataforma de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores.

    Docker es una plataforma de software que utiliza la tecnología de contenedores para permitir el empaquetado, la distribución y la ejecución de aplicaciones de manera eficiente y portátil en entornos informáticos. Docker utiliza contenedores para encapsular aplicaciones y sus dependencias, incluidas las bibliotecas, archivos y herramientas necesarias para que la aplicación se ejecute de manera independiente.

    Un contenedor es una unidad ligera y portátil que incluye todo lo necesario para ejecutar una aplicación, como el código, las bibliotecas y las dependencias.

    Docker facilita la creación, distribución y ejecución de aplicaciones en entornos consistentes y aislados. Esto mejora la eficiencia del desarrollo y la implementación, ya que las aplicaciones empacadas en contenedores pueden ejecutarse de manera consistente en cualquier entorno que admita Docker.

    ¿Qué es un contenedor?

    Un contenedor es una unidad ligera y portátil que incluye todo lo necesario para ejecutar una aplicación, haciéndola consistente y fácil de mover entre diferentes entornos. Son eficientes en recursos y proporcionan aislamiento para evitar conflictos entre aplicaciones

    Los contenedores proporcionan un entorno aislado y consistente que garantiza que la aplicación funcione de la misma manera, independientemente del entorno de ejecución.

    Docker permite empaquetar aplicaciones y sus dependencias en imágenes de contenedores. Una imagen de contenedor es un paquete ligero y autónomo que incluye todo lo necesario para ejecutar una aplicación, desde el código hasta las bibliotecas y los archivos de configuración.

    Las imágenes de contenedores pueden distribuirse a través de repositorios, como Docker Hub, donde los desarrolladores pueden compartir y descargar imágenes públicas y privadas. Esto facilita la distribución y la colaboración en el desarrollo de aplicaciones.

    Los siguientes conceptos son diferentes aunque en una aplicación real pueden usarse todos para desplegar tus aplicaciones:

    • Microservicios: Son una forma de diseñar y construir aplicaciones que promueve la modularidad, la independencia, la escalabilidad y la flexibilidad
    • Kubernetes: Es una herramienta poderosa para la gestión de contenedores y aplicaciones, que proporciona capacidades avanzadas de automatización, escalabilidad y gestión de recursos.
    • Docker: Es una herramienta que te permite gestionar y publicar contenedores.
    • Contenedores: Permiten que cualquier persona ejecute tu aplicación en su dispositivo sin importar el sistema operativo, el lenguaje de programación, etc.
    • Images: Plantilla para la creación de contenedores.
    • Volumes: Ayudan a persistir los datos que son creado dentro de un contenedor, esto debido a que si no se usa los datos se pierden cuando el contenedor se destruye, ya que son efímeros.
    • Dev Environments: Son entornos de producción que ayudan a reducir los riesgos de versiones entre los equipos.
    • Docker Scout: Es una herramienta para el monitoreo y gestión visual de los contenedores, permitiendo realizar acciones a través de una interfaz gráfica.

    Ejemplo:

    docker scout quickview <image_name>

    Comandos útiles

    docker --version
    docker --help
    docker info

    Para comenzar necesitamos crear una imagen:

    docker build -t website:latest .

    Comandos para imágenes

    Construir una imagen a partir de un archivo Dockerfile

    docker build -t <nombre_de_imagen>

    Construir una imagen desde un archivo Dockerfile sin la caché

    docker build -t <nombre_de_imagen> . -no-cache

    Listar imágenes locales

    docker images

    Eliminar una imagen

    docker rmi <nombre_imagen>

    Eliminar todas las imágenes no utilizadas

    docker image prune

    Comandos para contenedores

    Crea y ejecuta un contenedor a partir de una imagen, con un nombre personalizado:

    docker run --name <nombre_contenedor> <nombre_imagen>

    Ejecutar un contenedor con y publicar un puerto(s) del contenedor al host.

    docker run -p <puerto_host>:<puerto_contenedor> <nombre_imagen>

    Ejecutar un contenedor en segundo plano

    docker run -d <nombre_imagen>

    Iniciar o detener un contenedor existente:

    docker start|stop <nombre_del_contenedor> (o <id_del_contenedor>)

    Eliminar un contenedor detenido:

    docker rm <nombre_del_contenedor>

    Abrir un shell dentro de un contenedor en ejecución:

    docker exec -it <nombre_del_contenedor> sh
    docker exec -it <nombre_del_contenedor> bash

    Obtener y seguir los logs de un contenedor:

    docker logs -f <nombre_contenedor>

    Inspeccionar un contenedor en ejecución:

    docker inspect <nombre_del_contenedor> (o <id_del_contenedor>)

    Para listar los contenedores actualmente en ejecución:

    docker ps

    Listar todos los contenedores docker (en ejecución y parados):

    docker ps --all

    Ver las estadísticas de uso de recursos

    docker container stats

    Referencia: https://docs.docker.com/get-started/docker_cheatsheet.pdf