docker 搭建php 开发环境 添加扩展redis、swoole、xdebug

docker-compose搭建lnmp

先决条件

  • 首先需要安装docker
  • 安装docker-compost

1、创建lnmp工作目录

#创建三个目录
mkdir lnmp && cd lnmp
mkdir -p nginx/conf php mysql/data lnmp/www

#编写nginx 配置文件  nginx/conf/default.conf
vim nginx/conf/default.conf

server {
    listen       80;
    root   /usr/share/nginx/html;
    index   index.html index.htm index.php;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location / {
        index  index.html index.htm index.php ;
        try_files $uri $uri/ /index.php?$query_string;
        autoindex  on;
    }

    location ~ \.php$ {
        #php73是容器命名
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
    }

}

2、编写php镜像文件Dockerfile

因为php需要安装一些扩展文件 使用dockerfile进行镜像构建

vim php/Dockerfile

基础
FROM php:7.2-fpm

修改时区
ENV TZ Asia/Shanghai
RUN date -R

换源
RUN echo 'deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free' >/etc/apt/sources.list
RUN echo 'deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free' >>/etc/apt/sources.list
RUN apt-get update --fix-missing && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev  \
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include --with-jpeg-dir=/usr/include/jpeg \
        && docker-php-ext-install gd mysqli opcache pdo_mysql gd zip

ENV PHPREDIS_VERSION 5.0.1
ENV PHPXDEBUG_VERSION 2.6.0
ENV PHPSWOOLE_VERSION 4.5.10

RUN pecl install redis-$PHPREDIS_VERSION \
    && pecl install xdebug-$PHPXDEBUG_VERSION \
    && pecl install swoole-$PHPSWOOLE_VERSION \
    && docker-php-ext-enable redis xdebug swoole

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
     && php composer-setup.php \
     && php -r "unlink('composer-setup.php');" \
     && mv composer.phar /usr/local/bin/composer \
     && composer config -g repo.packagist composer https://packagist.phpcomposer.com
RUN apt-get install -y git

RUN rm -rf /var/cache/apt/* \
    && rm -rf /var/lib/apt/lists/*
RUN mkdir /var/lib/sessions \
    && chmod o=rwx -R /var/lib/sessions
#容器启动时执行指令
CMD ["php-fpm"]

3、创建compose 的yml文件

version: "3.9"
services:
  #配置nginx
  nginx:
    #镜像名称 nginx:latest
    image: nginx
     #自定义容器的名称
     #container_name: c_nginx
    ports:
      - "80:80"

    #lnmp目录和容器的/usr/share/nginx/html目录进行绑定,设置rw权限
    #将宿主机的~/lnmp/nginx/conf/default.conf和容器的/etc/nginx/conf.d/default.conf进行绑定
    volumes:
      - ./data/:/usr/share/nginx/html:rw
      - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
    #设置环境变量,当前的时区
    environment:
      TZ: "Asia/Shanghai"
    #容器是否随docker服务启动重启
    restart: always
    #容器加入名为lnmp的网络
    networks:
      - lnmp

  #配置php
  php:
    #image: php:7.4-fpm   //由于php扩展比较多  直接build自己的Dockerfile 不需要官方镜像
    build: ./php
    container_name: php
    volumes:
      - ./data/:/var/www/html/:rw
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - lnmp

  #配置mysql
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data/:/var/lib/mysql/:rw
    restart: always
    networks:
      - lnmp
    #设置密码
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      TZ: :"Asia/Shanghai"
networks:
  lnmp:

4、执行compose命令

#构建镜像环境
docker-compose up   # -d 为后台执行

5、扩展命令

docker-compose ps  查看compose服务
docker-compose run web env #查看web服务的环境变量
docker-compose stop 停止服务
docker-compose down  #关闭并删除改服务容器   #传递--volumnes同时删除使用的数据卷

6、php7.4 dockerfile

FROM php:7.4-fpm

设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

换源(国内源)
#RUN echo 'deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free' >/etc/apt/sources.list
#RUN echo 'deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free' >>/etc/apt/sources.list

更新安装依赖包和PHP核心拓展
RUN apt-get update && apt-get install -y \
       libfreetype6-dev  libjpeg-dev libjpeg62-turbo-dev  libpng-dev \
   && docker-php-ext-configure gd --with-freetype --with-jpeg \
   && docker-php-ext-install -j$(nproc) gd mysqli opcache pdo_mysql

#7.4添加zip扩展有问题
#RUN apk add libzip-dev && docker-php-ext-install zip

ENV PHPREDIS_VERSION 5.0.1
ENV PHPXDEBUG_VERSION 3.1.3
ENV PHPSWOOLE_VERSION 4.8.7

RUN pecl install redis-$PHPREDIS_VERSION \
   && pecl install xdebug-$PHPXDEBUG_VERSION \
   && pecl install swoole-$PHPSWOOLE_VERSION \
   && docker-php-ext-enable redis xdebug swoole

安装 Composer
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH

CMD ["php-fpm"]

WORKDIR /var/www/html

当前构造的镜像地址。可直接使用 无需再次构造

docker pull fangsinan/php:7.4

Original: https://www.cnblogs.com/Kuju/p/15977101.html
Author: 酷酷的sinan
Title: docker 搭建php 开发环境 添加扩展redis、swoole、xdebug

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599003/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Vue 2.0 基础

    知识点 1.是一个MVVM框架 由MVC架构衍生,分为View(视图层)、ViewModel(数据视图层)、Model(数据层),MVVM 最标志性的特性就是 数据绑定,实现数据驱…

    数据库 2023年6月11日
    0102
  • VUE 打包测试部署项目到linux服务器,

    干就完了 一、项目根目录输入,如E:\demo>npm install csharp;gutter:true; npm installee</p> <pre…

    数据库 2023年6月6日
    0157
  • writeset参数配置探索——究竟在哪个角色上配置参数?

    关于writeset,一直以来我都是所有节点同时配置下面参数: binlog_transaction_dependency_tracking=WRITESET transactio…

    数据库 2023年6月16日
    083
  • mysql绿色版在windows系统中的启动

    Original: https://www.cnblogs.com/java265/p/15597871.htmlAuthor: java265Title: mysql绿色版在wi…

    数据库 2023年5月24日
    088
  • MySQL数据库-数据表(上)

    数据表的基本操作. MySQL 数据库支持多种数据类型,大致可以分为 3 类:数值类型、日期和时间类型、字符串(字符)类型。 (1)数值类型 数值类型用于存储数字型数据,这些类型包…

    数据库 2023年6月11日
    084
  • 设计 | ClickHouse 分布式表实现数据同步

    作者:吴帆 青云数据库团队成员主要负责维护 MySQL 及 ClickHouse 产品开发,擅长故障分析,性能优化。 在多副本分布式 ClickHouse 集群中,通常需要使用 D…

    数据库 2023年5月24日
    0100
  • MySQL数据类型和表操作

    MySQL数据类型和表修改 整型的定义 //创建有符号整数表 CREATE TABLE t1 (id TINYINT); //创建无符号整数表 CREATE TABLE t2 (i…

    数据库 2023年6月16日
    095
  • 【JDBC】笔记(1)— JDBC概述

    1、JDBC是什么?Java DataBase Connectivity(Java语言连接数据库) 2、JDBC的本质是什么?JDBC是SUN公司制定的一套 接口(实质)java….

    数据库 2023年5月24日
    096
  • 数据类型拓展

    public class Demo03 { public static void main(String[] args) { //整数拓展 :进制 二进制0b 十进制 八进制0 十…

    数据库 2023年6月11日
    068
  • SQL优化这5个极简法则,直接让查询原地起飞!

    SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。 查询优化…

    数据库 2023年5月24日
    081
  • 排查线上问题的9种方式

    德国科技管理专家斯坦门茨早年移居美国,他以非凡的才能成为美国企业界的佼佼者。一次,美国著名的福特公司的一组电机发生故障,在束手无策之时,公司请斯坦门茨出马解决问题。 斯坦门茨在电机…

    数据库 2023年6月6日
    083
  • 线程池系列二:一张动图,彻底懂了execute和submit

    ​我们知道线程池通过execute方法执行提交的Runnable任务,但Runnable只是执行任务,没有返回任何信息。 【线程池原理:线程池原来是个外包公司,打工人我悟了】 若是…

    数据库 2023年6月6日
    0111
  • Java面试题(五)–Rabbits

    1、什么是MyBatis? 1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建…

    数据库 2023年6月16日
    0106
  • 机器学习实战-决策树

    1.决策树的构造 1.1优缺点 优点: 计算复杂度不高:以ID3为例,每次运算都是基于某一列特征,特征计算完后,下次计算不考虑该最有特征,并且通过适当剪枝可以简化复杂度 输出结果易…

    数据库 2023年6月16日
    0101
  • Mysql事件调度实现字段自动刷新

    mysql中事件与触发器,触发器是当mysql运行起来之后因某些设定的语句而触发执行,事件则可自定义一次或者周期性执行的任务,在mysql中有特定的线程来管理它,即”事…

    数据库 2023年5月24日
    089
  • CISCN2022初赛misc wp

    ez_usb usb流量题,与以前的鼠标流量和键盘流量有所区别,但大同小异 导出所有的HID数据并按照ip分类,之后脚本解码得到压缩包和密码 mappings = { "…

    数据库 2023年6月11日
    0118
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球