Centos7+docker 19.03.8 运行正常,废话不多说。直接上代码,解释看下方。
version: '3'
services:
nginx:
# 容器名称
container_name: "compose-nginx"
image: nginx:latest
restart: always
# 端口映射
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
# 依赖关系 先跑php
depends_on:
- "php"
# 数据卷
volumes:
# 映射主机./conf.d目录到容器/etc/nginx/conf.d目录
- "/data/nginx/conf.d:/etc/nginx/conf.d"
- "/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
- "/data/nginx/html:/usr/share/nginx/html"
- "/data/nginx/log:/var/log/nginx/"
networks:
app_net:
ipv4_address: 10.10.10.2
php:
build: ./php-extension
image: php:7.4
restart: always
ports:
- "9000:9000"
volumes:
- "/data/nginx/html:/var/www/html"
- "/data/php74/etc:/usr/local/etc"
- "/data/php74/log:/var/log/php"
stdin_open: true
tty: true #这两条是防止启动php失败
links:
- "mysql"
networks:
app_net:
ipv4_address: 10.10.10.3
environment:
- TZ=Asia/Shanghai # 设置时区
container_name: "compose-php"
mysql:
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf:/etc/mysql/conf.d
- /data/mysql/logs:/data/mysql/logs
restart: always
# 环境变量
environment:
- TZ=Asia/Shanghai # 设置时区
# mysql密码
- MYSQL_ROOT_PASSWORD=yourpassword
networks:
app_net:
ipv4_address: 10.10.10.1
container_name: "compose-mysql"
redis:
# 指定镜像
image: redis:5
restart: always
ports:
# 端口映射
- 6379:6379
volumes:
# 目录映射
- "/data/redis/conf:/usr/local/etc/redis"
- "/data/redis/data:/data"
command:
# 执行的命令
redis-server /usr/local/etc/redis/redis.conf --requirepass yourpassword
environment:
- TZ=Asia/Shanghai # 设置时区
container_name: "compose-redis"
networks:
# 配置docker network
app_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
config:
# 子网络
- subnet: 10.10.0.0/16
注意:
- version:‘3’ ,需要对应的docker-compose版本,我的是1.25.5,建议参考docker官方文档,docker中文文档安装的是1.2.0,会报错的。
- docker-compose.yml的格式很重要,不能使用tab缩进,不能使用tab缩进,不能使用tab缩进,(血泪的教训啊),我是第一次使用,踩坑了。
- volumes 映射主机目录根据自己的实际情况修改就好。PHP7.4的容器配置目录在
/usr/local/etc
,我跑了N次才确定了完整的配置目录,网上其他地方要么是不映射,要么不完整。看到这里的同学可以点赞了。 - 关于PHP的扩展在
dockerfile
中,我在最后还记录了手动安装扩展的命令,喜欢自定义的参考下。 - PHP7.4的
mcrypt扩展是1.0.3版本
(大部分网上的老版本是1.0.1,不兼容PHP7.4,会报错),redis扩展是5.1.1或5.2.2版本
- 关于
docker-compose build
和docker-compose up -d
的执行顺序问题,我是先build,安装扩展,再up -d启动容器。反过来执行,php启动有时会有问题,暂未找到原因,可能是需要重新执行一遍docker-composer up -d
的原因。 - 给小白的指示:将以上内容复制到自定义目录的
docker-compose.yml
文件(注意空格和缩进),在当前目录执行docker-compose命令。没有docker-compose请自行百度。
效果图:
下面附上dockerfile的内容(PHP常用扩展):
FROM php:7.4-fpm
RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib \n \
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib \n \
deb http://mirrors.aliyun.com/debian-security buster/updates main \n \
deb-src http://mirrors.aliyun.com/debian-security buster/updates main \n \
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib \n \
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib \n \
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib \n \
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" > /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y \
build-essential \
libmagickcore-dev \
libmagickwand-dev \
imagemagick \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
libzip-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 \
&& pecl install redis-5.1.1 \
&& pecl install imagick \
&& pecl install mcrypt \
&& docker-php-ext-enable redis imagick mcrypt
我的目录如下:
更详细的参考这个
这是比较完整的docker-compose版本了吧,而且比较新并且稳定常用的软件版本(截止到2020-05)。
整理测试不易。帮助到的小伙伴点个赞吧!
#docker手动安装PHP7.4常用扩展命令
docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm
apt-get update && \
apt-get install -y --no-install-recommends libzip-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) zip
apt-get install -y --no-install-recommends libmcrypt-dev && \
rm -r /var/lib/apt/lists/* && \
pecl install mcrypt-1.0.3 && \
docker-php-ext-enable mcrypt
pecl install redis-5.2.2 && docker-php-ext-enable redis
看到最后的都有幸运彩蛋:可以直接从我的github git clone https://github.com/libo0528/docker-compose-lnmpr.git data
码云地址:https://gitee.com/mayun_libo/compose_nmp74/tree/master