Docker ist aktuell auf dem Vormarsch. Auch hier im Blog habe ich schon ein paar Beiträge darüber verfasst. Hier soll es aber nochmal um die explizite Nutzung von Docker mit Shopware gehen.
shopwareLabs Repo
Shopware hat in seinem Labs bereits ein shopware-docker Projekt angelegt welches ziemlich einfach zu benutzen ist. Ich habe selbst auch schon Dockerfiles dazu angelegt, muss aber sagen, dass ich mittlerweile lieber dieses Repo dazu nutze. Warum zeigt sich in Kürze…
Installation
Repo clonen
git clone https://github.com/shopwareLabs/shopware-docker cd shopware-docker
Bevor Ihr weiter macht empfehle ich euch
chmod -R 777 dev-ops/docker/_volumes/app-es-data/ chmod -R 777 dev-ops/docker/_volumes/app-redisdata/
auszuführen und falls Ihr bereits elasticsearch laufen habt diesen Service zu deaktivieren, denn sonst kommt es zu folgendem Error:
Starting shopwaredocker_app_es_1 ... Recreating shopwaredocker_app_mysql_1 ... Recreating shopwaredocker_app_mysql_1 Starting shopwaredocker_app_redis_1 ... Starting shopwaredocker_app_es_1 Starting shopwaredocker_app_es_1 ... error ERROR: for shopwaredocker_app_es_1 Cannot start service app_es: driver failed programming external connectivity on endpoint shopwaredocker_app_es_1 (d5b101e3a25f3eb97e2462f5721e08c16d718edbce38aRecreating shopwaredocker_app_mysql_1 ... done Recreating shopwaredocker_app_server_1 ... Recreating shopwaredocker_app_server_1 ... done ERROR: for app_es Cannot start service app_es: driver failed programming external connectivity on endpoint shopwaredocker_app_es_1 (d5b101e3a25f3eb97e2462f5721e08c16d718edbce38a004e0af18b5ef5d84a9): Error starting userland proxy: listen tcp 0.0.0.0:9300: bind: address already in use Encountered errors while bringing up the project. Execution aborted, a subcommand failed!
#Elasticsearch stoppen sudo service elasticsearch stop
Los geht’s…
./psh.phar docker:start # Shopware installieren ./psh.phar docker:ssh ./psh.phar init
Für ältere Versionen hängt Ihr einfach –sw-version=5.X.X an den init Befehl an.
Nach dem init Befehl solltet Ihr eine Success Meldung erhalten:
... (5/6) Starting > echo "All containers started successfully" All containers started successfully (6/6) Starting > echo "Web server IP: http://10.100.111.46" Web server IP: http://10.100.111.46 Duration: 2s All commands successfully executed!
Shop aufrufen
Der Shop ist nun unter http://10.100.111.46 verfügbar. Der Login für http://10.100.111.46/backend/ ist demo / demo
Mögliche Konfigurationen
Standardmäßig ist nur die DB in der config.php inkludiert. Kein Debugging, ES oder Redis. Das lässt sich mit der psh.phar leicht ändern.
Debug Modus
./psh.phar debug-on
erweitert die config.php File im SW Container um:
'errorHandler' => array ( 'throwOnRecoverableError' => true, ), 'front' => array ( 'noErrorHandler' => true, 'throwExceptions' => true, 'disableOutputBuffering' => true, 'showException' => true, ), 'model' => array ( 'cacheProvider' => 'array', ), 'phpsettings' => array ( 'error_reporting' => 32767, 'display_errors' => 1, ), );
Elasticsearch
./psh.phar es-on
erweitert die config.php File im SW Container um:
'es' => array ( 'enabled' => true, 'number_of_replicas' => 0, 'number_of_shards' => NULL, 'client' => array ( 'hosts' => array ( 0 => '10.100.111.48:9200', ), ), ), );
alle weiteren Befehle findet Ihr unter shopware-docker/dev-ops/common/actions
Das ganze vereinfacht das testen von Plugins oder neuen Versionen enorm. Natürlich sollte man das ganze dann immer auf seiner eigenen Instanz gegenprüfen – aber um schnell an erste Infos zu kommen ist das ganz echt top.
Container stoppen und löschen
Ist man mit den Tests fertig kann man die Container einfach mit ./psh.phar docker:stop stoppen und danach mit ./psh.phar docker:destroy löschen.
Ich möchte hier nicht auf alle Befehle eingehen – diese befinden sich unter
shopware-docker/dev-ops/docker/actions
und werden jeweils mit docker:SHELLSCRIPT ausgeführt.
Warum ich das Repo nutze
Das shopwareLabs Repo liefert schon alle zusätzlichen Komponenten beim initialisieren mit (Elasticsearch, Redis etc.) und man kann simpel zwischen den Versionen wechseln ohne jedes mal die File anzupassen oder eine Liste mit Links zu erstellen.
Um an schon bestehenden Projekten zu arbeiten nutze ich einfach die DB Dumps und das jeweilige Repo des Shops. Geht es aber um Performance Tests oder Setup Tests greife ich gerne auf die Docker Variante zurück. Hier spart man sich das mühselige aufsetzen von ES und Redis sowie das löschen der DB danach.
Auch die Pluginentwicklung für versch. Versionen ist über das Docker Repo wesentlich einfacher – man kann zwischen den Versionen hin und herspringen und kann einfach über ./psh.phar init-plugins seine Plugins einbinden.
Leider führt sw:plugin:refresh in dem Script immer zu:
WARNING! Could not connect to database. Message from SQL Server: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/micha/docker/shopware/shopware-docker/shopware/engine/Shopware/Components/DependencyInjection/Bridge/Db.php [Symfony\Component\DependencyInjection\Exception\RuntimeException] You have requested a synthetic service ("db_connection"). The DIC does not know how to construct this service. sw:plugin:refresh Execution aborted, a subcommand failed!
Was aber nicht weiter schlimm ist, da das Plugin soweit verfügbar ist. Müsste man sich aber in der Zukunft mal anschauen.
Das aufsetzen des kompletten Stacks dauert bei mir übrigens nur 6 Minuten. Ziemlich flott.