Ho pubblicato un Dockerfile per la creazione di un container che ripropone l’e-commerce realizzato in un post di qualche giorno fa [2] e permette di provarlo in modo semplice e su qualsiasi sistema operativo evitando di dover eseguire tutti i passaggi elencati in quel post.
Il container lo si può utilizzare per fare delle prove con un sito WordPress o con un e-commerce WooCommerce oppure per testare velocemente plugin realizzati per WordPress o per WooCommerce. Io stesso l’ho riutilizzato includendone una versione modificata in un progetto di lavoro che prevedeva appunto la realizzazione di un plugin per WooCommerce.
E’ un unico container che contiene tutti i servizi al suo interno e quindi non è assolutamente indicato per ambienti di produzione. Lo si può usare però per fare degli sviluppi veloci o delle spike.
Sul container sono installati:
- PHP 7.4.3
- Apache2
- WordPress 5.8.2
- WooCommerce 5.9.0
- StoreFront 3.9.1 (è un tema WordPress)
- Mariadb 10.3.31
- Adminer 4.8.1
Il codice del Dockerfile è pubblicato in questo progetto su Bitbucket e nel README sono descritti tutti i passaggi per installarlo ed utilizzarlo. Riporto anche in questo post i passi principali.
Io ho usato un portatile con Windows 10, ma è possibile replicare i passi su un qualsiasi sistema operativo su cui possa girare il servizio Docker, quindi in pratica dappertutto.
Ingredienti
- Portatile o pc con Windows 10
- Docker Desktop 4.3.0 [6]
- Git for Windows 2.34.1 [3]
- Git Extensions 3.5.4 [4]
- Visual Studio Code 1.63.0 [5]
Procedimento
Con i seguenti comandi si scarica il Dockerfile, si costruisce l’immagine e si lancia in esecuzione il container:
git clone https://bitbucket.org/ilclaudio/myshopdocker.git
cd myshopdocker
docker build -t myshop-img -f Dockerfile .
docker run -p 80:80 -p 3306:3306 --name=myshop -d myshop-img
http://localhost/shop
Informazioni utili
- Per autenticarsi come amministratore di WordPress usare questi dati
- Url: http://localhost/wp-login
- Username: manager
- Password: password
- Per connettersi da un client MySql del proprio pc al database del container usare le seguenti configurazioni:
- username: admin
- password: admin
- host: 127.0.0.1
- database: myshop
- Per accedere alla shell del container usare il comando:
- docker exec -it myshop /bin/bash
- Per accedere alla shell del database sul container usare i comandi:
- docker exec -it myshop /bin/bash
- mysql -u admin -padmin
- Per visualizzare le tabelle del database con una interfaccia web, usare Adminer:
- http://localhost/adminer.php
Analisi del Dockerfile
FROM php:7.4.3-apache
ARG WP_ARCHIVE=wordpress-5.8.2.tar.gz
ARG WC_ZIP_FILE=woocommerce.5.9.0.zip
ARG SF_THEME_FILE=storefront.3.9.1.zip
RUN apt-get update && apt-get install
RUN apt-get install -y \
vim \
git \
bash-completion \
libxml2-dev \
unzip \
wget
RUN docker-php-ext-install mysqli && \
docker-php-ext-install soap && \
a2enmod rewrite
COPY configure/createUserAndDatabase.sql /tmp/createUserAndDatabase.sql
COPY src/myshopdb.sql /tmp/myshopdb.sql
COPY configure/configureWP.sql /tmp/configureWP.sql
COPY configure/startServicesScript.sh /root/startServicesScript.sh
COPY src/uploads.zip /tmp/uploads.zip
COPY configure/wp-config.php /tmp/wp-config.php
COPY configure/.htaccess /tmp/.htaccess
RUN apt-get install -y mariadb-server && \
/usr/sbin/service mysql start && \
mysql < /tmp/createUserAndDatabase.sql && \
mysql myshop < /tmp/myshopdb.sql && \
mysql myshop < /tmp/configureWP.sql
RUN curl -o /tmp/${WP_ARCHIVE} https://wordpress.org/${WP_ARCHIVE} && \
rm -rf /var/www/html && \
tar -xvzf /tmp/${WP_ARCHIVE} --directory /var/www/ && \
mv /var/www/wordpress /var/www/html && \
curl -o /tmp/${WC_ZIP_FILE} https://downloads.wordpress.org/plugin/${WC_ZIP_FILE} && \
unzip /tmp/${WC_ZIP_FILE} -d /var/www/html/wp-content/plugins/ && \
curl -o /tmp/${SF_THEME_FILE} https://downloads.wordpress.org/theme/${SF_THEME_FILE} && \
unzip /tmp/${SF_THEME_FILE} -d /var/www/html/wp-content/themes/ && \
cp -f /tmp/wp-config.php /var/www/html/wp-config.php && \
cp /tmp/.htaccess /var/www/.htaccess && \
unzip /tmp/uploads.zip -d /var/www/html/wp-content/uploads/ && \
wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O /var/www/html/adminer.php && \
chown -R www-data:www-data /var/www/html/*
RUN rm -rf /tmp/*
EXPOSE 80 330
ENTRYPOINT ["/bin/bash"]
CMD ["/root/startServicesScript.sh"]
Considerazioni
Questo container permette di provare in modo semplice e rapido WordPress, WooCommerce e i plugin realizzati per questi due CMS. E’ possibile modificare il Dockerfile in modo da poter utilizzare la versione desiderata delle varie componenti software, basta modificare il valore delle variabili d’ambiente. Se si volesse, invece, un e-commerce non pre-configurato, allora basterebbe togliere o commentare nel Dockerfile le seguenti righe presenti nelle direttive RUN:
mysql myshop < /tmp/myshopdb.sql && \
....
unzip /tmp/uploads.zip -d /var/www/html/wp-content/uploads/ && \
Fonti e riferimenti
- [1] Progetto MyShopDocker su Bitbucket.
- [2] Creare un semplice e-commerce con WooCommerce di Claudio Battaglino.
- [3] Sito ufficiale di Git for Windows.
- [4] Sito per il download di Git Extensions.
- [5] Download di Visual Studio Code.
- [6] Download di Docker Desktop.
- [7] Immagini Docker ufficiali di PHP.