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 <[email protected]>

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"
  ]
}
相关推荐
川石教育2 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程
THMAIL4 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
两点王爷5 小时前
IDEA中springboot项目中连接docker
spring boot·docker·intellij-idea
家庭云计算专家5 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器
云手机管家7 小时前
CDN加速对云手机延迟的影响
运维·服务器·网络·容器·智能手机·矩阵·自动化
孤的心了不冷7 小时前
【Docker】CentOS 8.2 安装Docker教程
linux·运维·docker·容器·eureka·centos
头疼的程序员9 小时前
docker学习与使用(概念、镜像、容器、数据卷、dockerfile等)
学习·docker·容器
IT小郭.9 小时前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
淡水猫.9 小时前
hbit资产收集工具Docker(笔记版)
运维·docker·容器
水淹萌龙14 小时前
k8s 中使用 Service 访问时NetworkPolicy不生效问题排查
云原生·容器·kubernetes