En el mundo de la contenerización, es común tener múltiples contenedores ejecutándose en un solo host. Esto permite una utilización eficiente de los recursos y escalabilidad. En esta publicación de blog, exploraremos cómo utilizar Docker Compose para construir y ejecutar fácilmente múltiples contenedores de SQL Server.
Docker Compose es una herramienta que te permite definir y ejecutar aplicaciones Docker de múltiples contenedores. Si bien se utiliza típicamente para ejecutar múltiples aplicaciones, podemos aprovechar sus capacidades para crear múltiples contenedores de SQL Server.
Antes de comenzar, configuremos nuestro entorno. Crea un par de carpetas en tu unidad C:\ para contener los archivos de composición y Docker:
mkdir C:\docker mkdir C:\docker\builds\dev1 mkdir C:\docker\compose
Dentro del directorio C:\docker\builds\dev1, coloca tus archivos de base de datos y el Dockerfile. El Dockerfile debe contener las instrucciones necesarias para construir tu imagen de SQL Server:
# construyendo nuestra nueva imagen a partir de la imagen de Microsoft SQL Server 2017 FROM microsoft/mssql-server-windows # creando un directorio dentro del contenedor RUN powershell -Command (mkdir C:\\SQLServer) # copiando los archivos de base de datos al contenedor COPY DevDB1.mdf C:\\SQLServer COPY DevDB1_log.ldf C:\\SQLServer COPY DevDB2.mdf C:\\SQLServer COPY DevDB2_log.ldf C:\\SQLServer COPY DevDB3.mdf C:\\SQLServer COPY DevDB3_log.ldf C:\\SQLServer COPY DevDB4.mdf C:\\SQLServer COPY DevDB4_log.ldf C:\\SQLServer COPY DevDB5.mdf C:\\SQLServer COPY DevDB5_log.ldf C:\\SQLServer # adjuntando las bases de datos a la instancia de SQL dentro del contenedor ENV attach_dbs="[{'dbName':'DevDB1','dbFiles':['C:\\SQLServer\\DevDB1.mdf','C:\\SQLServer\\DevDB1_log.ldf']}, \ {'dbName':'DevDB2','dbFiles':['C:\\SQLServer\\DevDB2.mdf','C:\\SQLServer\\DevDB2_log.ldf']}, \ {'dbName':'DevDB3','dbFiles':['C:\\SQLServer\\DevDB3.mdf','C:\\SQLServer\\DevDB3_log.ldf']}, \ {'dbName':'DevDB4','dbFiles':['C:\\SQLServer\\DevDB4.mdf','C:\\SQLServer\\DevDB4_log.ldf']}, \ {'dbName':'DevDB5','dbFiles':['C:\\SQLServer\\DevDB5.mdf','C:\\SQLServer\\DevDB5_log.ldf']}]"
En el directorio C:\docker\compose, crea un archivo llamado docker-compose.yml. Este archivo definirá los servicios (contenedores) que deseas ejecutar:
# especifica el formato del archivo de composición # esto depende de la versión de Docker que se esté ejecutando version: '3' # define nuestros servicios, todos los contenedores de bases de datos # cada sección especifica un contenedor... # el nombre y ubicación del Dockerfile... # número de puerto y contraseña de sa services: db1: build: context: C:\docker\builds\dev1 dockerfile: dockerfile.dev1 environment: sa_password: "Testing11@@" ACCEPT_EULA: "Y" ports: - "15785:1433" db2: build: context: C:\docker\builds\dev1 dockerfile: dockerfile.dev1 environment: sa_password: "Testing22@@" ACCEPT_EULA: "Y" ports: - "15786:1433" db3: build: context: C:\docker\builds\dev1 dockerfile: dockerfile.dev1 environment: sa_password: "Testing33@@" ACCEPT_EULA: "Y" ports: - "15787:1433" db4: build: context: C:\docker\builds\dev1 dockerfile: dockerfile.dev1 environment: sa_password: "Testing44@@" ACCEPT_EULA: "Y" ports: - "15788:1433" db5: build: context: C:\docker\builds\dev1 dockerfile: dockerfile.dev1 environment: sa_password: "Testing55@@" ACCEPT_EULA: "Y" ports: - "15789:1433"
Ahora que tenemos nuestros archivos creados, instalemos Docker Compose. Ejecuta el siguiente comando para descargar e instalar la última versión:
Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.14.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\docker\docker-compose.exe
Una vez que la instalación esté completa, verifica la versión ejecutando:
docker-compose version
Navega al directorio C:\docker\compose antes de ejecutar el primer comando de composición:
cd C:\docker\compose
Ahora, podemos ejecutar el comando de composición para construir nuestros contenedores:
docker-compose up -d
Utilizando Docker Compose, podemos construir y ejecutar fácilmente múltiples contenedores de SQL Server con solo un comando. Esto es particularmente útil para configurar entornos de desarrollo, ya que nuestras aplicaciones pueden conectarse instantáneamente al SQL Server dentro de los contenedores.
Una cosa a tener en cuenta es que es posible que encuentres un error relacionado con el adaptador vEthernet existente (HNS Internal NIC) en tus conexiones de red. Para resolver esto, puedes desactivar el adaptador existente antes de ejecutar el comando de composición.
¡Eso es todo! Ahora tienes múltiples contenedores de SQL Server en funcionamiento. Siéntete libre de explorar más sobre Docker Compose y experimentar con diferentes configuraciones.
¡Gracias por leer!