¡Hola Comunidad!
Ahora que la plataforma de datos InterSystems IRIS Data Platform Community Edition está disponible en Docker Hub, parece el momento ideal de probar InterSystems IRIS en un contenedor. Desde hace un tiempo, la Community Edition ha estado disponible en la nube, por ejemplo en AWS, pero podría ser interesante probarla localmente también. Los usuarios de Windows estamos acostumbrados a ver caras de desconfianza y escuchar que "nuestros resultados podrían variar" cada vez que mencionamos usar Docker para Windows. A veces incluso nos dicen que realmente deberíamos considerar ejecutar Docker dentro de máquinas virtuales con Ubuntu. Pfff...
Docker y Windows, especialmente al usar contenedores basados en Linux (el único tipo soportado por InterSystems IRIS) puede que no sean una combinación ideal. Para más detalles sobre esto, vea: Linux Containers on Windows. Sin embargo, con algo de paciencia, ganas de aventura y unos pasos adicionales, es perfectamente posible ejecutar InterSystems IRIS en un contenedor Docker en Windows. Esta configuración, aunque no está soportada para casos de producción, funciona suficientemente bien como para probar varias funcionalidades de InterSystems IRIS. Por ejemplo, he creado namespaces y bases de datos, he cargado datos, creado producciones y hasta ejecutado algunas consultas SPARK.
A continuación, enumeraré los pasos que seguí para lanzar la plataforma de datos InterSystems IRIS Community Edition. Mostraré tanto un enfoque por línea de comandos de Docker como el enfoque más práctico de componer un archivo. Advertencia: no soy un experto en Docker y estaremos hablando de Docker para Windows, así que tengan en cuenta que "nuestros resultados podrían variar" ;-)
Configuración
- Windows 10 Pro
- Docker Desktop Community Edition, versión 0.0.3 (31259) Canal: estable, disponible aquí
Algunos ajustes de Docker
1. Cambié el “bip” en mis ajustes de Daemon para evitar los conflictos de red
2. Configuré mi unidad C:\ como unidad compartida. Esto permitirá que el contenedor acceda a los archivos de C:\
Apunte sobre Name Volumes y Montajes Bind
Los contenedores son efímeros. Los iniciamos. Los detenemos. Los eliminamos. Sin embargo, a menudo quisiéramos que los datos generados y usados por el contenedor persistan. Docker ofrece dos enfoques para la persistencia de datos de un contenedor: volúmenes
y montajes bind
. Los contenedores de InterSystems IRIS incluyen la funcionalidad %SYS perdurable (Durable %SYS) para datos generados y usados por la plataforma de datos. En Docker para Windows, el %SYS perdurable debe usar un volumen Docker. Al usar Docker en otros sistemas operativos, por ejemplo Docker para Mac o Docker para Ubuntu, un %SYS perdurable puede usar tanto un montaje bind como un volumen.
Los volúmenes son totalmente gestionados por Docker. A diferencia de los montajes bind, no se corresponden directamente con cualquier archivo o directorio en el sistema de archivos del host. Debemos usar comandos de Docker para crear, eliminar e inspeccionarlos. El hecho de que no podamos ajustar o usar productos y herramientas avanzadas para gestionar los datos en volúmenes Docker es una gran desventaja de usar Docker en Windows. Claramente no es un entorno de producción.
Creación de un Named Volume
Mi próximo paso fue crear un named volume
desde la línea de comandos de Windows:
docker volume create durable
Para ver los detalles de este volumen, use el comando docker volume inspect
. Cuando quiera eliminarlo, usaré el comando docker volume rm
.
Puesta en funcionamiento del contenedor
Finalmente, estaba listo para lanzar el contenedor. Aquí está el comando de ejecución:
docker run –it –d –p 51773:51773 –p 52773:52773 –-name iris –-volume durable:/durable –-env ISC_DATA_DIRECTORY=/durable/irissys store/intersystems/iris:2019.1.0.510.0-community
Algo más de información sobre las opciones que pasé al comando run:
Opción |
Descripción |
it |
Básicamente, significa ejecutar en modo interactivo y brindar acceso por terminal |
d |
Significa ejecutar en modo detached, separado del proceso principal de la consola Windows |
p |
Mapea los puertos dentro del contenedor a puertos exteriores del contenedor en el host. Usaremos estos puertos desde Windows para acceder a InterSystems IRIS. Tenga en cuenta que si tiene IRIS instalado localmente, es muy probable que esté usando los puertos 51773 y 52773 y obtendrá conflictos de puertos si intenta mapear estos puertos |
volume |
Mapea el named volume creado antes, a un directorio dentro del contenedor |
env |
Configura las variables de entorno. En este caso, estamos configurando la ubicación del %SYS perdurable para que sea nuestro directorio duradero dentro del contenedor. |
Para verificar que todo estuviera bien con el contenedor, usé el siguiente comando:
docker container ls
Esto listó todos los contenedores en ejecución en mi sistema. La primera vez que ejecuté el comando, listó el estado de mi contenedor iris como "starting" (iniciando). Cuando volví a ejecutarlo luego de pasado algún tiempo, listó el estado del contenedor como "healthy" (saludable).
Acceso a InterSystems IRIS
Una vez que mi contenedor se estuvo ejecutando sin problema, el siguiente paso fue acceder a la plataforma de datos. Para lograrlo, primero lancé el Portal de gestión usando la URL usual: http://localhost:52773/csp/sys/UtilHome.csp
La página me solicitó un usuario/contraseña. Indiqué SuperUser/SYS y luego me llevó a una página de cambio de contraseña. Después tuve acceso completo al Portal de gestión.
A continuación probé usar el acceso por línea de comandos. Para hacerlo, primero ejecuté una shell bash dentro del contenedor con el siguiente comando en la línea de comandos de Windows:
docker exec –it iris bash
Esto abrió una shell bash. Desde ahí, abrí una sesión del terminal IRIS de la siguiente forma:
iris session iris
Inicié sesión usando el usuario/contraseña definido arriba.
Detener el Contenedor
Finalmente, para detener el contenedor, añadí lo siguiente en la línea de comandos de Windows:
docker container stop iris
Pasar a Compose
Usar el comando run de Docker con todas esas opciones a escribir es bastante tedioso. Por suerte, Docker admite colocar las opciones en un archivo compose y luego iniciar un contenedor usando comandos de docker-compose
para leer las opciones desde el archivo e iniciar el contenedor adecuadamente.
Para usar este método, primero hay que crear un directorio de Windows. Yo creé un directorio llamado iris_community. Ten en cuenta que el nombre del directorio se convierte en el nombre del proyecto Docker. Dentro de iris_community creé otro directorio llamado local. Mi archivo compose creará un montaje bind usando este directorio y podré usarlo para pasar datos y código entre mi sistema de archivos Windows y mi contenedor. Luego coloqué mi archivo compose, llamado docker-compose.yml
dentro de iris_community. Por lo tanto, la estructura del directorio se ve así
iris_community
local
docker-compose.yml
Estos son los contenidos de mi docker-compose.yml
. Espero que los comentarios sean suficientes para explicar lo que hace.
version: '3.2'
services:
iris:
image: store/intersystems/iris:2019.1.0.510.0-community
container_name: iris-community
ports:
# 51773 is the superserver default port
- "51773:51773"
# 52773 is the webserver/management portal port
- "52773:52773"
volumes:
# Maps directory in containr, named durable, to named volume defined below
- durable:/durable
# Mounts a local directory for passing in files and test scripts
- ./local:/Samples/local
environment:
# Uses ISC_DATA_DIRECTORY to place the durable %SYS in the named volume
- ISC_DATA_DIRECTORY=/durable/irissys
# Creates the named docker volume
volumes:
durable:
Iniciar con docker-compose
Para iniciar el contenedor, abrí una línea de comandos de Windows en mi directorio: iris_community y añadí lo siguiente:
docker-compose up
Esta vez no definí la opción detach (separar), por lo que veo un flujo de salida desde docker. Tenga en cuenta que el volumen nombrado creado en este caso será iris_community_durable, por lo que no entrará en conflicto con el volumen anterior.
Para detener el contenedor, uso el siguiente comando, siempre desde el directorio: iris_community:
docker-compose down