- PHP 8.3.* fpm - Debian Bookworm
- PHP 8.2.* fpm - Debian Bullseye
- PHP 8.1.* fpm - Debian Bullseye
- PHP 8.0.* fpm - Debian Bullseye
- PHP 7.4.* fpm - Debian Bullseye
- PHP 7.3.* fpm - Debian Bullseye
- PHP 7.2.* fpm - Debian Buster
- PHP 7.1.* fpm - Debian Buster
- PHP 7.0.* fpm - Debian Stretch
- PHP 5.6.* fpm - Debian Stretch
- PHP 5.3.29 apache - Debian Jessie
docker build \
#--build-arg GITHUB_TOKEN={github-token} \
#--build-arg BITBUCKET_CONSUMER_KEY={bitbucket-consumer-key} \
#--build-arg BITBUCKET_CONSUMER_SECRET={bitbucket-consumer-secret} \
-t matiux/php:fpm-8.1-bullseye-base .
docker build \
-t matiux/php:fpm-8.1-bullseye-dev .
docker tag <id_immagine> \
matiux/php:8.0.1-fpm-alpine3.13-base
È anche possibile aggiungere più tag contemporaneamente:
docker build \
-t matiux/php:7.3.5-fpm-alpine3.9-base \
-t latest \
.
Se un'immagine ha più tag è possibile rimuovere un tag, in questo modo non verrà cancellata l'immagine ma solo il tag:
docker rmi matiux/php:7.3.5-fpm-alpine3.9-base
docker tag <id_immagine> <nuovo_tag>
docker tag b7bb3ad94649 matiux/php:7.3.5-fpm-alpine3.9-base
- Login:
docker login
- Push immagine:
docker push matiux/php:8.0.1-fpm-alpine3.13-base
- Pull immagine:
docker pull matiux/php:8.0.1-fpm-alpine3.13-base
Il file dc.sh è uno script che fa da wrapper a docker-compose semplificando l'utilizzo di alcuni comandi.
./dc
: Shortcut perdocker-compose ps
./dc up
: Shortcut perdocker-compose up
. (Es../dc up -d
)./dc build php
: Esegue il build dell'immagine PHP./dc enter-root
: Entra nel container php come utenteroot
./dc enter
: Entra nel container php come utenteutente
./dc down
: Smonta i servizi. (Es../dc down -v
per smontare anche i volumi)./dc purge
: Smonta i servizi e cancella anche le immagini dal disco./dc log
: Mette in ascolto sui log sei servizi./dc exec
: Esegue un qualsiasi comando nel container php./dc composer
Da accesso a composer fuori dal container./dc *
(qualsiasi altro comando docker-compose)
Alias utili per la gestione docker:
dstopall() { docker stop $(docker ps -aq) && docker rm -f $(docker ps -aq) }
alias dstop="./dc stop"
alias denter="./dc enter"
alias dup="./dc up --remove-orphans"
alias dupd="./dc up -d --remove-orphans"
alias ddown="./dc down"
drmi() { docker rmi -f "$1" }
ddangling() { docker images --filter "dangling=true" -q --no-trunc }
drmdangling() { docker rmi $(ddangling) }
alias dsysp="docker system prune --all -f"
Aggiungere queste righe al file .gitignore
del progetto
docker/docker-compose.override.yml
docker/data/shell_history/.zsh_history
Nelle immagini dev
di PHP viene creato configurato Xdebug
- Alpine:
/usr/local/etc/php/conf.d/xdebug.ini
- Ubuntu / Debian:
/etc/php/8.0/mods-available/xdebug.ini
Dalle immagini php 7.2 c'è Xdebug 3 che ha chiavi di configurazioni diverse
Nel docker file del progetto è necessario eseguire lo script xdebug-starter.sh per settare l'ip dell'host.
COPY conf/xdebug-starter.sh /usr/local/bin/xdebug-starter
RUN chmod +x /usr/local/bin/xdebug-starter
RUN /usr/local/bin/xdebug-starter
- Pulizia totale:
docker system prune -af --volumes
- Stop di tutti i container:
docker stop $(docker ps -aq)
- Eliminazione di tutti i container stoppati:
docker rm -f $(docker ps -aq)
- Eliminazione delle immagini:
docker rmi -f $(docker images -aq)
- Informazioni sul volume:
docker volume inspect <id_volume>
- Ottenere l'ip di un container:
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nomecontainer
- Le cartelle
public
edocker/php/test
servono a provare la configurazionedocker-compose
simulando una document root per il virtual host. - Le immagini
dev
sono tutte configurate con oh-my-zsh, vim, xdebug e shell history. Il file viene creato indocker/data/shell_history/.zsh_history
ma ovviamente non è versionato. - Quando si usa un'immagine mysql / mariadb è possibile caricare un dump di un db (compresso o no) mettendolo nella
cartella
docker/data/db
. Montando il volume nell'apposito entrypoint, in fase di up questo verrà caricato.
servicemysql:
image: mysql:5.7.24
volumes:
- app_database:/var/lib/mysql
- ./mysql/custom.cnf:/etc/mysql/conf.d/custom.cnf
- ./data/db:/docker-entrypoint-initdb.d
A partire dalle immagini php 7.0 è stato introdotta la possibilità di utilizzare un bash script per pilotare il progetto.
Questo script si deve chiamare project
e va creato in /var/www/app/scripts/project/bin
. Questo path è aggiunto al $PATH
di sistema. È presente anche lo script per l'auto complete /etc/bash_completion.d/project-autocomplete
. Questo script chiama
il comando project shortlist
per ottenere la lista dei comandi disponibili e permettere quindi l'auto complete. Un esempio di
script potrebbe essere il seguente:
#!/usr/bin/env bash
CMD=$1
shift 1
install_dependencies() {
composer install --prefer-dist --no-progress
}
schema_drop() {
php bin/console \
doctrine:schema:drop \
--force \
--full-database \
--no-interaction \
--env="${APP_RUNTIME_ENV}"
}
migrate() {
php bin/console \
doctrine:migrations:migrate \
--no-interaction \
--env="${APP_RUNTIME_ENV}"
}
setup() {
install_dependencies
schema_drop
migrate
}
while :; do
case $CMD in
setup-test)
APP_RUNTIME_ENV='test' setup
break
;;
setup-dev)
APP_RUNTIME_ENV='dev' setup
break
;;
shortlist)
echo \
setup-test \
setup-dev
break
;;
esac
done