laravel环境包含nginx,mysql,php7.4,redis
一、安装好docker后pull镜像
1.nginx镜像
docker pull nginx:latest
单独启动容器
docker run --name nginx -p 80:80 -d nginx
2.php镜像
docker pull php:7.4-fpm
3.mysql镜像
docker pull mysql:5.7
4.redis镜像
docker pull redis
二、安装配置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
安装完成后输入 docker-compose -v 可能提示权限不够,就增加权限
chmod +x /usr/local/bin/docker-compose
输入 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映射到左边宿主机端口80ports:- 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/nginxPHP:image: php:7.4-fpmcontainer_name: phpports:- 9000:9000volumes:- /home/www:/var/www/html:rw- /docker/laravelcrm/php:/usr/local/etc/phpMYSQL:image: mysql:5.7container_name: mysqlports:- "3306:3306"volumes:- /docker/laravelcrm/mysql:/etc/mysql/conf.d- /docker/laravelcrm/mysql/logs:/logs- /docker/laravelcrm/mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: rootREDIS:image: redis:latestcontainer_name: redisports:- "6379:6379"volumes:- /docker/laravelcrm/redis/data:/data- /docker/laravelcrm/redis/redis.conf:/etc/redis/redis.conf
此处使用 docker-compose up -d 来启动服务,如果报错可能是某处配置有问题,例如nginx
可使用
docker run nginx
先启动一个nginx容器,然后使用
docker ps -a
来获取nginx容器id,根据容器id再使用
docker exec 9dc06 nginx -t
来查看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容器名称:9000fastcgi_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来监控进程
- 在docker-compose.yml文件同级目录添加一个文件 Dockerfile.php74
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/faillogCMD ["php-fpm"]EXPOSE 9000
- 修改docker-compose.yml文件
#docker-compose.yml
#版本,配置文件使用第三套标准
version: "3"
#字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项
services:nginx:#镜像名称image: nginx:latest#容器名称container_name: nginx#端口映射将右边容器端口80映射到左边宿主机端口80ports:- 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/nginxphp74:build:context: .dockerfile: ./Dockerfile.php74ports:- 9000:9000volumes:- /home/www:/var/www/html:rw- /docker/laravelcrm/php:/usr/local/etc/php- /docker/laravelcrm/php/supervisor:/etc/supervisor/conf.dmysql:image: mysql:5.7container_name: mysqlports:- "3306:3306"volumes:- /docker/laravelcrm/mysql:/etc/mysql/conf.d- /docker/laravelcrm/mysql/logs:/logs- /docker/laravelcrm/mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: rootredis:image: redis:latestcontainer_name: redisports:- "6379:6379"volumes:- /docker/laravelcrm/redis/data:/data- /docker/laravelcrm/redis/redis.conf:/etc/redis/redis.conf
如果构建失败,请先更换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"]
}