User Tools

Site Tools


php:docker-php-dev

Docker PHP Dev

https://github.com/TrafeX/docker-php-nginx

PHP,nginx,mariadb combo docker compose file with default innodb (155mb base conf dir size):

docker-compose.yml
services:
  php-dev:
    image: trafex/php-nginx
    container_name: php-dev
    restart: unless-stopped
    environment:
      - PUID=1016
      - PGID=1016
      - TZ=Europe/London
    ports:
      - 7082:8080
    volumes:
      - /opt/php-dev/html:/var/www/html
      #- /opt/php-dev/php-conf/php.ini:/etc/php84/conf.d/settings.ini
      #- /opt/php-dev/php-conf/php-fpm.conf:/etc/php84/php-fpm.d/server.conf
    depends_on:
      - php-dev-mysql
    # docker exec php-dev bash
    stdin_open: true  # docker run -i
    tty: true         # docker run -t
    networks:
      - php-dev-network
  php-dev-mysql:
    image: yobasystems/alpine-mariadb
    container_name: php-dev-mysql
    environment:
      MYSQL_ROOT_PASSWORD: devroot
      MYSQL_DATABASE: dev
      MYSQL_USER: dev_user
      MYSQL_PASSWORD: dev_pass
      MYSQL_CHARSET: utf8
      MYSQL_COLLATION: utf8_general_ci
    expose:
      - "3306"
    ports:
      - 23306:3306/tcp
    volumes:
      - /opt/php-dev/mysql-data:/var/lib/mysql
      # - /opt/php-dev/mysql-logs:/var/lib/mysql/mysql-bin
      # - /opt/php-dev/mysql-conf/my.cnf:/etc/my.cnf
      # - /opt/php-dev/mysql-conf/mariadb-server.cnf:/etc/my.cnf.d/mariadb-server.cnf
      # - /opt/php-dev/mysql-conf/00_aria.cnf:/etc/my.cnf.d/00_aria.cnf
    restart: unless-stopped
    networks:
      - php-dev-network
    # docker exec php-dev-mysql mysql -uroot -pdevroot dev
    stdin_open: true
    tty: true

networks:
  php-dev-network:

To use aria (myisam based) by default, enable 00_aria.cnf volume and create this file:

/opt/php-dev/mysql-conf/00_aria.cnf
[mysqld]
skip-innodb
default-storage-engine=Aria
default-tmp-storage-engine=Aria
innodb=OFF
symbolic-links=0
log-output=file
skip-host-cache
skip-name-resolve

self-build for other php exts

Adjustments/self build of the php container to add or remove php extensions when necessary:

git clone https://github.com/TrafeX/docker-php-nginx
docker-compose.yml
services:
  php-dev:
    image: php-dev:latest
    build: 
      context: . 
      no_cache: true
    container_name: php-dev
    restart: unless-stopped
    environment:
      - PUID=1016
      - PGID=1016
      - TZ=Europe/London
    ports:
      - 7081:8080
    volumes:
      - /opt/php-dev/html:/var/www/html
        #- /opt/php-dev/conf/php.ini:/etc/php84/conf.d/settings.ini
      #- /opt/php-dev/conf/php-fpm.conf:/etc/php84/php-fpm.d/server.conf

Create custom php.ini if required:

config/php.ini
[PHP]
allow_url_fopen=On

max_execution_time = 600

[Date]
date.timezone="UTC"
expose_php= Off

Adjust Dockerfile to add/remove any extensions as required. E.g.:

RUN apk add --no-cache \
  curl \
  nginx \
  php84 \
  php84-ctype \
  php84-curl \
  php84-dom \
  php84-fileinfo \
  php84-fpm \
  php84-intl \
  php84-mbstring \
  php84-opcache \
  php84-phar \
  php84-session \
  php84-tokenizer \
  php84-xml \
  php84-xmlreader \
  php84-xmlwriter \
  php84-sqlite3 \
  php84-mysqli \
  supervisor

Add mysql docker if required:

name: php-dev-mysql
services:
  energystats2-mysql:
    image: yobasystems/alpine-mariadb
    container_name: php-dev-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: database
      MYSQL_USER: username
      MYSQL_PASSWORD: password
      MYSQL_CHARSET: utf8
      MYSQL_COLLATION: utf8_general_ci
    expose:
      - "3306"
    ports:
      - 13306:3306/tcp
    volumes:
      - /opt/php-dev-mysql-storage/data:/var/lib/mysql
      # - /opt/php-dev-mysql-storage/logs:/var/lib/mysql/mysql-bin
      - /opt/php-dev-mysql-storage/conf/my.cnf:/etc/my.cnf
      # - /opt/php-dev-mysql-storage/conf/mariadb-server.cnf:/etc/my.cnf.d/mariadb-server.cnf
php/docker-php-dev.txt · Last modified: by Wulf Rajek