Microsoft SQL Server 2017 in Docker

In diesem Artikel geht es um den neuen Microsoft SQL Server 2017 Linux für Docker.

Natürlich kann man auch MS SQL 2017 direkt unter Ubuntu installieren. Microsoft stellt dafür die Pakete und Docker Images auf dem Docker HUB bereit.

Als minimale Vorraussetzung wird auf der Festplatten rund 4GB Speicherplatz und 4GB RAM benötigt. Eine laufende Docker Installation setzten wir vorraus.

In den allgemeinen Docker Image von Microsoft sind unterschiedliche SQL Editionen verein. Über einen Docker Parameter wird die jeweilige Edition gesetzt.

SQL Developer edition -> MSSQL_PID=Express
SQL Express edition -> MSSQL_PID=Developer

Mit „docker pull“ starten wir den Download von dem Microsoft SQL Server 2017 vom Docker Hub. Im Anschluss erzeugen wir mit „docker run“ eine laufende SQL Express Instanz am Netzwerkport 1433. Unsere Datenbank soll nicht im Docker Container gespeichert werden, sondern im Verzeichnis /my/data/. Das erleichter spätere Updates vom Container. Das Kennword für den Benutzer „SA“ kann natürlich individuell gestalltet werden.

sudo docker pull microsoft/mssql-server-linux
sudo docker run --name mssql1 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=KennW@rt1' -e 'MSSQL_PID=Express' -p 1433:1433 -v /my/data:/var/opt/mssql/data -d microsoft/mssql-server-linux:2017-latest
sudo docker ps -a

Damit ist die Installation schon abgeschlossen. Jetzt können wir uns per Kommandozeile auf die Datenbank verbinden.

sudo docker exec -it mssql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'KennW@rt1'

Als Beispiel erzeugen wir die Datenbank „TestDB“ mit der Tabelle „Inventory“ und zwei Datensätzen. Per SQL Kommando kann man auch das Kennwort von Benutzer „SA“ ändern.

CREATE DATABASE TestDB
GO
USE TestDB
CREATE TABLE Inventory(ID INT, Name NVARCHAR(50), Quantity INT)
GO
INSERT INTO Inventory VALUES (1, 'banana', 25);
INSERT INTO Inventory VALUES (2, 'orange', 14);
SELECT * FROM Inventory WHERE quantity > 15;
GO
ALTER LOGIN SA WITH PASSWORD='Neues!Kennwort'
GO
QUIT

Microsoft stellt das SQL Server Management Studio Version 17 für Windows als grafisches Tool bereit. Die IDE ist sehr Umfangreich und setzt viele Resourcen vorraus.

Eine alternative IDE stellt HeidiSQL dar.

Update von MySQL image in Docker

Wir wollen in Docker ein MySQL container auf die letzte Verion updaten. Wichtig dafür ist, das unsere Daten nicht in dem Container gespeichert werden, sondern auf dem Host im Verzeichnis /my/data/

1. Letzte MySQL Version hinzufügen

docker pull mysql:latest

2. Container stoppen

docker stop mysql1

3. Container löschen

docker rm mysql1

4. Neuen Container erstellen

docker run --name=mysql1 --restart=always -e MYSQL_ROOT_PASSWORD=mypwd -v /my/data:/var/lib/mysql -d mysql

Will man sich mit dem Container verbinden, dann verwendet man…

docker exec -it mysql1 bash

…oder man öffnet das MySQL Kommando.

docker exec -it mysql1 mysql -u root -p'mypwd'

Backup aller Datenbanken erstellen.

docker exec mysql1 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > /home/user/all-databases.sql.gz

MySQL im Docker HUB

Docker update Guacamole image

1. Update Guacamole images

sudo docker pull glyptodon/guacd:latest
sudo docker pull glyptodon/guacamole:latest

2. Remove old container

sudo docker rm some-guacd
sudo docker rm some-guacamole

3. Recreate new Guacamole container

sudo docker run --name some-guacd -d -p 4822:4822 glyptodon/guacd

sudo docker run --name some-guacamole --link some-guacd:guacd \
--link some-mysql:mysql \
-e MYSQL_DATABASE=guacamole_db \
-e MYSQL_USER=guacamole_user \
-e MYSQL_PASSWORD=some_password \
-d -p 8080:8080 glyptodon/guacamole

4. Copy the SQL update script from Guacamole container to host

docker cp some-guacamole:/opt/guacamole/mysql/schema/upgrade/upgrade-pre-0.9.8.sql .

5. Copy it into Docker MySQL container directory /tmp/

docker cp upgrade-pre-0.9.8.sql some-mysql:/tmp

6. Go into Docker MySQL container and import it into database

sudo docker exec -it some-mysql bash
mysql -u root -p guacamole_db < /tmp/upgrade-pre-0.9.8.sql

Weitere Informationen für die Installation: guac-dev.org/doc/