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映射到左边宿主机端口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
可使用
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容器名称: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来监控进程
- 在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/faillog
CMD ["php-fpm"]
EXPOSE 9000
- 修改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
如果构建失败,请先更换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"
]
}