Lösung: MySQL Server
Vollständige docker-compose.yml
Abschnitt betitelt „Vollständige 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:Erwartete Ausgaben
Abschnitt betitelt „Erwartete Ausgaben“Container starten
Abschnitt betitelt „Container starten“$ docker compose up -d[+] Running 2/2 ✔ Network docker-lab_default Created ✔ Container mysql-lab StartedContainer Status
Abschnitt betitelt „Container Status“$ docker compose psNAME IMAGE COMMAND SERVICE CREATED STATUS PORTSmysql-lab mysql:8.0 "docker-entrypoint.s…" mysql 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcpVerbindung testen
Abschnitt betitelt „Verbindung testen“$ docker exec -it mysql-lab mysql -u student -pstudentpass testdbmysql> SELECT VERSION();+-----------+| VERSION() |+-----------+| 8.0.36 |+-----------+SQL-Befehle
Abschnitt betitelt „SQL-Befehle“-- Tabelle erstellenmysql> 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ügenmysql> 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 abfragenmysql> 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 |+----+----------------+------------------+---------------------+Antworten auf Reflexionsfragen
Abschnitt betitelt „Antworten auf Reflexionsfragen“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.
2. Was passiert bei docker compose down -v?
Abschnitt betitelt „2. Was passiert bei docker compose down -v?“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:
.envDatei (und in.gitignoreaufnehmen)- Docker Secrets
- Environment-Variablen beim Start setzen
# Mit .env Dateienvironment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}MYSQL_ROOT_PASSWORD=sicheres_passwort4. Wie würde man ein Backup erstellen?
Abschnitt betitelt „4. Wie würde man ein Backup erstellen?“# Backupdocker exec mysql-lab mysqldump -u root -prootpassword testdb > backup.sql
# Restoredocker exec -i mysql-lab mysql -u root -prootpassword testdb < backup.sqlBonus-Aufgabe: Port ändern
Abschnitt betitelt „Bonus-Aufgabe: Port ändern“ports: - "3307:3306" # Host-Port 3307, Container-Port bleibt 3306Verbindung dann mit:
mysql -h 127.0.0.1 -P 3307 -u student -pstudentpass testdb