Eine bestehende Datenbank auf einem Docker laufen lassen

Stellt euch vor ihr bekommt die undankbare Aufgabe ein altes WordPress Projekt zu upgraden. Das Projekt hinkt bereits zwei Major Releases hinterher. Das bedeutet ihr könnt nicht einfach im Produktivsystem ein upgrade vollziehen. Ihr müsst euch das Produsystem auf eure lokale Entwicklungsumgebung kopieren.

Dafür eignet sich Docker ganz gut. Heute gehe ich davon aus, dass wir nur die Datenbank dockerisieren. Dann schieben wir den Datenbankdump der Produktivumgebung in unseren Docker.
Vorraussetzung: Ihr habt docker auf eurem System, könnt mit der Konsole umgehen und hab bereits den Datenbank Dump.

  1. Erstellt ein Order wo ihr Euer Projekt erstellen möchtet.
  2. Erstellt eine docker-compose.yml
  3. kopiert diese Befehle in die eben erstellte docker-compose.yml rein *
  4. erstellt zwei Ordner: my-datavolume und dumps
  5. legt das SQL Dump file in diesen Ordner. Tut euch ein gefallen um bennent die Datei aussagekräftig um. Zum Beispiel 2021-11-11-dump.sql
  6. startet docker-compose mit docker-compose up -d
  7. checkt ob der container vorhanden ist: docker ps
  8. loggt euch jetzt in euer Container ein docker exec -it my_mysql bash
  9. loggt euch innerhalb des Containers in MySql ein mit mysql -uroot -p
  10. Okay, mir ist es gerade auch einwenig peinlich aber Passwort ist : password
  11. gebt ein source /home/2011-11-11-dump.sql
  12. A viola! Die Datenbank ist da
  13. exit und dann noch mal exit und ihr seid wieder im HOST

Über ein SQLTool wie MySQL Workbench könnt ihr solange der Conatiner läuft drauf zugreifen. Wenn ihr die DB in eure DB UI einfügen möchtet dann beachtet das der PORT nicht default 3306 ist sonder ich ihn in der docker-compose.yml mit 3309 angegeben habe. Das könnt ihr natürlich anpassen. Dafür müsst ihr nur den container wieder mit docker-compose down runterfahren.

* das docker-compose.yml file:

version: '3.1'

services:

  wordpress:
    image: wordpress:4
    restart: always
    ports:
      - '8090:80'
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - ./wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: password
    volumes:
      - ./db:/var/lib/mysql      
      - ./schema/:/home/dumps
      #- ./schema/:/docker-entrypoint-initdb.d
    ports:
      - "3309:3306"      
volumes:
  wordpress:
  db:

Laravel Mailhog Docker

Letztens wurde ich gefragt, wie ich Mail bei Laravel teste. Ich meinte ich habe einen SMTP Server den ich nutzen kann. Da meinte er, dass wäre zwar okay aber man könnte sich damit auch eine valide Mailadresse verbrennen. Mit verbrennen meint der Kollege, dass sie global als SPAM Mailadresse angerechnet werden kann. Falls die Tests mal ausufern sollten. Hmm. So richtig überzeugt hatte es mich jetzt nicht, aber ich hab mich seiner Empfehlung Mailhog zu nutzen nicht wiedersetzt. Im Gegenteil ich sogar ganz dankbar dafür. Weil wann hätte ich mit dieser Gewohnheit sonst gebrochen.

Mailhog ist ein lokal Dienst. Man kann sich diesen auf den Rechner Installieren. Dieser Dienst kommuniziert über den SMTP Standard Port 1025. Das bedeutet wenn wir unsere Laravel Konfiguration in der .env auf mailhog anpassen, senden wir aus der Applikation an unseren lokalen SMTP Server. Mailhog hat auch ein User Interface mit dem wir die Mails dann anzeigen lassen können.

Der einfachste Weg Mailhog zu nutzen ist über Docker. Dafür müssen wir nur:

docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog

eingeben.

In unserer .env Datei passen wir noch die SMTP Konfiguration an:

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=hello@world.com
MAIL_FROM_NAME="${APP_NAME}"

Dein “Fake” Mailhog EmailClient kannst über localhost:8025 erreichen.

Wenn Du deine gesamte Umgebung über ein docker-compose laufen lässt kannst du natürlich auch den Mailhog SMTP Server mit hinzu fügen.

services:
   mailhog:
     image: mailhog/mailhog:latest
     restart: always
     ports:
       - 1025:1025
       - 8025:8025

Ein gesamte docker-compose Laravel Umgebung findet ihr hier:
https://github.com/MikeLowrey/docker-compose-laravel-2021

. Ansonsten findest Du eine ausführlichere Mailhog Anleitung unter: https://kinsta.com/de/blog/mailhog/.

Docker GUI – Portainer easy und übersichtlich

Klar, ich mag die Kommandozeile. Für alle möglichen Aufgaben ist sie mein zuverlässiger Begleiter. So auch im Docker Umfeld. Die Commands sind eigentlich einfach aber man vergisst schnell wieder einiges und muss dann im Netz Nachschlagen. Vielleicht geht es euch ja genau so?

Und für Docker gibt es eine freie und wirklich gute GUI. Sie heißt Portainer und ist einfach zu installieren und zu handhaben.

Installieren mit:

docker run -d -p 9000:9000 --name=portainer -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

Nutzen unter:

http://localhost:9000

Ihr solltet es so wie jetzt auf jeden Fall nur Lokal beieuch nutzen. Falls ihr es in einem Netzwerk betreibt wäre eine HTTP Verschlüsselung zwingend nutwendig. Das wars auch schon!

Docker auf Ubuntu 18.04 installieren

Docker auf einem frischen Ubunto 18.04 installieren geht in wenigen Schritten. Mit frischem meine ich ein System wo noch keine ältere Dockerversion vorher lief.

sudo apt update 

Wir holen jetzt paar Pakete die wir für die Docker Installation brauchen rein.

sudo apt install apt-transport-https ca-certificates curl software-properties-common 

Nun fügen wir den GPG Key/Schlüssel für das offizielle Docker Repository hinzu. (ist ein freies Kryptographiesystem)

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 

Jetzt fügen wir das Docker-Repository zu den APT-Quellen hinzu:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" 

Anschließend aktualisieren wir die Paketdatenbank mit:

 sudo apt update 

Jetzt noch:

apt-cache policy docker-ce 
Installed: (none)
Candidate: 18.03.1~ce~3-0~ubuntu
Version table:
   18.03.1~ce~3-0~ubuntu 500
      500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages 

Und zum Schluss nur noch:

sudo apt install docker-ce 

Und mit :

sudo systemctl status docker 

wir ihnen der Docker Status auf ihrem System angezeigt.

Docker Status

Es geht auch noch einfacher. Und zwar mit dem offiziellem “Convenience Script” von Docker. Das ist ein Script welches letzendlich alle commands von oben enthält und nacheinander ausführt. Also für die schnellen unter uns wäre das ganz gut:

SeoTheater Autoren