Published on

July 2, 2017

Construyendo múltiples contenedores de SQL Server con Docker Compose

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!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.