Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis)

RAW Compose
1. Pull Image docker pull library/mysql
2. 1-Click Launch Command docker run -d -p 80:80 --name dnmp mysql:${MYSQL_VERSION}
3. Compose Deployment docker compose up -d
docker-compose.sample.yml
Download .yml
version: "3"
services:
  nginx:
    build:
      context: ./services/nginx
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf
      - ${NGINX_FASTCGI_PHP_CONF}:/etc/nginx/fastcgi-php.conf
      - ${NGINX_FASTCGI_PARAMS}:/etc/nginx/fastcgi_params
      - ${NGINX_LOG_DIR}:/var/log/nginx
    restart: always
    networks:
      - default

  php82:
    build:
      context: ./services/php82
      args:
        DEBIAN_MIRROR_DOMAIN: deb.debian.org
        PHP_EXTENSIONS: "$PHP82_EXTENSIONS"
        TZ: "$TZ"
    container_name: php82
    expose:
      - 9501
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${PHP82_PHP_CONF_FILE}:/usr/local/etc/php/php.ini
      - ${PHP82_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf
      - ${PHP82_LOG_DIR}:/var/log/php
      - ${PHP82_DATA_COMPOSER}:/tmp/composer
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default

#  php80:
#    build:
#      context: ./services/php80
#      args:
#        PHP_VERSION: php:${PHP80_VERSION}-fpm-alpine
#        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#        COMPOSER_URL: ${COMPOSER_URL}
#        PHP_EXTENSIONS: ${PHP80_EXTENSIONS}
#        TZ: "$TZ"
#    container_name: php80
#    expose:
#      - 9501
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#      - ${PHP80_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
#      - ${PHP80_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
#      - ${PHP80_LOG_DIR}:/var/log/php
#      - ${DATA_DIR}/composer:/tmp/composer
#    restart: always
#    cap_add:
#      - SYS_PTRACE
#    networks:
#      - default

#  php74:
#     build:
#       context: ./services/php74
#       args:
#         PHP_VERSION: php:${PHP74_VERSION}-fpm-alpine
#         CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#         COMPOSER_URL: ${COMPOSER_URL}
#         PHP_EXTENSIONS: ${PHP74_EXTENSIONS}
#         TZ: "$TZ"
#     container_name: php74
#     expose:
#       - 9501
#     extra_hosts:
#       - "www.site1.com:172.17.0.1"
#     volumes:
#       - ${SOURCE_DIR}:/www/:rw
#       - ${PHP74_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
#       - ${PHP74_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
#       - ${PHP74_LOG_DIR}:/var/log/php
#       - ${DATA_DIR}/composer:/tmp/composer
#     restart: always
#     cap_add:
#       - SYS_PTRACE
#     networks:
#      - default

#  php56:
#    build:
#      context: ./services/php56
#      args:
#        PHP_VERSION: php:${PHP56_VERSION}-fpm-alpine
#        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#        PHP_EXTENSIONS: ${PHP56_EXTENSIONS}
#        TZ: "$TZ"
#    container_name: php56
#    expose:
#      - 9501
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#      - ${PHP56_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
#      - ${PHP56_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
#      - ${PHP56_LOG_DIR}:/var/log/php
#      - ${DATA_DIR}/composer:/tmp/composer
#    restart: always
#    cap_add:
#      - SYS_PTRACE
#    networks:
#      - default
#
#  php54:
#    build:
#      context: ./services/php54
#      args:
#        PHP_VERSION: php:${PHP54_VERSION}-fpm
#        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#        PHP_EXTENSIONS: ${PHP54_EXTENSIONS}
#        TZ: "$TZ"
#    container_name: php54
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#      - ${PHP54_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
#      - ${PHP54_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
#      - ${PHP54_LOG_DIR}:/var/log/php
#      - ${DATA_DIR}/composer:/tmp/composer
#    restart: always
#    cap_add:
#      - SYS_PTRACE
#    networks:
#      - default

  mysql:
    image: mysql:${MYSQL_VERSION}
    container_name: mysql
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${DATA_DIR}/mysql:/var/lib/mysql/:rw
      - ${MYSQL_LOG_DIR}:/var/log/mysql/:rw

    restart: always
    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      MYSQL_ROOT_HOST: "${MYSQL_ROOT_HOST}"
      TZ: "$TZ"

  mysql5:
 #  platform: linux/amd64  # 指定使用 amd64 平台,mac芯片m1-m4需要打开
    image: mysql:${MYSQL5_VERSION}
    container_name: mysql5
    ports:
      - "${MYSQL5_HOST_PORT}:3306"
    volumes:
      - ${MYSQL5_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${DATA_DIR}/mysql5:/var/lib/mysql/:rw
      - ${MYSQL5_LOG_DIR}:/var/log/mysql/:rw

    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL5_ROOT_PASSWORD}"
      MYSQL_ROOT_HOST: "${MYSQL5_ROOT_HOST}"
      TZ: "$TZ"

#  openresty:
#    image:  openresty/openresty:${OPENRESTY_VERSION}
#    container_name: openresty
#    ports:
#       - "${OPENRESTY_HTTP_HOST_PORT}:80"
#       - "${OPENRESTY_HTTPS_HOST_PORT}:443"
#    volumes:
#       - ${SOURCE_DIR}:/www/:rw
#       - ${OPENRESTY_CONFD_DIR}:/etc/nginx/conf.d/:ro
#       - ${OPENRESTY_SSL_CERTIFICATE_DIR}:/ssl:rw
#       - ${OPENRESTY_CONF_FILE}:/usr/local/openresty/nginx/conf/nginx.conf:ro
#       - ${OPENRESTY_FASTCGI_PHP_CONF}:/usr/local/openresty/nginx/conf/fastcgi-php.conf:ro
#       - ${OPENRESTY_CONF_FASTCGIPARAMS_FILE}:/usr/local/openresty/nginx/conf/fastcgi_params:ro
#       - ${OPENRESTY_LOG_DIR}:/var/log/nginx/:rw
#    environment:
#      TZ: "$TZ"
#    networks:
#      - default

#  redis:
#    image: redis:${REDIS_VERSION}
#    container_name: redis
#    ports:
#      - "${REDIS_HOST_PORT}:6379"
#    volumes:
#      - ${REDIS_CONF_FILE}:/etc/redis.conf:ro
#      - ${DATA_DIR}/redis:/data/:rw
#    restart: always
#    entrypoint: ["redis-server", "/etc/redis.conf"]
#    environment:
#      TZ: "$TZ"
#    networks:
#      - default

#  memcached:
#    image: memcached:${MEMCACHED_VERSION}
#    container_name: memcached
#    ports:
#      - "${MEMCACHED_HOST_PORT}:11211"
#    environment:
#       MEMCACHED_CACHE_SIZE: "${MEMCACHED_CACHE_SIZE}"
#    networks:
#      - default

#  rabbitmq:
#    build:
#      context: ./services/rabbitmq
#      args:
#        RABBITMQ_VERSION: ${RABBITMQ_VERSION}
#        RABBITMQ_PLUGINS: ${RABBITMQ_PLUGINS}
#    container_name: rabbitmq
#    restart: always
#    ports:
#      - "${RABBITMQ_HOST_PORT_C}:5672"
#      - "${RABBITMQ_HOST_PORT_S}:15672"
#    environment:
#       TZ: "$TZ"
#       RABBITMQ_DEFAULT_USER: "${RABBITMQ_DEFAULT_USER}"
#       RABBITMQ_DEFAULT_PASS: "${RABBITMQ_DEFAULT_PASS}"
#    networks:
#          - default

#  phpmyadmin:
#    image: phpmyadmin/phpmyadmin:latest
#    container_name: phpmyadmin
#    ports:
#      - "${PHPMYADMIN_HOST_PORT}:80"
#    volumes:
#      - ${PHPMYADMIN_USER_CONF_FILE}:/etc/phpmyadmin/config.user.inc.php:ro
#      - ${PHPMYADMIN_PHP_CONF_FILE}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini:ro
#    networks:
#      - default
#    environment:
#      - PMA_HOST=mysql
#      - PMA_PORT=3306
#      - TZ=$TZ

#  phpredisadmin:
#    image: erikdubbelboer/phpredisadmin:latest
#    container_name: phpredisadmin
#    ports:
#      - "${REDISMYADMIN_HOST_PORT}:80"
#    networks:
#      - default
#    environment:
#      - REDIS_1_HOST=redis
#      - REDIS_1_PORT=6379
#      - TZ=$TZ

#  mongodb:
#    image: mongo:${MONGODB_VERSION}
#    container_name: mongodb
#    environment:
#        MONGO_INITDB_ROOT_USERNAME: "${MONGODB_INITDB_ROOT_USERNAME}"
#        MONGO_INITDB_ROOT_PASSWORD: "${MONGODB_INITDB_ROOT_PASSWORD}"
#        TZ: "$TZ"
#    volumes:
#      - ${DATA_DIR}/mongo:/data/db:rw
#      - ${DATA_DIR}/mongo_key:/mongo:rw
#    ports:
#       - "${MONGODB_HOST_PORT}:27017"
#    networks:
#       - default
#    command:
#       --auth

#  adminmongo:
#    image: mrvautin/adminmongo
#    container_name: adminmongo
#    ports:
#      - "${ADMINMONGO_HOST_PORT}:1234"
#    environment:
#      - HOST=0.0.0.0
#      - DB_HOST=mongodb
#      - DB_PORT=27017
#    networks:
#      - default

#  elasticsearch:
#    build:
#      context: ./services/elasticsearch
#      args:
#        ELASTICSEARCH_VERSION: ${ELASTICSEARCH_VERSION}
#        ELASTICSEARCH_PLUGINS: ${ELASTICSEARCH_PLUGINS}
#    container_name: elasticsearch
#    environment:
#      - TZ=$TZ
#      - discovery.type=single-node
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#    volumes:
#      - ${DATA_DIR}/esdata:/usr/share/elasticsearch/data
#      - ${ELASTICSEARCH_CONF_FILE}:/usr/share/elasticsearch/config/elasticsearch.yml
#      - ${ELASTICSEARCH_JVM_CONF_FILE}:/usr/share/elasticsearch/config/jvm.options
#      - ${ELASTICSEARCH_LOG4J2_CONF_FILE}:/usr/share/elasticsearch/config/log4j2.properties
#    hostname: elasticsearch
#    restart: always
#    ports:
#      - "${ELASTICSEARCH_HOST_PORT_C}:9200"
#      - "${ELASTICSEARCH_HOST_PORT_S}:9300"

#  kibana:
#    image: kibana:${KIBANA_VERSION}
#    container_name: kibana
#    environment:
#      TZ: "$TZ"
#      elasticsearch.hosts: http://elasticsearch:9200
#      I18N_LOCALE: "${KIBANA_I18N_LOCALE}"
#    hostname: kibana
#    depends_on:
#      - elasticsearch
#    restart: always
#    ports:
#      - "${KIBANA_HOST}:5601"

#  logstash:
#    image: logstash:${LOGSTASH_VERSION}
#    container_name: logstash
#    hostname: logstash
#    restart: always
#    depends_on:
#      - elasticsearch
#    environment:
#      TZ: "$TZ"
#    ports:
#      - "${LOGSTASH_HOST_PORT_C}:9600"
#      - "${LOGSTASH_HOST_PORT_S}:5044"

#  node:
#    image: node:${NODE_VERSION}
#    environment:
#      - NODE_ENV=production
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#    expose:
#      - "8081"
#    networks:
#      - default
#    stdin_open: true
#    tty: true


#  supervisor:
#    build:
#      context: ./services/supervisor
#      args:
#        ALPINE_VERSION: alpine:${ALPINE_VERSION}
#        TZ: "$TZ"
#        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#    container_name: supervisor
#    ports:
#      - "${SUPERVISOR_HOST_PORT_C}:9001"
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#      - ${SUPERVISOR_LOG}:/var/log/supervisor/:rw
#      - ${SUPERVISOR_CONFIG}:/etc/supervisor/conf.d/:rw
#      - ${SUPERVISOR_CONF_FILE}:/etc/supervisor/supervisord.conf:ro
#    command:
#      - /bin/sh
#      - -c
#      - |
#        supervisord -n -c /etc/supervisor/supervisord.conf
#    restart: always
#    cap_add:
#      - SYS_PTRACE
#    networks:
#      - default

networks:
  default:
    driver: bridge
    ipam:
      driver: default
      # 解除下面的注释可以设置网段,用于nginx等容器固定容器IP
      #config:
      #  - subnet: 10.0.0.0/24