• docker-compose 搭建laravel环境


    laravel环境包含nginx,mysql,php7.4,redis

    一、安装好docker后pull镜像

    1.nginx镜像
    docker pull nginx:latest
    
    • 1

    单独启动容器
    docker run --name nginx -p 80:80 -d nginx

    2.php镜像
    docker pull php:7.4-fpm
    
    • 1
    3.mysql镜像
    docker pull mysql:5.7
    
    • 1
    4.redis镜像
    docker pull redis
    
    • 1

    二、安装配置docker-compose

    • 安装docker-compose
    curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    • 1

    安装完成后输入 docker-compose -v 可能提示权限不够,就增加权限

    chmod +x /usr/local/bin/docker-compose
    
    • 1

    输入 dcoker-compose -v 显示版本正常即可

    • 编写docker-compose.yml 配置文件,在项目目录中新建一个docker-compose.yml文件
      我的镜像列表如下
      在这里插入图片描述
    #docker-compose.yml
    #版本,配置文件使用第三套标准
    version: "3"
    #字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项
    services:
    
      Nginx:
        #镜像名称
        image: nginx:latest
        #容器名称
        container_name: nginx
        #端口映射将右边容器端口80映射到左边宿主机端口80
        ports:
          - 80:80
        #目录挂载,将宿主机/home/www/laravelcrm映射到ngxin的/usr/share/nginx/html目录
        #可以直接使用 [主机:容器]格式,或者使用[主机:容器:ro]格式,后者对于容器来说,数据卷是只读的
        volumes:
          - /home/www:/var/www/html:ro
          - /docker/laravelcrm/nginx/conf:/etc/nginx/conf.d:ro
          - /docker/laravelcrm/nginx/log:/var/log/nginx
    
      PHP:
        image: php:7.4-fpm
        container_name: php
        ports:
          - 9000:9000
        volumes:
          - /home/www:/var/www/html:rw
          - /docker/laravelcrm/php:/usr/local/etc/php
    
      MYSQL:
        image: mysql:5.7
        container_name: mysql
        ports:
          - "3306:3306"
        volumes:
          - /docker/laravelcrm/mysql:/etc/mysql/conf.d
          - /docker/laravelcrm/mysql/logs:/logs
          - /docker/laravelcrm/mysql/data:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: root
        
      REDIS:
        image: redis:latest
        container_name: redis
        ports:
          - "6379:6379"
        volumes:
          - /docker/laravelcrm/redis/data:/data
          - /docker/laravelcrm/redis/redis.conf:/etc/redis/redis.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    此处使用 docker-compose up -d 来启动服务,如果报错可能是某处配置有问题,例如nginx
    可使用

    docker run nginx
    
    • 1

    先启动一个nginx容器,然后使用

    docker ps -a
    
    • 1

    来获取nginx容器id,根据容器id再使用

    docker exec 9dc06 nginx -t
    
    • 1

    来查看ngxin使用的默认配置,然后去修改映射配置文件

    server {
            listen       80;
            server_name  localhost;
     
            location / {
    		# 注意 这里写的是nginx容器中的目录
                root   /var/www/html/laravelcrm/public;
                index  index.html index.htm index.php;
                if ( !-e $request_filename ) {
                    rewrite ^/(.*)? /index.php?/$1 last;
                    break;
                }
            }
     
            location ~ \.php$ {
    			#php是container_name容器名称:9000
                fastcgi_pass   php:9000;
                fastcgi_index  index.php;
    			#此处必须改为root的配置目录
    			fastcgi_param  SCRIPT_FILENAME /var/www/html/laravelcrm/public$fastcgi_script_name;
    			#fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
    
    	access_log /var/log/nginx/laravelcrm.log main;
    	error_log /var/log/nginx/laravelcrm.error.log;
            
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    使用 docker-compose up -d 启动,或者docker-compose down 停止服务,
    注意,修改配置文件必须重启服务
    此时运行phpinfo()会发现 Loaded Configuration File (none) ,没有php.ini,并且官方库缺少很多扩展,比较麻烦。所以这里我们使用dockerFile来自定义php,并且安装一个supervisor来监控进程

    1. 在docker-compose.yml文件同级目录添加一个文件 Dockerfile.php74
    FROM php:7.4-fpm
    MAINTAINER Qin >
    
    RUN apt-get update -yqq && \
        apt-get install -y apt-utils openssl libssl-dev && \
        pecl channel-update pecl.php.net && \
        apt-get install -y git && \
        curl -sS https://getcomposer.org/installer | php && \
        mv composer.phar /usr/bin/composer && \
        composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    
    # Install the zip mysqli pdo_mysql extension
    RUN apt-get install libzip-dev zip unzip -y && \
        docker-php-ext-configure zip --with-libzip && \
        docker-php-ext-install zip mysqli pdo_mysql
    
    # Install gd iconv extension
    RUN apt-get update && apt-get install -y \
          libfreetype6-dev \
          libjpeg62-turbo-dev \
          libpng-dev \
        && docker-php-ext-install -j$(nproc) iconv \
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
        && docker-php-ext-install -j$(nproc) gd
    
    # Install redis extension
    RUN pecl install redis \
        &&  rm -rf /tmp/pear \
        &&  docker-php-ext-enable redis
    
    # Install imagick
    RUN apt-get install -y libmagickwand-dev imagemagick && \
        pecl install imagick && \
        docker-php-ext-enable imagick
    
    # Install pcntl
    RUN docker-php-ext-install pcntl;
    
    # Install opcache
    # RUN docker-php-ext-install opcache
    
    # Install swoole
    # RUN pecl install swoole && docker-php-ext-enable swoole
    
    # Install supervisor
    RUN apt-get update &&\
        apt-get install -y supervisor &&\
        touch /var/run/supervisor.sock &&\
        chmod 777 /var/run/supervisor.sock &&\
        unlink /var/run/supervisor.sock
    
    # Clean up
    RUN apt-get clean && \
        rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
        rm /var/log/lastlog /var/log/faillog
    
    CMD ["php-fpm"]
    
    EXPOSE 9000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    1. 修改docker-compose.yml文件
    #docker-compose.yml
    #版本,配置文件使用第三套标准
    version: "3"
    #字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项
    services:
    
      nginx:
        #镜像名称
        image: nginx:latest
        #容器名称
        container_name: nginx
        #端口映射将右边容器端口80映射到左边宿主机端口80
        ports:
          - 80:80
        #目录挂载,将宿主机/home/www/laravelcrm映射到ngxin的/usr/share/nginx/html目录
        #可以直接使用 [主机:容器]格式,或者使用[主机:容器:ro]格式,后者对于容器来说,数据卷是只读的
        volumes:
          - /home/www:/var/www/html:ro
          - /docker/laravelcrm/nginx/conf:/etc/nginx/conf.d:ro
          - /docker/laravelcrm/nginx/log:/var/log/nginx
    
      php74:
        build:
          context: .
          dockerfile: ./Dockerfile.php74
        ports:
          - 9000:9000
        volumes:
          - /home/www:/var/www/html:rw
          - /docker/laravelcrm/php:/usr/local/etc/php
          - /docker/laravelcrm/php/supervisor:/etc/supervisor/conf.d
      mysql:
        image: mysql:5.7
        container_name: mysql
        ports:
          - "3306:3306"
        volumes:
          - /docker/laravelcrm/mysql:/etc/mysql/conf.d
          - /docker/laravelcrm/mysql/logs:/logs
          - /docker/laravelcrm/mysql/data:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: root
        
      redis:
        image: redis:latest
        container_name: redis
        ports:
          - "6379:6379"
        volumes:
          - /docker/laravelcrm/redis/data:/data
          - /docker/laravelcrm/redis/redis.conf:/etc/redis/redis.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    如果构建失败,请先更换docker镜像源
    /etc/docker/daemon.json

    {
      "registry-mirrors": [
        "https://9n6c9xa9.mirror.aliyuncs.com",
    	"https://reg-mirror.qiniu.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://cr.console.aliyun.com",
        "https://mirror.ccs.tencentyun.com"
      ]
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    短视频矩阵系统源码--源头技术独立自研框架开发
    阿里分布式事务seata
    Python 小爬虫入门 -- 爬取专栏文章标题保存到 CSV 文件中
    Java项目:JSP蛋糕甜品店管理系统
    un7.29:Linux——centos7防火墙开放端口及常用命令。
    Spring Boot技术知识点:Bean Validation
    芒果改进目录一览|改进YOLOv5、YOLOv7等YOLO模型全系列目录
    84-MongoDB高级介绍
    C++实现集群聊天服务器
    搞定项目管理,只需要这6张思维导图
  • 原文地址:https://blog.csdn.net/sang521jia/article/details/136282886