Zum Inhalt springen

Lösung: MySQL Server

docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: mysql-lab
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: student
MYSQL_PASSWORD: studentpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Terminal-Fenster
$ docker compose up -d
[+] Running 2/2
Network docker-lab_default Created
Container mysql-lab Started
Terminal-Fenster
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mysql-lab mysql:8.0 "docker-entrypoint.s…" mysql 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp
Terminal-Fenster
$ docker exec -it mysql-lab mysql -u student -pstudentpass testdb
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.36 |
+-----------+
-- Tabelle erstellen
mysql> CREATE TABLE users (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(100) NOT NULL,
-> email VARCHAR(100) UNIQUE,
-> created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.02 sec)
-- Daten einfügen
mysql> INSERT INTO users (name, email) VALUES
-> ('Max Mustermann', 'max@example.com'),
-> ('Anna Schmidt', 'anna@example.com');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
-- Daten abfragen
mysql> SELECT * FROM users;
+----+----------------+------------------+---------------------+
| id | name | email | created_at |
+----+----------------+------------------+---------------------+
| 1 | Max Mustermann | max@example.com | 2024-03-10 14:30:00 |
| 2 | Anna Schmidt | anna@example.com | 2024-03-10 14:30:00 |
+----+----------------+------------------+---------------------+

1. Was passiert mit den Daten bei docker compose down?

Abschnitt betitelt „1. Was passiert mit den Daten bei docker compose down?“

Die Daten bleiben erhalten, weil sie in einem Docker Volume (mysql_data) gespeichert sind. Das Volume existiert unabhängig vom Container.

Die Daten werden gelöscht, weil der -v Flag auch die Volumes entfernt.

3. Warum sollte man Passwörter nicht in docker-compose.yml speichern?

Abschnitt betitelt „3. Warum sollte man Passwörter nicht in docker-compose.yml speichern?“
  • Die Datei wird oft in Git eingecheckt → Passwörter im Repository
  • Mehrere Umgebungen (Dev, Test, Prod) brauchen verschiedene Passwörter

Bessere Alternativen:

  • .env Datei (und in .gitignore aufnehmen)
  • Docker Secrets
  • Environment-Variablen beim Start setzen
# Mit .env Datei
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
.env
MYSQL_ROOT_PASSWORD=sicheres_passwort
Terminal-Fenster
# Backup
docker exec mysql-lab mysqldump -u root -prootpassword testdb > backup.sql
# Restore
docker exec -i mysql-lab mysql -u root -prootpassword testdb < backup.sql
ports:
- "3307:3306" # Host-Port 3307, Container-Port bleibt 3306

Verbindung dann mit:

Terminal-Fenster
mysql -h 127.0.0.1 -P 3307 -u student -pstudentpass testdb