docker-compose安装PHP7.4(含扩展)+MySQL5.7+Nginx+Redis5.1

Centos7+docker 19.03.8 运行正常,废话不多说。直接上代码,解释看下方。

version: '3'
services:
    nginx:
        # 容器名称
        container_name: "compose-nginx"
        image: nginx:latest
        restart: always
        # 端口映射
        ports:
            - "80:80"
            - "443:443"
        environment:
            - TZ=Asia/Shanghai
        # 依赖关系 先跑php
        depends_on:
            - "php"
        # 数据卷
        volumes:
            # 映射主机./conf.d目录到容器/etc/nginx/conf.d目录
            - "/data/nginx/conf.d:/etc/nginx/conf.d"
            - "/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
            - "/data/nginx/html:/usr/share/nginx/html"
            - "/data/nginx/log:/var/log/nginx/"
        networks:
            app_net:
                ipv4_address: 10.10.10.2
    php:
        build: ./php-extension
        image: php:7.4
        restart: always
        ports:
            - "9000:9000"
        volumes:
            - "/data/nginx/html:/var/www/html"
            - "/data/php74/etc:/usr/local/etc"
            - "/data/php74/log:/var/log/php"
        stdin_open: true
        tty: true   #这两条是防止启动php失败
        links:
            - "mysql"
        networks:
            app_net:
                ipv4_address: 10.10.10.3
        environment:
            - TZ=Asia/Shanghai # 设置时区
        container_name: "compose-php"
    mysql:
        image: mysql:5.7
        ports:
            - "3306:3306"
        volumes:
            - /data/mysql/data:/var/lib/mysql
            - /data/mysql/conf:/etc/mysql/conf.d
            - /data/mysql/logs:/data/mysql/logs
        restart: always
        # 环境变量
        environment:
            - TZ=Asia/Shanghai # 设置时区
            # mysql密码
            - MYSQL_ROOT_PASSWORD=yourpassword
        networks:
            app_net:
                ipv4_address: 10.10.10.1     
        container_name: "compose-mysql"
    redis:
        # 指定镜像
        image: redis:5
        restart: always
        ports:
        # 端口映射
            - 6379:6379
        volumes:
        # 目录映射
            - "/data/redis/conf:/usr/local/etc/redis"
            - "/data/redis/data:/data"
        command:
         # 执行的命令
          redis-server /usr/local/etc/redis/redis.conf --requirepass yourpassword
        environment:
            - TZ=Asia/Shanghai # 设置时区
        container_name: "compose-redis"
networks:
    # 配置docker network
    app_net:
        driver: bridge
        driver_opts:
          com.docker.network.enable_ipv6: "true"
        ipam:
            config:
                # 子网络
                - subnet: 10.10.0.0/16

注意:

  • version:‘3’ ,需要对应的docker-compose版本,我的是1.25.5,建议参考docker官方文档,docker中文文档安装的是1.2.0,会报错的。
  • docker-compose.yml的格式很重要,不能使用tab缩进,不能使用tab缩进,不能使用tab缩进,(血泪的教训啊),我是第一次使用,踩坑了。
  • volumes 映射主机目录根据自己的实际情况修改就好。PHP7.4的容器配置目录在/usr/local/etc,我跑了N次才确定了完整的配置目录,网上其他地方要么是不映射,要么不完整。看到这里的同学可以点赞了。
  • 关于PHP的扩展在dockerfile中,我在最后还记录了手动安装扩展的命令,喜欢自定义的参考下。
  • PHP7.4的mcrypt扩展是1.0.3版本(大部分网上的老版本是1.0.1,不兼容PHP7.4,会报错),redis扩展是5.1.1或5.2.2版本
  • 关于docker-compose builddocker-compose up -d的执行顺序问题,我是先build,安装扩展,再up -d启动容器。反过来执行,php启动有时会有问题,暂未找到原因,可能是需要重新执行一遍docker-composer up -d的原因。
  • 给小白的指示:将以上内容复制到自定义目录的docker-compose.yml文件(注意空格和缩进),在当前目录执行docker-compose命令。没有docker-compose请自行百度。

效果图:
在这里插入图片描述

下面附上dockerfile的内容(PHP常用扩展):

FROM php:7.4-fpm
RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib \n \
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib \n \
deb http://mirrors.aliyun.com/debian-security buster/updates main \n \
deb-src http://mirrors.aliyun.com/debian-security buster/updates main \n \
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib \n \
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib \n \
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib \n \
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" > /etc/apt/sources.list \
&& apt-get update \
    && apt-get install -y \
    build-essential \
    libmagickcore-dev \
    libmagickwand-dev \
    imagemagick \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libpng-dev \
    libzip-dev \
     && docker-php-ext-configure gd  --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/ \
    && docker-php-ext-install -j$(nproc) gd iconv  pdo_mysql  mysqli bcmath calendar exif gettext sockets dba  pcntl  shmop sysvmsg sysvsem sysvshm \
    && pecl install redis-5.1.1 \
    && pecl install imagick \
    && pecl install mcrypt \
    && docker-php-ext-enable redis imagick mcrypt

我的目录如下:

docker-compose安装PHP7.4(含扩展)+MySQL5.7+Nginx+Redis5.1_第1张图片
更详细的参考这个
docker-compose安装PHP7.4(含扩展)+MySQL5.7+Nginx+Redis5.1_第2张图片
这是比较完整的docker-compose版本了吧,而且比较新并且稳定常用的软件版本(截止到2020-05)。
整理测试不易。帮助到的小伙伴点个赞吧!

#docker手动安装PHP7.4常用扩展命令
docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm

apt-get update && \
apt-get install -y --no-install-recommends libzip-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) zip

apt-get install -y --no-install-recommends libmcrypt-dev && \
rm -r /var/lib/apt/lists/* && \
pecl install mcrypt-1.0.3 && \
docker-php-ext-enable mcrypt

pecl install redis-5.2.2 && docker-php-ext-enable redis

看到最后的都有幸运彩蛋:可以直接从我的github git clone https://github.com/libo0528/docker-compose-lnmpr.git data
码云地址:https://gitee.com/mayun_libo/compose_nmp74/tree/master

你可能感兴趣的:(Docker,php,docker,mysql,centos,linux)