win7下docker环境搭建nginx+php-fpm+easyswoole开发环境

基础的环境已在文章nginx、php-fpm、swoole HTTP/TCP压测对比中搭建了,现在是在这个基础上在搭建easyswoole开发环境

主要要修改的地方是dnmp包里面的docker-compose.yml修改:

version: '3'

networks:
#  frontend:
#    driver: ${NETWORKS_DRIVER}
  backend:
    driver: ${NETWORKS_DRIVER}

#volumes:
#  mysql:
#    driver: ${VOLUMES_DRIVER}
#  memcached:
#    driver: ${VOLUMES_DRIVER}
#  redis:
#    driver: ${VOLUMES_DRIVER}
#  mongo:
#    driver: ${VOLUMES_DRIVER}

services:
#    php-client注释掉
#    php-client:
#      image: "swoole:4.1.2"
#      build:
#        context: ./php
#      ports:
#        - "9502:9502"
#      networks:
#        - backend
#      volumes:
#        - ${APP_CODE_PATH_HOST}:/app:rw
#      command: php /app/swoole/examples/http/server.php start

    php:
      image: "swoole:4.1.2"
      build:
        context: ./php
      ports:
        - "9501:9501"
      networks:
        - backend
      volumes:
        - ${APP_CODE_PATH_HOST}:/app:rw
      command: /app/easyswoole/vendor/bin/easyswoole start


### PHP-FPM ##############################################
    php-fpm:
      build:
        context: ./php-fpm
        args:
          - LARADOCK_PHP_VERSION=${PHP_VERSION}
          - INSTALL_XDEBUG=${PHP_FPM_INSTALL_XDEBUG}
          - INSTALL_PHPDBG=${PHP_FPM_INSTALL_PHPDBG}
          - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
          - INSTALL_SSH2=${PHP_FPM_INSTALL_SSH2}
          - INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP}
          - INSTALL_IMAP=${PHP_FPM_INSTALL_IMAP}
          - INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}
          - INSTALL_AMQP=${PHP_FPM_INSTALL_AMQP}
          - INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
          - INSTALL_ZIP_ARCHIVE=${PHP_FPM_INSTALL_ZIP_ARCHIVE}
          - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
          - INSTALL_GMP=${PHP_FPM_INSTALL_GMP}
          - 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}
          - AEROSPIKE_PHP_REPOSITORY=${AEROSPIKE_PHP_REPOSITORY}
          - INSTALL_MYSQLI=${PHP_FPM_INSTALL_MYSQLI}
          - INSTALL_PGSQL=${PHP_FPM_INSTALL_PGSQL}
          - INSTALL_PG_CLIENT=${PHP_FPM_INSTALL_PG_CLIENT}
          - 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}
          - SWOOLE_VERSION=${PHP_SWOOLE_VERSION}
          - INSTALL_IMAGE_OPTIMIZERS=${PHP_FPM_INSTALL_IMAGE_OPTIMIZERS}
          - INSTALL_IMAGEMAGICK=${PHP_FPM_INSTALL_IMAGEMAGICK}
          - INSTALL_CALENDAR=${PHP_FPM_INSTALL_CALENDAR}
          - INSTALL_FAKETIME=${PHP_FPM_INSTALL_FAKETIME}
          - INSTALL_IONCUBE=${PHP_FPM_INSTALL_IONCUBE}
      volumes:
        - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini
        - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
      expose:
        - "9000"
      depends_on:
        - php
      environment:
        - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
        - FAKETIME=${PHP_FPM_FAKETIME}
      networks:
        - backend

## NGINX Server #########################################
    nginx:
      build:
        context: ./nginx
        args:
          - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
          - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
      volumes:
        - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
        - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
        - ${NGINX_SITES_PATH}:/etc/nginx/sites-available:rw
      ports:
        - "${NGINX_HOST_HTTP_PORT}:80"
        - "${NGINX_HOST_HTTPS_PORT}:443"
      depends_on:
        - php
        - php-fpm
      networks:
#        - frontend
        - backend

### MySQL ################################################
#    mysql:
#      build:
#        context: ./mysql
#        args:
#          - MYSQL_VERSION=${MYSQL_VERSION}
#      environment:
#        - MYSQL_DATABASE=${MYSQL_DATABASE}
#        - MYSQL_USER=${MYSQL_USER}
#        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
#        - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
#        - TZ=${WORKSPACE_TIMEZONE}
#      volumes:
##        - ${DATA_PATH_HOST}/mysql:/var/lib/mysql
#        - mysql:/var/lib/mysql
#        - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
#      ports:
#        - "${MYSQL_PORT}:3306"
#      networks:
#        - backend

### MongoDB ##############################################
#    mongo:
#      build: ./mongo
#      ports:
#        - "${MONGODB_PORT}:27017"
#      volumes:
##        - ${DATA_PATH_HOST}/mongo:/data/db
#        - mongo:/data/db
#      networks:
#        - backend

### Redis ################################################
#    redis:
#      build: ./redis
#      volumes:
#        - ${DATA_PATH_HOST}/redis:/data
#      ports:
#        - "${REDIS_PORT}:6379"
#      networks:
#        - backend

### Memcached ############################################
#    memcached:
#      build: ./memcached
#      volumes:
#        - ${DATA_PATH_HOST}/memcached:/var/lib/memcached
#      ports:
#        - "${MEMCACHED_HOST_PORT}:11211"
#      depends_on:
#        - php
#      networks:
#        - backend

  宿主机本机目录上新建一个sh脚本文件,用于运行安装easyswoole,并命名为easyswoole_install.sh详细代码如下

#!/bin/sh

# swoole image must contain php composer
swoole_img="swoole:4.1.2"
container_code_path="/app"
work_dir="/www"
docker_compose_file_path="/www/dnmp"

cur_dir=$(pwd)

if [ -d ${work_dir}/easyswoole ]; then
    sudo rm -rf ${work_dir}/easyswoole
fi

Init_Easyswoole()
{
    docker run --rm --net=host -v ${work_dir}:${container_code_path}:rw composer sh -c "composer config -g repo.packagist composer https://packagist.laravel-china.org && cd ${container_code_path} && composer create-project easyswoole/app easyswoole"
}

Install_Easyswoole()
{
    docker run --rm --net=host -v ${work_dir}:${container_code_path}:rw ${swoole_img} sh -c "${container_code_path}/easyswoole/vendor/bin/easyswoole install"
}

Init_Easyswoole
Install_Easyswoole
cd ${docker_compose_file_path}
docker-compose up -d
docker-compose ps

以上的word_dir为宿主机的工作目录,/www/dnmp为dnmp环境中的docker-compose.yml目录;

使用xshell进行连接docker虚拟机,进入到easyswoole_install.sh所在目录,运行:

./easyswoole_install.sh

easyswoole安装成功后,打开Docker Quickstart Terminal.exe

进入到dnmp目录,运行

docker-compose down

再运行

docker-compose up -d

然后查看容器是否全部启动

docker-compse ps

发现已经全部启动,在win7宿主机进行访问http://localhost:9501/,已经可以正常使用了

接下来就可以开始使用easyswoole

PS:若是修改easyswoole宿主机代码,要生效的话,需要在docker虚拟机上reload才能生效

docker-compose exec php easyswoole/vendor/bin/easyswoole reload
原文地址:https://www.cnblogs.com/Dong-Ge/p/9642757.html