in Architettura Software, Informatica

Ambiente di sviluppo con Docker, Asp.net core e Sql Server – seconda parte

In questo secondo post riprendiamo la configurazione dell’ambiente di sviluppo, impostando il container relativo a SQL Server.

In questo caso abbiamo già a disposizione su docker hub un immagine pronta per essere utilizzata, anche se necessita di alcuni steps di configurazione che andremo ad affrontare.

Per prima cosa è necessario individuare l’immagine che dovrà essere utilizzata. Per esempio è posssibile scaricare l’immagine di Sql Server basata su ubuntu con il comando:

docker pull mcr.microsoft.com/mssql/server

E’ anche possibile scaricare versioni differenti come per esempio la versione 2019 con il comando:

docker pull mcr.microsoft.com/mssql/server:2019-latest

Una volta scaricata l’immagine in locale è possibile eseguirla passando una serie di parametri:

  • e “ACCEPT_EULA=Y”: Utilizzata per accettare l’End-User License Agreement terms
  • -e “SA_PASSWORD=Adminxyz22#”: utilizzato per impostare la password dell’ utente SA.
  • -p 1433:1433: La porta standard usata da SQL server. Si tratta della mappatura tra porte che deve essere utilizzata per la comunicazione tra interno ed esterno del container
  • –name: il nome da associare all’immagine di docker. Se non viene specificato verrà creata in maniera randomica da docker
  • –hostname: l’hostname che verrà assegnato all’host di sql server. Se non viene specificato, verrà utilizzato un nome generato random

A questo punto siamo pronti per l’esecuzione del container con il comando:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Adminxyz22#" -p 1433:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server:2019-latest

In questo caso viene impostata la password per l’utente SA Adminxyz123, viene esposta la porta standard, viene accettata la End-User License Agreement, ed il nome dell’host viene impostato a sql1.

A questo punto sarà possibile utilizzare un client SQL per poter testare l’accesso al container appena eseguito.

Non è stato però definito un volume dove i dati di SQL verranno salvati.

E’ possibile passare il volume direttamente come parametro da linea di comando, oppure definirlo all’interno di docker-compose.

In particolare quello che è necessario indicare sono i percorsi per:

  • I dati:  -v <host directory>/data:/var/opt/mssql/data
  • I log dei dati: -v <host directory>/log:/var/opt/mssql/log
  • Secrets utenti: -v <host directory>/secrets:/var/opt/mssql/secrets 

Utilizzando i parametri precedenti è possibile impostare la persistenza dei dati per i db e i secrets.

La pagina di riferimento per la configurazione di container con SQL server è raggiungibile a questo link.

Una tecnica alternativa è quello della creazione di un docker-compose.

version: '3.2'

services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2019-latest
    restart: unless-stopped
    ports:
      - "1433:1433"
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=secretpassword
      - TZ=Europe/Berlin
      - MSSQL_PID=Express
    volumes:
      - "./data/:/var/opt/mssql/data/"
      - "./log/:/var/opt/mssql/log/"
      - "./secrets/:/var/opt/mssql/secrets/"

Dovrebbe essere chiara l’impostazione del docker compose precedente, perchè ricalca in maniera piuttosto precisa i parametri da inviare a linea di comando.