version: '2' services: ### Applications Code Container ############################# applications: image: tianon/true volumes: - ${APPLICATION}:/var/www ### Workspace Utilities Container ########################### workspace: build: context: ./workspace args: - INSTALL_XDEBUG=${WORKSPACE_INSTALL_XDEBUG} - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE} - INSTALL_SOAP=${WORKSPACE_INSTALL_SOAP} - INSTALL_MONGO=${WORKSPACE_INSTALL_MONGO} - INSTALL_MSSQL=${WORKSPACE_INSTALL_MSSQL} - INSTALL_NODE=${WORKSPACE_INSTALL_NODE} - INSTALL_YARN=${WORKSPACE_INSTALL_YARN} - INSTALL_DRUSH=${WORKSPACE_INSTALL_DRUSH} - INSTALL_AEROSPIKE=${WORKSPACE_INSTALL_AEROSPIKE} - INSTALL_V8JS=${WORKSPACE_INSTALL_V8JS} - COMPOSER_GLOBAL_INSTALL=${WORKSPACE_COMPOSER_GLOBAL_INSTALL} - INSTALL_WORKSPACE_SSH=${WORKSPACE_INSTALL_WORKSPACE_SSH} - INSTALL_LARAVEL_ENVOY=${WORKSPACE_INSTALL_LARAVEL_ENVOY} - INSTALL_LARAVEL_INSTALLER=${WORKSPACE_INSTALL_LARAVEL_INSTALLER} - INSTALL_DEPLOYER=${WORKSPACE_INSTALL_DEPLOYER} - INSTALL_LINUXBREW=${WORKSPACE_INSTALL_LINUXBREW} - INSTALL_MC=${WORKSPACE_INSTALL_MC} - INSTALL_IMAGE_OPTIMIZERS=${WORKSPACE_INSTALL_IMAGE_OPTIMIZERS} - PUID=${WORKSPACE_PUID} - PGID=${WORKSPACE_PGID} - NODE_VERSION=${WORKSPACE_NODE_VERSION} - YARN_VERSION=${WORKSPACE_YARN_VERSION} - TZ=${WORKSPACE_TIMEZONE} - BLACKFIRE_CLIENT_ID=${BLACKFIRE_CLIENT_ID} - BLACKFIRE_CLIENT_TOKEN=${BLACKFIRE_CLIENT_TOKEN} dockerfile: "Dockerfile-${PHP_VERSION}" volumes_from: - applications extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" ports: - "${WORKSPACE_SSH_PORT}:22" tty: true networks: - frontend - backend ### PHP-FPM Container ####################################### php-fpm: build: context: ./php-fpm args: - INSTALL_XDEBUG=${PHP_FPM_INSTALL_XDEBUG} - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE} - INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP} - INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO} - INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL} - INSTALL_ZIP_ARCHIVE=${PHP_FPM_INSTALL_ZIP_ARCHIVE} - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH} - INSTALL_PHPREDIS=${PHP_FPM_INSTALL_PHPREDIS} - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED} - INSTALL_OPCACHE=${PHP_FPM_INSTALL_OPCACHE} - INSTALL_EXIF=${PHP_FPM_INSTALL_EXIF} - INSTALL_AEROSPIKE=${PHP_FPM_INSTALL_AEROSPIKE} - INSTALL_MYSQLI=${PHP_FPM_INSTALL_MYSQLI} - INSTALL_TOKENIZER=${PHP_FPM_INSTALL_TOKENIZER} - INSTALL_INTL=${PHP_FPM_INSTALL_INTL} - INSTALL_GHOSTSCRIPT=${PHP_FPM_INSTALL_GHOSTSCRIPT} - INSTALL_LDAP=${PHP_FPM_INSTALL_LDAP} - INSTALL_SWOOLE=${PHP_FPM_INSTALL_SWOOLE} - INSTALL_IMAGE_OPTIMIZERS=${PHP_FPM_INSTALL_IMAGE_OPTIMIZERS} dockerfile: "Dockerfile-${PHP_VERSION}" volumes_from: - applications volumes: - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini expose: - "9000" depends_on: - workspace extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} networks: - backend ### PHP Worker Container ##################################### php-worker: build: context: ./php-worker volumes_from: - applications depends_on: - workspace extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" networks: - backend ### Nginx Server Container ################################## nginx: build: context: ./nginx args: - PHP_UPSTREAM=php-fpm volumes_from: - applications volumes: - ${NGINX_HOST_LOG_PATH}:/var/log/nginx - ${NGINX_SITES_PATH}:/etc/nginx/sites-available ports: - "${NGINX_HOST_HTTP_PORT}:80" - "${NGINX_HOST_HTTPS_PORT}:443" depends_on: - php-fpm networks: - frontend - backend ### Blackfire Container ################################# # blackfire: # image: blackfire/blackfire # environment: # - BLACKFIRE_SERVER_ID=${BLACKFIRE_SERVER_ID} # - BLACKFIRE_SERVER_TOKEN=${BLACKFIRE_SERVER_TOKEN} # depends_on: # - php-fpm # networks: # - backend ### Apache Server Container ################################# # apache2: # build: # context: ./apache2 # args: # - PHP_SOCKET=${PHP_SOCKET} # volumes_from: # - applications # volumes: # - ${APACHE_HOST_LOG_PATH}:/var/log/apache2 # - ${APACHE_SITES_PATH}:/etc/apache2/sites-available # ports: # - "${APACHE_HOST_HTTP_PORT}:80" # - "${APACHE_HOST_HTTPS_PORT}:443" # depends_on: # - php-fpm # networks: # - frontend # - backend ### HHVM Container ########################################## # hhvm: # build: ./hhvm # volumes_from: # - applications # expose: # - "9000" # depends_on: # - workspace # networks: # - frontend # - backend ### Minio Container ######################################### # minio: # build: ./minio # volumes: # - minio:/export # ports: # - "${MINIO_PORT}:9000" # environment: # - MINIO_ACCESS_KEY=access # - MINIO_SECRET_KEY=secretkey # networks: # - frontend ### MySQL Container ######################################### mysql: build: context: ./mysql environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - TZ=${WORKSPACE_TIMEZONE} volumes: - ${DATA_SAVE_PATH}/mysql:/var/lib/mysql - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d ports: - "${MYSQL_PORT}:3306" networks: - backend ### Percona Container ######################################### # percona: # build: # context: ./percona # environment: # - MYSQL_DATABASE=${PERCONA_DATABASE} # - MYSQL_USER=${PERCONA_USER} # - MYSQL_PASSWORD=${PERCONA_PASSWORD} # - MYSQL_ROOT_PASSWORD=${PERCONA_ROOT_PASSWORD} # volumes: # - ${DATA_SAVE_PATH}/percona:/var/lib/mysql # - ${PERCONA_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d # ports: # - "${PERCONA_PORT}:3306" # networks: # - backend ### MSSQL Container ######################################### # mssql: # build: # context: ./mssql # environment: # - MSSQL_DATABASE=${MSSQL_DATABASE} # - SA_PASSWORD=${MSSQL_PASSWORD} # - ACCEPT_EULA=Y # volumes: # - ${DATA_SAVE_PATH}/mssql:/var/opt/mssql # ports: # - "${MSSQL_PORT}:1433" # networks: # - backend ### MariaDB Container ####################################### # mariadb: # build: ./mariadb # volumes: # - ${DATA_SAVE_PATH}/mariadb:/var/lib/mysql # - ${MARIADB_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d # ports: # - "${MARIADB_PORT}:3306" # environment: # - MYSQL_DATABASE=${MARIADB_DATABASE} # - MYSQL_USER=${MARIADB_USER} # - MYSQL_PASSWORD=${MARIADB_PASSWORD} # - MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD} # networks: # - backend ### PostgreSQL Container #################################### # postgres: # build: ./postgres # volumes: # - ${DATA_SAVE_PATH}/postgres:/var/lib/postgresql/data # ports: # - "${POSTGRES_PORT}:5432" # environment: # - POSTGRES_DB=${POSTGRES_DB} # - POSTGRES_USER=${POSTGRES_USER} # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # networks: # - backend ### PostgreSQL PostGis Container ############################ # postgres-postgis: # build: ./postgres-postgis # volumes: # - ${DATA_SAVE_PATH}/postgres:/var/lib/postgresql/data # ports: # - "${POSTGRES_PORT}:5432" # environment: # - POSTGRES_DB=${POSTGRES_DB} # - POSTGRES_USER=${POSTGRES_USER} # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # networks: # - backend ### Neo4j Container ######################################### # neo4j: # build: ./neo4j # ports: # - "7474:7474" # - "1337:1337" # environment: # - NEO4J_AUTH=default:secret # volumes: # - ${DATA_SAVE_PATH}/neo4j:/var/lib/neo4j/data # networks: # - backend ### MongoDB Container ####################################### # mongo: # build: ./mongo # ports: # - "${MONGODB_PORT}:27017" # volumes: # - ${DATA_SAVE_PATH}/mongo:/data/db # networks: # - backend ### RethinkDB Container ####################################### # rethinkdb: # build: ./rethinkdb # ports: # - "${RETHINKDB_PORT}:8080" # volumes: # - ${DATA_SAVE_PATH}/rethinkdb:/data/rethinkdb_data # networks: # - backend ### Redis Container ######################################### redis: build: ./redis volumes: - ${DATA_SAVE_PATH}/redis:/data ports: - "6379:6379" networks: - backend ### Aerospike c Container ################################### # aerospike: # build: ./aerospike # volumes_from: # - workspace # volumes: # - ${DATA_SAVE_PATH}/aerospike:/opt/aerospike/data # ports: # - "${AEROSPIKE_SERVICE_PORT}:3000" # - "${AEROSPIKE_FABRIC_PORT}:3001" # - "${AEROSPIKE_HEARTBEAT_PORT}:3002" # - "${AEROSPIKE_INFO_PORT}:3003" # networks: # - backend ### Memcached Container ##################################### # memcached: # build: ./memcached # volumes: # - ${DATA_SAVE_PATH}/memcached:/var/lib/memcached # ports: # - "${MEMCACHED_HOST_PORT}:11211" # depends_on: # - php-fpm # networks: # - backend ### Beanstalkd Container #################################### # beanstalkd: # build: ./beanstalkd # ports: # - "${BEANSTALKD_HOST_PORT}:11300" # privileged: true # depends_on: # - php-fpm # networks: # - backend ### RabbitMQ Container ###################################### # rabbitmq: # build: ./rabbitmq # ports: # - "${RABBITMQ_NODE_HOST_PORT}:5672" # - "${RABBITMQ_MANAGEMENT_HTTP_HOST_PORT}:15672" # - "${RABBITMQ_MANAGEMENT_HTTPS_HOST_PORT}:15671" # privileged: true # environment: # - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER} # - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS} # depends_on: # - php-fpm # networks: # - backend ### Beanstalkd Console Container ############################ # beanstalkd-console: # build: ./beanstalkd-console # ports: # - "2080:2080" # depends_on: # - beanstalkd # networks: # - backend ### Caddy Server Container ################################## # caddy: # build: ./caddy # volumes_from: # - applications # volumes: # - ${CADDY_CUSTOM_CADDYFILE}:/etc/Caddyfile # - ${CADDY_HOST_LOG_PATH}:/var/log/caddy # - ${DATA_SAVE_PATH}:/root/.caddy # ports: # - "${CADDY_HOST_HTTP_PORT}:80" # - "${CADDY_HOST_HTTPS_PORT}:443" # depends_on: # - php-fpm # networks: # - frontend # - backend ### phpMyAdmin Container #################################### # phpmyadmin: # build: ./phpmyadmin # environment: # - PMA_ARBITRARY=1 # - MYSQL_USER=${PMA_USER} # - MYSQL_PASSWORD=${PMA_PASSWORD} # - MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD} # ports: # - "${PMA_PORT}:80" # depends_on: # - "${PMA_DB_ENGINE}" # networks: # - frontend # - backend ### Adminer Container #################################### # adminer: # build: # context: ./adminer # args: # - INSTALL_MSSQL=${ADM_INSTALL_MSSQL} # ports: # - "${ADM_PORT}:8080" # depends_on: # - php-fpm # networks: # - frontend # - backend ### pgAdmin Container ####################################### # pgadmin: # build: ./pgadmin # ports: # - "5050:5050" # depends_on: # - postgres # networks: # - frontend # - backend ### ElasticSearch Container ################################# # elasticsearch: # build: ./elasticsearch # volumes: # - elasticsearch-data:/usr/share/elasticsearch/data # - elasticsearch-plugins:/usr/share/elasticsearch/plugins # environment: # - cluster.name=laradock-cluster # - bootstrap.memory_lock=true # - "ES_JAVA_OPTS=-Xms256m -Xmx256m" # ulimits: # memlock: # soft: -1 # hard: -1 # mem_limit: 512m # ports: # - "${ELASTICSEARCH_HOST_HTTP_PORT}:9200" # - "${ELASTICSEARCH_HOST_TRANSPORT_PORT}:9300" # depends_on: # - php-fpm # networks: # - frontend # - backend ### Kibana Container ####################################### # kibana: # build: ./kibana # ports: # - "${KIBANA_HTTP_PORT}:5601" # depends_on: # - elasticsearch # networks: # - frontend # - backend ### Certbot Container ################################## # certbot: # build: # context: ./certbot # volumes: # - ./data/certbot/certs/:/var/certs # - ./certbot/letsencrypt/:/var/www/letsencrypt # environment: # - CN="fake.domain.com" # - EMAIL="fake.email@gmail.com" # networks: # - frontend ### Mailhog Container ######################################### # mailhog: # build: ./mailhog # ports: # - "1025:1025" # - "8025:8025" # networks: # - frontend # - backend ### Selenium Container ######################################## # selenium: # build: ./selenium # ports: # - "${SELENIUM_PORT}:4444" # volumes: # - /dev/shm:/dev/shm # networks: # - frontend ### Varnish Proxy 1 ########################################## # proxy: # build: ./varnish # expose: # - ${VARNISH_PORT} # environment: # - VARNISH_CONFIG=${VARNISH_CONFIG} # - CACHE_SIZE=${VARNISH_PROXY1_CACHE_SIZE} # - VARNISHD_PARAMS=${VARNISHD_PARAMS} # - VARNISH_PORT=${VARNISH_PORT} # - BACKEND_HOST=${VARNISH_PROXY1_BACKEND_HOST} # - BACKEND_PORT=${VARNISH_BACKEND_PORT} # - VARNISH_SERVER=${VARNISH_PROXY1_SERVER} # links: # - workspace # networks: # - frontend ### Varnish Proxy 2 ########################################## # proxy2: # build: ./varnish # expose: # - ${VARNISH_PORT} # environment: # - VARNISH_CONFIG=${VARNISH_CONFIG} # - CACHE_SIZE=${VARNISH_PROXY2_CACHE_SIZE} # - VARNISHD_PARAMS=${VARNISHD_PARAMS} # - VARNISH_PORT=${VARNISH_PORT} # - BACKEND_HOST=${VARNISH_PROXY2_BACKEND_HOST} # - BACKEND_PORT=${VARNISH_BACKEND_PORT} # - VARNISH_SERVER=${VARNISH_PROXY2_SERVER} # links: # - workspace # networks: # - frontend ### Balancer Haproxy ########################################## # balancer: # build: ./haproxy # ports: # - "${HAPROXY_HOST_HTTP_PORT}:8085" # volumes: # - /var/run/docker.sock:/var/run/docker.sock # links: # - proxy # - proxy2 ### Jenkins ################################################### # jenkins: # build: ./jenkins # environment: # JAVA_OPTS: "-Djava.awt.headless=true" # ports: # - "${JENKINS_HOST_SLAVE_AGENT_PORT}:50000" # - "${JENKINS_HOST_HTTP_PORT}:8080" # privileged: true # volumes: # - ${JENKINS_HOME}:/var/jenkins_home # - /var/run/docker.sock:/var/run/docker.sock # networks: # - frontend # - backend ### Laravel Echo Server ####################################### # laravel-echo-server: # build: # context: ./laravel-echo-server # volumes: # - ./laravel-echo-server/laravel-echo-server.json:/app/laravel-echo-server.json:ro # ports: # - "${LARAVEL_ECHO_SERVER_PORT}:6001" # links: # - redis # networks: # - frontend # - backend ### Networks Setup ############################################ networks: frontend: driver: "bridge" backend: driver: "bridge" ### Volumes Setup ############################################# volumes: mysql: driver: "local" percona: driver: "local" mssql: driver: "local" postgres: driver: "local" memcached: driver: "local" redis: driver: "local" neo4j: driver: "local" mariadb: driver: "local" mongo: driver: "local" minio: driver: "local" rethinkdb: driver: "local" phpmyadmin: driver: "local" adminer: driver: "local" aerospike: driver: "local" caddy: driver: "local" elasticsearch-data: driver: "local" elasticsearch-plugins: driver: "local"