docker-compose 搭建laravel环境

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

一、安装好docker后pull镜像

1.nginx镜像
bash 复制代码
docker pull nginx:latest

单独启动容器

docker run --name nginx -p 80:80 -d nginx

2.php镜像
bash 复制代码
docker pull php:7.4-fpm
3.mysql镜像
bash 复制代码
docker pull mysql:5.7
4.redis镜像
bash 复制代码
docker pull redis

二、安装配置docker-compose

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

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

bash 复制代码
chmod +x /usr/local/bin/docker-compose

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

  • 编写docker-compose.yml 配置文件,在项目目录中新建一个docker-compose.yml文件
    我的镜像列表如下
yaml 复制代码
#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

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

可使用

bash 复制代码
docker run nginx

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

bash 复制代码
docker ps -a

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

bash 复制代码
docker exec 9dc06 nginx -t

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

powershell 复制代码
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;
        
}

使用 docker-compose up -d 启动,或者docker-compose down 停止服务,

注意,修改配置文件必须重启服务

此时运行phpinfo()会发现 Loaded Configuration File (none) ,没有php.ini,并且官方库缺少很多扩展,比较麻烦。所以这里我们使用dockerFile来自定义php,并且安装一个supervisor来监控进程

  1. 在docker-compose.yml文件同级目录添加一个文件 Dockerfile.php74
yaml 复制代码
FROM php:7.4-fpm
MAINTAINER Qin <wuhanqinb@gmail.com>

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. 修改docker-compose.yml文件
yaml 复制代码
#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

如果构建失败,请先更换docker镜像源

/etc/docker/daemon.json

bash 复制代码
{
  "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"
  ]
}
相关推荐
EAIReport5 小时前
企业级报表自动化:基于Docker的部署实践
运维·docker·自动化
tianyuanwo7 小时前
多平台容器化RPM构建流水线全指南:Fedora、CentOS与Anolis OS
linux·运维·容器·centos·rpm
敲上瘾9 小时前
【探索实战】:Kurator分布式统一应用分发平台的全面解析与实践指南
分布式·容器·kubernetes·serverless
cui_win10 小时前
Docker Compose 部署一个完整的Prometheus监控告警系统
docker·容器·prometheus
ALex_zry14 小时前
Docker Compose运维技术实战分享:从安装到架构解析
运维·docker·架构
roman_日积跬步-终至千里19 小时前
【Docker】Docker Stop 后到底发生了什么?——从信号机制到优雅停机
运维·docker·容器
z***62620 小时前
Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像
docker·容器·tomcat
Connie145121 小时前
记一次K8s故障告警排查(Grafna告警排查)
云原生·容器·kubernetes·grafana
❀͜͡傀儡师1 天前
Docker部署视频下载器
docker·容器·音视频
热爱学习的小怪兽1 天前
docker的一些常用指令
运维·docker·容器