Docker y Docker-compose

La idea de Docker, es la de crear aplicaciones/servicios que sean independientes y portables. Esto es, no importa que sistema operativo utilices o con que hardware cuentas, si puedes instalar docker, entonces podras correr tus contenedores en él. Entre las ventajas de usar docker, se encuentra la de olvidarte de instalar dependencias (ejemplo nodejs, java, python, ruby, etc) dentro de tu host o servidor y sin utilizar máquinas virtuales. 

Docker posibilita ir de tu maquina local a producción, con tu aplicació lista. Ya no es necesario instalar en cada servidor dependencias o depender del sistema operativo. Solo basta con tener Docker instalado.

Contenedor Docker

Un contenedor Docker es un paquete que contiene todos los requisitos previos necesarios para ejecutar una aplicación.

Los contenedores están diseñados para ser altamente portátiles, lo que significa que pueden trasladarse fácilmente de un entorno a otro, como del portátil de un desarrollador a un entorno de pruebas o de un entorno de pruebas a un entorno de producción.

Imagen Docker

Una imagen Docker es una plantilla preconfigurada que especifica lo que debe incluirse en un contenedor Docker. Normalmente, las imágenes se descargan de sitios web como Docker Hub. Sin embargo, también es posible crear una imagen personalizada con la ayuda de Dockerfile.

Registro Docker

El registro Docker es un repositorio central que almacena y gestiona imágenes Docker. Es un sistema basado en servidor que permite a los usuarios almacenar y compartir imágenes Docker con otros, facilitando la distribución y despliegue de aplicaciones. El registro Docker más notable es Docker Hub.

Comandos Docker

Ahora que ya sabes cómo funciona Docker, veamos algunos de los ejemplos de comandos Docker más populares.

Comandos de construcción

Docker utiliza el comando build para construir imágenes a partir de un archivo Docker. Algunos de los comandos más comunes son:

ComandoExplicación
docker buildConstruye una imagen a partir de un Dockerfile en el directorio actual
docker build https://github.com/docker
/rootfs.git#contenedor:docker
Construye una imagen desde un repositorio GIT remoto
docker build -t imagename/tagConstruye y etiqueta una imagen para facilitar su seguimiento
docker build https://yourserver/file.tar.gzCrea una imagen a partir de un archivo tar remoto
docker build -t imagen:1.0-<<EOFFROM busyboxRUN echo «hola mundo «EOFConstruye una imagen mediante un archivo Dockerfile que se pasa a través de STDIN

Comandos de limpieza

Para mantener limpio tu sistema y ahorrar espacio en disco, es una gran idea limpiar las imágenes, contenedores y volúmenes que no se utilicen. Consulta los siguientes comandos para más detalles:

ComandoExplicación
docker image pruneBorra una imagen no utilizada
docker image prune -aBorra todas las imágenes que no estén siendo utilizadas por contenedores
docker system pruneElimina todos los contenedores detenidos, todas las redes no utilizadas por los contenedores, todas las imágenes colgadas y toda la caché de construcción.
docker image rm imageElimina una imagen
docker rm containerElimina un contenedor en ejecución
docker kill $ (docker ps -q)Detiene todos los contenedores en ejecución
docker swarm leaveDeja un enjambre
docker stack rm stacknameElimina un enjambre
docker volume rm $(docker volume ls -f dangling=true -q)Elimina todos los volúmenes colgados
docker rm $(docker ps -a -q)Elimina todos los contenedores parados
docker kill $ (docker ps -q)Detiene todos los contenedores en ejecución

Comandos de interacción con el contenedor

Interactúa con tu contenedor Docker con los siguientes comandos comunes:

ComandoExplicación
docker start containerInicia un nuevo contenedor
docker stop containerDetiene un contenedor
docker pause containerPausa un contenedor
docker unpause containerDespausa un contenedor
docker restart containerReinicia un contenedor
docker wait containerBloquea un contenedor
docker export containerExporta el contenido del contenedor a un archivo tar
docker attach containerSe une a un contenedor en ejecución
docker wait containerEspera a que se termine el contenedor y muestra el código de salida
docker commit -m “commit message” -a “author” container username/image_name: tagGuarda un contenedor en ejecución como una imagen
docker logs -ft containerSigue los registros de contenedores
docker exec -ti container script.shEjecuta un comando en un contenedor
docker commit container imageCrea una nueva imagen a partir de un contenedor
docker create imageCrea un nuevo contenedor a partir de una imagen

Comandos de inspección de contenedores

A veces, necesitas inspeccionar tus contenedores para garantizar la calidad o solucionar problemas. Estos comandos te ayudan a tener una visión general de lo que están haciendo los distintos contenedores:

ComandoExplicación
docker psLista todos los contenedores en ejecución
docker -ps -aLista todos los contenedores
docker diff containerInspecciona los cambios en los directorios y archivos del sistema de archivos del contenedor
docker top containerMuestra todos los procesos en ejecución de un contenedor existente
docker inspect containerMuestra información de bajo nivel sobre un contenedor
docker logs containerReúne los registros de un contenedor
docker stats containerMuestra las estadísticas de uso de los recursos del contenedor

Comandos de gestión de imágenes

Algunos de los comandos de gestión de imágenes más comunes son:

ComandoExplicación
docker image lsLista imágenes
docker image rm mysqlElimina una imagen
docker tag image tagEtiqueta una imagen
docker history imageMuestra el historial de imágenes
docker inspect imageMuestra información de bajo nivel sobre una imagen

Comandos de ejecución

Docker utiliza el comando ejecutar para crear contenedores a partir de las imágenes proporcionadas. La sintaxis por defecto de este comando es la siguiente:docker run (options) image (command) (arg…)
docker run (options) image (command) (arg…)

docker run (options) image (command) (arg...)

Después de la sintaxis por defecto, utiliza una de las siguientes flags:

FlagExplicación
–detach , -dEjecuta un contenedor en segundo plano e imprime el ID del contenedor
–env , -eEstablece variables de entorno
–hostname , -hEstablece un nombre de host a un contenedor
–label , -lCrea una etiqueta de metadatos para un contenedor
–nameAsigna un nombre a un contenedor
–networkConecta un contenedor a una red
–rmRetira el contenedor cuando se detenga
–read-onlyEstablece el sistema de archivos del contenedor como sólo lectura
–workdir , -wEstablece un directorio de trabajo en un contenedor

Comandos de registro

Si necesitas interactuar con Docker Hub, utiliza los siguientes comandos:

ComandoExplicación
docker loginAccede a un registro
docker logoutSale de un registro
docker pull mysqlExtrae una imagen de un registro
docker push repo/ rhel-httpd:latestEnvía una imagen a un registro
docker search termBusca en Docker Hub imágenes con el término especificado

Comandos de servicio

Gestiona todos los servicios con estos comandos básicos de Docker:

ComandoExplicación
docker service lsLista todos los servicios que se ejecutan en un enjambre
docker stack services stacknameLista todos los servicios en ejecución
docker service ps servicenameLista las tareas de un servicio
docker service update servicenameActualiza un servicio
docker service create imageCrea un nuevo servicio
docker service scale servicename=10Escala uno o más servicios replicados
docker service logs stackname servicenameLista todos los registros de servicio

Comandos de red

Si necesitas interactuar con la red Docker, utiliza uno de los siguientes comandos:

ComandoExplicación
docker network create networknameCrea una nueva red
docker network rm networknameElimina una red especificada
docker network lsLista todas las redes
docker network connect networkname containerConecta un contenedor a una red
docker network disconnect networkname containerDesconecta un contenedor de una red
docker network inspect networknameMuestra información detallada sobre una red

La diferencia entre los comandos docker create y docker run en Docker puede ser confusa al principio, pero aquí está la explicación:

  1. docker create: Este comando crea un nuevo contenedor a partir de una imagen, pero no lo ejecuta. En otras palabras, crea un contenedor a partir de una imagen, pero no lo inicia. Puedes pensar en ello como preparar un contenedor para su uso, pero sin ponerlo en funcionamiento. Por ejemplo:docker create --name mi-contenedor mi-imagen Esto crea un contenedor llamado “mi-contenedor” basado en la imagen “mi-imagen”, pero no lo inicia.
  2. docker run: Este comando combina los pasos de creación y ejecución. Crea el contenedor a partir de la imagen especificada y luego lo inicia. Es decir, es como si ejecutáramos docker create seguido de docker start. Por ejemplo:docker run --name mi-contenedor mi-imagen Esto crea y ejecuta un contenedor llamado “mi-contenedor” basado en la imagen “mi-imagen”.

La diferencia entre los comandos docker stop y docker kill en Docker radica en cómo detienen un contenedor:

  1. docker stop: Este comando detiene el contenedor de manera graceful (graciosa) y proporciona una salida segura. Cuando ejecutas docker stop, Docker envía la señal SIGTERM al proceso dentro del contenedor. Esta señal permite que el proceso se termine de manera ordenada. Si el proceso no se detiene dentro del tiempo especificado, Docker emite un comando de kill implícitamente y de inmediato. En resumen, docker stop da al proceso la oportunidad de cerrarse correctamente12.
  2. docker kill: Este comando envía la señal SIGKILL al proceso principal dentro del contenedor. A diferencia de SIGTERM, SIGKILL no permite que el proceso realice ninguna acción antes de ser detenido. Es una forma más drástica de detener el contenedor y se utiliza cuando un contenedor está bloqueado o no responde. Sin embargo, ten en cuenta que usar docker kill puede dejar procesos “zombie” si el proceso hijo no puede notificar a su proceso padre que recibió la señal de kill12.

En resumen:

  • docker stop detiene el contenedor de manera ordenada.
  • docker kill detiene el contenedor de manera inmediata y drástica.

El comando docker build se utiliza para construir imágenes de Docker a partir de un archivo llamado Dockerfile y un contexto. Aquí está la explicación detallada:

  1. Dockerfile: Un Dockerfile es un archivo de texto que contiene una serie de instrucciones para construir una imagen de Docker. Estas instrucciones incluyen cosas como copiar archivos, instalar paquetes, configurar variables de entorno y más. El Dockerfile debe estar ubicado en el mismo directorio o en un directorio accesible desde el contexto1.
  2. Contexto: El contexto es el conjunto de archivos y directorios que Docker utiliza para construir la imagen. Puede ser un directorio local en tu máquina o una URL remota. El contexto incluye todos los archivos necesarios para construir la imagen, como el Dockerfile, scripts, archivos de configuración, etc.1.
  3. Sintaxis del comando:

Directivas en un Dockerfile

Un Dockerfile es un archivo de texto que contiene instrucciones para construir una imagen de Docker. Estas instrucciones especifican cómo se debe ensamblar la imagen, qué sistema operativo base usar, las dependencias de la aplicación y más1. Algunas de las directivas más comunes en un Dockerfile son:

  1. FROM: Esta directiva especifica la imagen base desde la cual construir. Por ejemplo:FROM ubuntu:20.04
  2. RUN: Ejecuta comandos en el contenedor durante la construcción de la imagen. Por ejemplo:RUN apt-get update && apt-get install -y python3
  3. COPY y ADD: Copian archivos o directorios desde el host al contenedor. Por ejemplo:COPY app.py /app/
  4. WORKDIR: Establece el directorio de trabajo dentro del contenedor. Por ejemplo:WORKDIR /app
  5. EXPOSE: Especifica los puertos en los que el contenedor escuchará. Por ejemplo:EXPOSE 8080
  6. CMD y ENTRYPOINT: Definen el comando que se ejecutará cuando se inicie el contenedor. La diferencia es que CMD puede ser sobrescrito al ejecutar el contenedor, mientras que ENTRYPOINT no2.

Uso de Volúmenes en Docker

Los volúmenes en Docker permiten persistir datos entre contenedores o guardar datos de un contenedor de manera permanente. Aquí están los pasos básicos para trabajar con volúmenes:

  1. Crear un volumen:
    • Utiliza el comando docker volume create para crear un volumen con un nombre específico. Por ejemplo:docker volume create mi-volumen
  2. Montar un volumen en un contenedor:
    • Al ejecutar un contenedor, utiliza la opción -v o --mount para especificar el volumen que deseas montar y la ruta dentro del contenedor donde se almacenarán los datos. Por ejemplo:docker run -v mi-volumen:/ruta-en-el-contenedor mi-imagen
  3. Compartir volúmenes entre contenedores:
    • Puedes montar el mismo volumen en varios contenedores utilizando el mismo nombre de volumen. Esto permite compartir datos entre ellos.
  4. Verificar y gestionar volúmenes:
    • Lista los volúmenes con docker volume ls.
    • Inspecciona un volumen específico con docker volume inspect.
    • Elimina un volumen con docker volume rm.

Recuerda que los volúmenes te permiten persistir y compartir datos entre contenedores y el host subyacente. Son una excelente solución para mantener datos incluso después de eliminar un contenedor

Docker Compose

Docker Compose es una herramienta que te permite definir y ejecutar aplicaciones Docker con múltiples contenedores. Esto facilita la implementación y gestión de entornos complejos. A continuación, te mostraré cómo instalar Docker Compose y cómo empezar a usarlo:

  1. Instalación de Docker Compose en Ubuntu:
    • Primero, asegúrate de tener Docker instalado en tu servidor o equipo local. Si aún no lo has hecho, sigue los Pasos 1 y 2 de Cómo instalar y usar Docker en Ubuntu 20.04.
    • Luego, instala Docker Compose siguiendo estos pasos:
      • Abre una terminal en tu servidor Ubuntu.
      • Ejecuta el siguiente comando para descargar la versión estable más reciente de Docker Compose:sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      • Establece los permisos correctos para que el comando docker-compose sea ejecutable:sudo chmod +x /usr/local/bin/docker-compose
      • Verifica que la instalación se realizó correctamente:docker-compose --version
      • Deberías ver un resultado similar a esto:docker-compose version 1.26.0, build 8a1c60f6
    • ¡Listo! Docker Compose está instalado en tu sistema.
  2. Configuración de un archivo docker-compose.yml:
    • Ahora puedes crear un archivo docker-compose.yml para definir tus servicios y contenedores. Por ejemplo, puedes configurar un entorno de servidor web usando la imagen oficial de Nginx desde Docker Hub.
    • En el archivo docker-compose.yml, especifica los servicios, imágenes, redes y volúmenes que necesitas para tu aplicación.
    • Ejecuta tus servicios juntos usando el comando docker-compose up.

El archivo docker-compose.yml es esencial para definir y orquestar servicios y contenedores en Docker Compose. Te explicaré cómo construir uno paso a paso:

  1. Instalación de Docker Compose:
  2. Estructura del archivo docker-compose.yml:
    • El archivo docker-compose.yml se define en formato YAML y contiene la descripción de tus servicios y cómo se deben ejecutar.
    • Aquí tienes un ejemplo básico de un archivo docker-compose.yml con dos servicios: uno para una base de datos MongoDB y otro para una aplicación Node.js:
version: '3'
services:
  db-mongo:
    image: mongo
    environment:
      MONGO_INITDB_ROOT_USERNAME: myuser
      MONGO_INITDB_ROOT_PASSWORD: mypassword
  purenode:
    image: node:14
    ports:
      - '3000:3000'
    volumes:
      - ./app:/usr/src/app
    depends_on:
      - db-mongo
  • En este ejemplo:
    • db-mongo utiliza la imagen oficial de MongoDB y establece credenciales de acceso.
    • purenode utiliza la imagen oficial de Node.js, expone el puerto 3000 y monta un volumen local para la aplicación.
    • El servicio purenode depende del servicio db-mongo.
  • Personaliza tu archivo docker-compose.yml:
    • Define tus propios servicios, imágenes, puertos, volúmenes y redes según tus necesidades.
    • Puedes agregar más servicios, configurar redes personalizadas y especificar volúmenes compartidos.

Publicaciones Similares

6 comentarios

  1. # Harvard University: A Legacy of Excellence and Innovation

    ## A Brief History of Harvard University

    Founded in 1636, **Harvard University** is the oldest and
    one of the most prestigious higher education institutions in the United States.

    Located in Cambridge, Massachusetts, Harvard has built a global
    reputation for academic excellence, groundbreaking research, and influential alumni.
    From its humble beginnings as a small college established
    to educate clergy, it has evolved into a world-leading university that shapes
    the future across various disciplines.

    ## Harvard’s Impact on Education and Research

    Harvard is synonymous with **innovation and intellectual leadership**.
    The university boasts:

    – **12 degree-granting schools**, including the renowned **Harvard Business
    School**, **Harvard Law School**, and **Harvard Medical School**.

    – **A faculty of world-class scholars**, many of whom are Nobel
    laureates, Pulitzer Prize winners, and pioneers in their fields.

    – **Cutting-edge research**, with Harvard leading initiatives in artificial intelligence, public health, climate change, and more.

    Harvard’s contribution to research is immense, with billions of dollars allocated to scientific discoveries and technological advancements
    each year.

    ## Notable Alumni: The Leaders of Today and Tomorrow

    Harvard has produced some of the **most influential figures**
    in history, spanning politics, business, entertainment, and science.
    Among them are:

    – **Barack Obama & John F. Kennedy** – Former U.S. Presidents
    – **Mark Zuckerberg & Bill Gates** – Tech visionaries (though Gates did not graduate)
    – **Natalie Portman & Matt Damon** – Hollywood icons
    – **Malala Yousafzai** – Nobel Prize-winning activist

    The university continues to cultivate future leaders who shape industries and drive
    global progress.

    ## Harvard’s Stunning Campus and Iconic Library

    Harvard’s campus is a blend of **historical charm and modern innovation**.
    With over **200 buildings**, it features:

    – The **Harvard Yard**, home to the iconic **John Harvard Statue** (and the famous “three lies” legend).

    – The **Widener Library**, one of the largest university libraries in the
    world, housing **over 20 million volumes**.
    – State-of-the-art research centers, museums, and performing arts venues.

    ## Harvard Traditions and Student Life

    Harvard offers a **rich student experience**, blending academics with vibrant traditions, including:

    – **Housing system:** Students live in one of 12 residential houses, fostering
    a strong sense of community.
    – **Annual Primal Scream:** A unique tradition where students
    de-stress by running through Harvard Yard before finals!

    – **The Harvard-Yale Game:** A historic football rivalry that unites alumni and
    students.

    With over **450 student organizations**, Harvard students engage
    in a diverse range of extracurricular activities, from
    entrepreneurship to performing arts.

    ## Harvard’s Global Influence

    Beyond academics, Harvard drives change in **global
    policy, economics, and technology**. The university’s research impacts healthcare, sustainability, and
    artificial intelligence, with partnerships across industries worldwide.
    **Harvard’s endowment**, the largest of any university,
    allows it to fund scholarships, research, and public initiatives, ensuring a legacy
    of impact for generations.

    ## Conclusion

    Harvard University is more than just a school—it’s
    a **symbol of excellence, innovation, and leadership**.

    Its **centuries-old traditions, groundbreaking discoveries, and transformative education** make it one of the most
    influential institutions in the world. Whether through its distinguished alumni, pioneering research,
    or vibrant student life, Harvard continues to shape the future in profound ways.

    Would you like to join the ranks of Harvard’s legendary
    scholars? The journey starts with a dream—and an application!

    https://www.harvard.edu/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *