docker-compose 部署 php + nginx + mysql + redis
1,在開動(dòng)之前首先創(chuàng)建php + nginx + mysql + redis的配置和數(shù)據(jù)存儲(chǔ)路徑,大概是下圖的樣子


// 因?yàn)槟夸浫空归_會(huì)導(dǎo)致截圖不完整,我在這里介紹一下每個(gè)目錄的功能
mysql
? ?conf: 必要目錄,使用默認(rèn)配置即可,mysql8配置密碼加密方式會(huì)用到
? ?data: 必要目錄,數(shù)據(jù)存儲(chǔ)路徑
? ?logs: 必要目錄,日志路徑
nginx
? ?conf: 必要目錄,下面會(huì)放 nginx.conf
? ? ? ?nginx.conf: 必要文件
? ?conf.d: 不必要目錄,相當(dāng)于vhost
? ? ? ?www.conf: 你的站點(diǎn)配置
? ?log: 必要目錄,日志路徑
php
? ?etc: 必要目錄,配置項(xiàng)都在這
? ? ? ?php: 必要目錄。ini文件要放這里
? ? ? ? ? ?php.ini: 必要文件,php配置文件
? ? ? ?php-fpm.d: 必要目錄,fpm非通用配置文件目錄
? ? ? ? ? ?www.conf: 非必要文件,不同用戶不同端口不同任務(wù)
? ? ? ?php-fpm.conf: 必要文件,這是主要配置文件
? ?extension: 必要目錄,php定制化目錄
? ? ? ?Dockerfile: 必要文件,這里將定制你需要的php,必要的原因是docker-compose會(huì)從這build
? ?log: 必要目錄,日志路徑
redis
? ?conf: 必要目錄,配置文件目錄
? ? ? ?redis.conf: 必要文件,配置文件
? ?data: 必要目錄,持久化文件所在目錄
docker-compose.yaml: 必要文件 ? ? ? ? ? ?
?2,創(chuàng)建好目錄后,我們先來(lái)定制我們的php吧,這個(gè)Dockerfile你可以先build了,因?yàn)樵赿ocker-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// 各種依賴庫(kù)和擴(kuò)展
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用戶不同會(huì)導(dǎo)致你的服務(wù)起不來(lái)
RUN groupadd www && useradd -g www www// 如果你需要?jiǎng)e的擴(kuò)展,還可以再加
3,好了,開始制作一下docker-compose.yaml吧
version: '3'
services:
?php:
? ?container_name: "php74"
// 可以直接用php鏡像,但是出來(lái)可能缺東西,而且環(huán)境也不完整// ? ?image: php:7.4
? ?build: ./docker-manager/php/extension // 這個(gè)目錄放上我們剛才做好的定制化php的Dockerfile
? ?ports:
? ? ?- "9000:9000" // fpm 端口// ? ?restart: always
? ?volumes:
? ? ?- ./docker-manager/php/etc:/usr/local/etc // 映射配置文件
? ? ?- ./docker-manager/php/log:/var/log/php // 日志文件映射 ? ? ?// 內(nèi)部邏輯:這個(gè)必須加,因?yàn)閚ginx將請(qǐng)求轉(zhuǎn)發(fā)給php后,實(shí)際上是php去執(zhí)行了腳本解析
? ? ?- /Users/guoyi/php/src:/www // 項(xiàng)目目錄,我所有的php項(xiàng)目都在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服務(wù)
? ?networks:
? ? ?app_net:
? ? ? ?ipv4_address: 10.10.10.3 // 分配ip
? ?environment:
? ? ? ?- TZ=Asia/Shanghai # 設(shè)置時(shí)區(qū)
?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 // 數(shù)據(jù)目錄
? ? ?- ./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 // 數(shù)據(jù)目錄
? ?command:
? ? ?redis-server /usr/local/etc/redis/redis.conf --requirepass 123456 // 啟動(dòng)redis
? ?environment:
? ? ?- TZ=Asia/Shanghai
networks: // 定義網(wǎng)絡(luò)
?app_net:
? ?driver: bridge
? ?driver_opts:
? ? ?com.docker.network.enable_ipv6: "true"
? ?ipam:
? ? ?config:
? ? ? ?- subnet: 10.10.0.0/16
4,到此,環(huán)境相關(guān)的東西就都準(zhǔn)備好了,我們只需要把我們的項(xiàng)目掛載到php容器下面的volumes下面,那就可以直接進(jìn)行開發(fā)調(diào)試了。
https://www.dianjilingqu.com/441648.html