SQLite-Testserver mit Docker als Linux-Container installieren

https://oer-informatik.de/docker-install-sqlite

tl/dr; (ca. 20 min Lesezeit): Von allen DBMS macht es bei SQLite sicher am wenigsten Sinn, es in einem Container ans Laufen zu bringen. Da ich aber die relevantesten DBMS für meine Anleitungen nutze, sollte auch SQLite dabei sein. Also: welche Befehle sind nötig, um es in einem Container zustarten? (Zuletzt geändert am 02.03.2024)

Es gibt gleichlautende Tutorials zu MariaDB/MySQL, MS-SQL, postgresql sowie (leider nicht mehr aktuell): Oracle und SQLite.

Vorneweg: In den allermeisten Fällen würde man SQLite sicher direkt installieren. In unseren Beispielen wurden für alle anderen DBMS Docker-Container erstellt, daher wird das hier auch einmal für Testzwecke mit SQLite durchgeführt. Docker muss installiert und gestartet sein, damit die folgenden Befehle in der Konsole (Powershell/Bash) eingegeben werden können.

Ein aktuelles Docker Image für SQLite aus einem Dockerfile generieren

Im Dockerhub findet sich kein offizielles DockerImage für SQLite, daher muss ein solches über ein DOCKERFILE erstellt werden. Ich beziehe mich v.a. auf die folgende Anleitung DevOpsHeaven: How to create, backup and restore a SQLite database using Docker

konkret muss folgendes als eine Textdatei gespeichert werden, die “Dockerfile” heißt:

Dies ist die “Bauanleitung” für ein Image, aus dem dann später unsere Container erstellt werden können. Basierend auf “Alpine Linux” wird dann im Container sqlite gestartet mit der Datenbank test.db - und wir sollten direkt in der SQL-Konsole landen.

Das neue Image muss zunächst erzeugt werden. Im Verzeichnis, in dem das Dockerfile liegt muss folgendes ausgeführt werden (Punkt am Ende nicht vergessen!):

docker image build -t mein_sqlite_image:v0.1 .

Daraufhin wird einiges geladen und jeder Schritt im Dockerfile ausgeführt. Am Ende wird ein Hashwert (in meinem Beispiel ceb7f5592363) des Images und der übergebene Tag (in meinem Beispiel mein_sqlite_image:v0.1) ausgegeben:

Sending build context to Docker daemon  2.048kB
Step 1/6 : FROM alpine:latest
latest: Pulling from library/alpine ...
Step 2/6 : RUN apk add --update sqlite ...
Step 3/6 : RUN mkdir /db ...
Step 4/6 : WORKDIR /db ...
Step 5/6 : ENTRYPOINT ["sqlite3"] ...
Step 6/6 : CMD ["test.db"] ...
Successfully built ceb7f5592363
Successfully tagged mein_sqlite_image:v0.1

(Die Ausgabe ist stark verkürzt.)

Ob das Image angelegt wurde lässt sich mit docker image ls prüfen:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mein_sqlite_image   v0.1                ceb7f5592363        5 minutes ago       9.33MB

Gestartet werden kann der Container mit:

docker run --rm -it -v  C:\sqlite\:/db mein_sqlite_image:v0.1 test.db

Die Datenbank wird als Datei “test.db” unter dem Pfad im Host-Dateisystem gespeichert, die vor den :/db notiert ist - in meinem Fall C:\sqlite\. Nach dem Starten des Containers meldet sich die SQL-Konsole:

SQLite version 3.32.1 2020-05-25 16:19:56
Enter ".help" for usage hints.
sqlite>

Zum herumprobieren nutze ich das Beispiel von DevOpsHeaven:

sqlite> create table test_table(id int, description varchar(10));
sqlite> .tables
test_table
sqlite> insert into test_table values(1, 'foo');
sqlite> insert into test_table values(2, 'bar');
sqlite> select * from test_table;
1|foo
2|bar
sqlite> .exit

Eine Übersicht über alle Befehle der SQLite-Konsole findet sich hier: https://sqlite.org/cli.html

SQLite bietet keine TCP-Schnittstelle, daher kann die DB nur über die Datenbank-Datei genutzt werden. HeidiSQL bietet beispielsweise die Möglichkeit, SQLite-Dateien zu öffnen.

Einen Datenbank-Dump erstellen und zurückspielen

Beim Starten des Containers können direkt SQLite-Befehle übergeben werden. Beispielsweise kann der Befehl .dump genutzt werden, um die Gesamte Datenbank als SQL-Befehl zu exportieren:

docker run --rm -it -v  C:\sqlite\:/db mein_sqlite_image:v0.1 test.db .dump >> dump.sql

Die Text-Datei dump.sql mit allen SQL-Befehlen findet sich daraufhin im aktuellen Arbeitsverzeichnis.

Andersherum kann auch ein kompletter SQL-Dump in die bestehende DB zurückgespielt werden:

cat dump.sql | docker run --rm -i -v  C:\sqlite\:/db mein_sqlite_image:v0.1 test.db

weitere Infos…

DevOpsHeaven: How to create, backup and restore a SQLite database using Docker


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: SQLite-Testserver mit Docker als Linux-Container installieren” von Hannes Stein, Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.gitlab.io/db-sql/dbms/DBMS.html veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/db-sql/dbms. Stand: 02.03.2024.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: