我是靠谱客的博主 傲娇饼干,最近开发中收集的这篇文章主要介绍docker-compose 部署 php + nginx + mysql + redis,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1,在开动之前首先创建php + nginx + mysql + redis的配置和数据存储路径,大概是下图的样子
// 因为目录全部展开会导致截图不完整,我在这里介绍一下每个目录的功能
mysql
conf: 必要目录,使用默认配置即可,mysql8配置密码加密方式会用到
data: 必要目录,数据存储路径
logs: 必要目录,日志路径
nginx
conf: 必要目录,下面会放 nginx.conf
nginx.conf: 必要文件
conf.d: 不必要目录,相当于vhost
www.conf: 你的站点配置
log: 必要目录,日志路径
php
etc: 必要目录,配置项都在这
php: 必要目录。ini文件要放这里
php.ini: 必要文件,php配置文件
php-fpm.d: 必要目录,fpm非通用配置文件目录
www.conf: 非必要文件,不同用户不同端口不同任务
php-fpm.conf: 必要文件,这是主要配置文件
extension: 必要目录,php定制化目录
Dockerfile: 必要文件,这里将定制你需要的php,必要的原因是docker-compose会从这build
log: 必要目录,日志路径
redis
conf: 必要目录,配置文件目录
redis.conf: 必要文件,配置文件
data: 必要目录,持久化文件所在目录
docker-compose.yaml: 必要文件
2,创建好目录后,我们先来定制我们的php吧,这个Dockerfile你可以先build了,因为在docker-compose要直接用,镜像名字随意,我这里用php74
// 该装的都装上
// 版本7.4
FROM php:7.4-fpm
// composer
RUN curl -sS https://getcomposer.org/installer | php
&& mv composer.phar /usr/bin/composer && chmod +x /usr/bin/composer
// 各种依赖库和扩展
RUN apt-get update
&& apt-get install -y
build-essential
libmagickcore-dev
libmagickwand-dev
imagemagick
libfreetype6-dev
libmcrypt-dev
libpng-dev
libzip-dev
libwebp-dev
&& docker-php-ext-configure gd --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/
&& docker-php-ext-install -j$(nproc) gd iconv pdo_mysql mysqli bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm zip
&& pecl install redis-5.1.1
&& pecl install imagick
&& pecl install mcrypt
&& docker-php-ext-enable redis imagick mcrypt
// 这句很重要,如果和你的nginx用户不同会导致你的服务起不来
RUN groupadd www && useradd -g www www
// 如果你需要别的扩展,还可以再加
3,好了,开始制作一下docker-compose.yaml吧
version: '3'
services:
php:
container_name: "php74"
// 可以直接用php镜像,但是出来可能缺东西,而且环境也不完整
// image: php:7.4
build: ./docker-manager/php/extension // 这个目录放上我们刚才做好的定制化php的Dockerfile
ports:
- "9000:9000" // fpm 端口
// restart: always
volumes:
- ./docker-manager/php/etc:/usr/local/etc // 映射配置文件
- ./docker-manager/php/log:/var/log/php // 日志文件映射
// 内部逻辑:这个必须加,因为nginx将请求转发给php后,实际上是php去执行了脚本解析
- /Users/guoyi/php/src:/www // 项目目录,我所有的php项目都在src下面,只要去增加nginx配置就可以了,很方便。
stdin_open: true // stdin_open configures service containers to run with an allocated stdin.
tty: true // tty configure service container to run with a TTY.
links:
- "mysql" // 链接mysql服务
networks:
app_net:
ipv4_address: 10.10.10.3 // 分配ip
environment:
- TZ=Asia/Shanghai # 设置时区
nginx:
container_name: "nginx"
image: nginx:latest
// build: ./docker-manager/nginx // 也可以定制哟
restart: always
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
depends_on:
- "php" // nginx必须依赖php的,所以要用depends_on
links:
- "php:php74" // 链接php
volumes:
- ./docker-manager/nginx/conf.d:/etc/nginx/conf.d // 子配置文件
- ./docker-manager/nginx/conf/nginx.conf:/etc/nginx/nginx.conf // 主配置文件
- ./docker-manager/nginx/log:/var/log/nginx/ // 日志
networks:
app_net:
ipv4_address: 10.10.10.2 // 分配ip
mysql:
container_name: "mylsql"
image: mysql:5.7
ports:
- "13306:3306"
volumes:
- ./docker-manager/mysql/data:/var/lib/mysql // 数据目录
- ./docker-manager/mysql/conf:/etc/mysql/conf.d // 配置文件
- ./docker-manager/mysql/logs:/data/mysql/logs // 日志
restart: always
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456 // 初始化密码
networks:
app_net:
ipv4_address: 10.10.10.1 // ip
redis:
container_name: redis
image: redis:5
restart: always
ports:
- "6379:6379"
volumes:
- ./docker-manager/redis/conf:/usr/local/etc/redis // 配置文件
- ./docker-manager/redis/data:/data // 数据目录
command:
redis-server /usr/local/etc/redis/redis.conf --requirepass 123456 // 启动redis
environment:
- TZ=Asia/Shanghai
// 勘误:redis如果不在同一网段,会出现不能访问的问题
networks:
app_net:
ipv4_address: 10.10.10.4
networks: // 定义网络
app_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
config:
- subnet: 10.10.0.0/16
4,到此,环境相关的东西就都准备好了,我们只需要把我们的项目挂载到php容器下面的volumes下面,那就可以直接进行开发调试了。
最后
以上就是傲娇饼干为你收集整理的docker-compose 部署 php + nginx + mysql + redis的全部内容,希望文章能够帮你解决docker-compose 部署 php + nginx + mysql + redis所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复