做项目过程中,经常会有php多个版本切换问题,用docker来解决多个php版本问题,本机已经有来nginx,不需要再构建nginx的docker来,如果需要可以使用最下方备注的docker-composer。

一、拉取php-fpm的镜像

  • 7.4 版本 docker pull php:7.4.2-fpm

  • 7.3版本 docker pull php:7.3.14-fpm

  • 5.6版本 docker pull php:5.6-fpm

二、创建容器

  • docker 直接创建
    docker run --name php-fpm -d \
    -p 127.0.0.1:9100:9000 \
    -v /data/myweb/:/data/myweb/ \
    --restart=on-failure:3 \
    --workdir=/data/myweb/ \
    php:7.3.14-fpm  #image替换为相关版本的php-fpm版本
    
  • docker-compose 创建
    version: "3"
    services:
    php-fpm:
      #image替换为相关版本的php-fpm版本
      image: "php:7.3.14-fpm"
      restart: always
      working_dir: /data/myweb/
      ports:
        - "127.0.0.1:9001:9000"
      volumes:
        - /data/myweb/:/data/myweb/ #网站目录需要和nginx配置目录一致
        #- /data/docker/lnmp/php5.6/php.ini-production:/usr/local/  etc/php/php.ini #正式线
        #- /data/docker/conf/conf/php5.6/php-fpm.conf:/usr/local/etc/  php-fpm.conf
        # - /etc/localtime:/etc/localtime:ro
    
    
    ##项目启动命令##
    # docker-compose -f docker-fpm-compose.yml  -p php up  -d
    
    ##项目停止命令##
    # docker-compose -f docker-fpm-compose.yml  -p php down
    

三、安装redis扩展(安装其他扩展方法类似)

  • 进入php容器 docker exec -it php-fpm bash

  • 安装redis扩展

    • 方法一:
      pecl install -o -f redis
      rm -rf /tmp/pear/
      docker-php-ext-enable redis
      
    • 方法二:
      curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.1.3.tar.gz
      tar xfz /tmp/redis.tar.gz
      rm -r /tmp/redis.tar.gz
      mkdir -p /usr/src/php/ext
      mv phpredis-3.1.3 /usr/src/php/ext/redis
      cd /usr/src/php/ext/redis
      docker-php-ext-install redis
      
    • 方法三: (支持官方扩展安装) docker-php-ext-install pdo pdo_mysql

注: docker-lnmp-composer

version: "3"
services:
  nginx:
    image: "nginx"
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /data/docker/lnmp/conf/nginx:/etc/nginx
      - /data/www:/usr/share/nginx/html
      - /data/docker/lnmp/log/nginx/:/var/log/nginx/
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - php-fpm
    networks:
      lnmp:
        ipv4_address: 172.16.1.2
        
  php-fpm:
    #image替换为相关版本的php-fpm版本
    image: "php:7.3.14-fpm"
    restart: always
    volumes:
      - /data/www:/usr/share/nginx/html
      - /data/docker/lnmp/php5.6/php.ini-production:/usr/local/etc/php/php.ini
      #- /data/docker/conf/conf/php5.6/php-fpm.conf:/usr/local/etc/php-fpm.conf
      - /etc/localtime:/etc/localtime:ro
    networks:
      lnmp:
        ipv4_address: 172.16.1.3
        
  redis:
    image: "redis"
    ports:
      - "6379:6379"
    restart: always
    networks:
      lnmp:
        ipv4_address: 172.16.1.4
      
networks:
  lnmp:
    driver: bridge
    ipam:
      driver: default
      config:
      -
        subnet: 172.16.1.0/24

##项目启动命令##
# docker-compose -f docker-lnmp-compose.yml  -p lnmp up  -d

##项目停止命令##
# docker-compose -f docker-lnmp-compose.yml  -p lnmp down