Artículo
· 19 mar, 2024 Lectura de 8 min

Introducción a Docker - Parte 2 (Docker Compose, Docker File, Docker Volume)

¡Hola Comunidad!

En mi artículo anterior, aprendimos estos temas:

  1. ¿Qué es Docker?
  2. Algunos de los beneficios de Docker
  3. ¿Cómo funciona Docker?
  4. Imagen de Docker
  5. Contenedores Docker
  6. Repositorio de imágenes Docker
  7. Repositorio de imágenes Docker de InterSystems
  8. Instalación de Docker
  9. Comandos básicos de Docker
  10. Ejecutar la Community Edition de IRIS utilizando Docker
  11. Interfaz gráfica de Docker Desktop

En este artículo trataré los siguientes temas:

  1. Uso del archivo Docker Compose (un fichero YAML)
  2. Uso del archivo Docker (empleado para construir una imagen Docker)
  3. Uso de Docker Volume

Comencemos.

1. Uso del archivo Docker Compose ( un archivo YAML)

Docker Compose es una herramienta desarrollada para ayudar a definir y compartir aplicaciones multicontenedor. Con Compose, podemos crear un archivo YAML para definir los servicios y, con un solo comando, podemos poner todo en marcha o desmontarlo.

Una gran ventaja de utilizar Compose es la posibilidad de definir un conjunto de aplicaciones en un archivo y mantenerlo en la raíz del repositorio del proyecto. También se puede permitir que otra persona contribuya a los proyectos con facilidad. Sólo tendrían que clonar el repositorio e iniciar la app de compose.

En mi artículo anterior, utilizamos el comando mencionado a continuación para crear e iniciar el contenedor con la versión community de InterSystems IRIS:

docker run -d -p 52773:52773 intersystemsdc/iris-community 

Ahora, vamos a modificar este comando y a añadir un nombre de contenedor, mapear más puertos y establecer la opción de reinicio:

docker run -d -p 52773:52773 -p 53773:53773 -p 1972:1972 --name iris --restart=always intersystemsdc/iris-community

Voy a desglosar el comando mencionado anteriormente:

#docker run command to create and start the container
docker run 
#-d -an option used to start container in deattach mode
-d 
#-p -an option is used to map the ports
-p 52773:52773 
-p 53773:53773 
-p 1972:1972 
#name of the container
--name iris 
#set the restart option to always
--restart=always 
#base image
intersystemsdc/iris-community

Crear el archivo Compose

En la carpeta raíz, hay que crear un archivo llamado docker-compose.yml a y escribir los comandos mencionados anteriormente, como se indica a continuación:

#specify docker-compose version
version: '3.6'
#services/container details
services:
  #Name of the container
  iris:
    #Base Image
    image: intersystemsdc/iris-community      
    #set restart option
    restart: always
    #port mapping
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773

El mapeo del comando docker run y un archivo docker-compose se muestra a continuación:

A continuación se muestra un pantallazo de un archivo Docker-compose:

Para ejecutar el código del archivo docker-compose, utilizaremos el comando docker-compose up:

docker-compose up -d
  • -d o -detach: una opción que ejecuta el comando en segundo plano y devuelve el control al terminal.  

El contenedor se inicia. Vamos a ejecutar el comando "docker ps" para listar los contenedores en ejecución

Como se puede ver, estamos obteniendo el mismo resultado con el archivo docker-compose.  

Crear e iniciar múltiples contenedores

Con la ayuda de docker-compose no sólo podemos ejecutar múltiples contenedores, sino también organizar y añadir más comandos a elllos.

Por ejemplo, en el siguiente archivo docker-compose estamos ejecutando el contenedor MongoDB junto con el contenedor iris:

#specify docker-compose version
version: '3.6'
#services/container details
services:
  #Name of the container
  iris:
    #Base Image
    image: intersystemsdc/iris-community      
    #set restart option
    restart: always
    #port mapping
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773
  
  #start MongoDB container
  mongodb:
    image: mongo 
    ports:
    - 27017:27017 

Vamos a ejecutar el comando docker-compose up

Tanto los contenedores de MongoDB como los de IRIS han sido creados e iniciados ahora.

2. El archivo Docker

Docker puede construir imágenes automáticamente leyendo las instrucciones de un Dockerfile. Un Dockerfile es un documento de texto que contiene todos los comandos que un usuario podría llamar en la línea de comandos para montar una imagen. 

Así pues, nuestra primera pregunta es sencilla ¿Qué es un Dockerfile? Es lo que Docker utiliza para generar la imagen. El Dockerfile es esencialmente el conjunto de instrucciones necesarias para construir la imagen.

La ventaja de un Dockerfile sobre simplemente almacenar la imagen binaria es que las construcciones automáticas de las imágenes asegurarán que se tiene la última versión disponible. Es algo bueno desde el punto de vista de la seguridad, porque hay que asegurarse de que no se está instalando ningún software vulnerable.

Comandos comunes de archivos Docker

A continuación encontraréis algunos de los comandos Docker más utilizados. Tened en cuenta que todos los comandos Docker deben ir en mayúsculas.

FROM
El comando FROM indica en qué imagen se basó. Este es el enfoque multicapa que hace que Docker sea tan eficiente y potente. En esta instancia se utilizó la imagen Docker iris-community, que hace referencia a un Dockerfile una vez más para automatizar el proceso de construcción.

FROM intersystemsdc/iris-community

WORKDIR
Este comando se utiliza para establecer un directorio de trabajo en el que copiaremos los archivos. Por ejemplo, el siguiente comando establecerá /opt/irisbuild como directorio de trabajo:  

WORKDIR /opt/irisbuild

COPY
El comando COPY es tan simple como suena.  Puede copiar archivos al contenedor. Normalmente, copiamos archivos de configuración personalizados, archivos fuente de aplicaciones, archivos de datos, etc.

#coping Installer.cls to a root of workdir. Don't miss the dot, here.
COPY Installer.cls .

#copy source files from src folder to src folder in workdir in the docker container.
COPY src src

#copy source files from data/fhir folder to fhirdata folder in the docker container.
COPY data/fhir fhirdata

ENV
Establece las variables de entorno, que se pueden utilizar en el Dockerfile y en cualquier script que llame. La instrucción ENV define la variable de entorno <key> al valor <value>.

ENV USER_ID "SYSTEM"
ENV USER_PASSWORD "MANAGER"

RUN
El comando RUN se utiliza para ejecutar comandos durante el proceso de creación de imágenes.

#here we give the rights to irisowner user and group which are run IRIS.
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp   
#start IRIS and run script in iris.script file 
RUN iris start IRIS \    
    && iris session IRIS < /tmp/iris.script

USER
De forma predeterminada, los contenedores se ejecutan como root, lo que les proporciona un control total del host del sistema. A medida que la tecnología de contenedores madura, es posible que estén disponibles opciones predeterminadas más seguras. Por ahora, requering root es peligroso para otros y puede no estar disponible en todos los entornos. La imagen debe utilizar la instrucción USER para especificar un usuario que no sea root para que los contenedores se ejecuten. Si el software no crea su propio usuario, se puede crear un usuario y un grupo en el archivo Dockerfile.

#here we switch user to a root to create a folder and copy files in docker.
USER root 

WORKDIR /opt/irisapp

#switching user from root to irisowner, to copy files
USER irisowner 

COPY src src

Para más detalles, consultad la Documentación oficial de Docker

3. Docker Volume

Un Docker volume es un sistema de archivos independiente totalmente gestionado por Docker. Existe como un archivo o directorio estándar en el host donde persisten los datos.

El propósito de utilizar Docker volumes es mantener los datos fuera del contenedor para que estén disponibles para realizar copias de seguridad o para compartirlos.

Los Docker volumes dependen del sistema de archivos de Docker y son el método preferido de persistencia de datos para los contenedores y servicios Docker. Cuando se inicia un contenedor, Docker carga la capa de imagen de sólo lectura, añade una capa de lectura-escritura encima del conjunto de imágenes y monta los volúmenes en el sistema de archivos del contenedor.

Utilizamos la etiqueta -v o --volume para permitirnos montar archivos locales en el contenedor.

Los volúmenes son el mecanismo preferido para hacer persistir los datos generados y utilizados por los contenedores Docker. Mientras que los montajes de enlace (bind mounts) dependen de la estructura del directorio y del SO de la máquina host, los volúmenes son gestionados completamente por Docker. Los volúmenes tienen varias ventajas sobre los bind mounts:

  • Los volúmenes son más fáciles de respaldar o migrar que los bind mounts.
  • Los volúmenes se pueden gestionar utilizando los comandos CLI de Docker o la API de Docker.
  • Los volúmenes funcionan tanto en contenedores Linux como Windows.
  • Los volúmenes se pueden compartir de forma más segura entre varios contenedores.
  • Los controladores de volúmenes permiten almacenar volúmenes en hosts remotos o proveedores en la nube, cifrar el contenido de los volúmenes o añadir otras funcionalidades.
  • Los nuevos volúmenes pueden tener su contenido pre-poblado por un contenedor.
  • Los volúmenes en Docker Desktop tienen un rendimiento mucho mayor que los bind mount de hosts Mac y Windows.

Además, los volúmenes son a menudo una mejor opción que persistir los datos en una capa que se puede modificar del contenedor porque un volumen no aumenta el tamaño de los contenedores mientras se utiliza. Además, el contenido del volumen existe fuera del ciclo de vida de un contenedor determinado.

Podemos mencionar los volúmenes en la sección de servicios del archivo docker-compose.

#specify docker-compose version
version: '3.6'
#services/container details
services:
  #Name of the container
  iris:
    #Base Image
    image: intersystemsdc/iris-community      
    #set restart option
    restart: always
    #port mapping
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773
    #create a volume
    volumes:
      - ./:/irisdev/app  

Hemos creado el volumen irisdev/app.

Resumen

Docker es una potente herramienta que permite a los desarrolladores y equipos de IT crear, implementar y ejecutar aplicaciones en un entorno contenedorizado. Al proporcionar portabilidad, consistencia, escalabilidad, eficiencia de recursos y seguridad, Docker facilita la implementación de aplicaciones en diferentes entornos e infraestructuras. Con la creciente popularidad de la contenerización, Docker se está convirtiendo en una herramienta esencial para el desarrollo e implementación de software moderno.

En este artículo, aprendimos a utilizar Docker compose (un archivo YAML que especifica las opciones de configuración para cada contenedor de la aplicación), Docker file (empleado para montar una imagen Docker) y Docker volume (un mecanismo de almacenamiento de datos persistente que funciona para compartir datos entre los contenedores Docker y el host.)

Comentarios (2)1
Inicie sesión o regístrese para continuar