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"
  ]
}
相关推荐
NiNg_1_2341 小时前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行1 小时前
Linux安装Docker以及Docker入门操作
运维·docker·容器
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
汀、人工智能2 小时前
修改Docker默认存储路径,解决系统盘占用90%+问题(修改docker root dir)
docker·容器
吃面不喝汤662 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Leighteen2 小时前
Docker常用命令
docker·容器
丶21363 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
codelife3213 小时前
在Docker容器中执行命令
容器
petaexpress3 小时前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
m0_7417688510 小时前
使用docker的小例子
运维·docker·容器