基于Docker统一PHP开发环境
背景
- 团队内每个开发人员PHP版本不一致
- 本地开发环境与生产环境不一致,环境不一致易导致生产问题
- 每次新人过来安装PHP环境耗时比较长且不可控
目标
- 所有开发人员环境保持一致
- 开发环境与生产环境保持一致
- 能快速安装轻量级的开发环境
思路
- 将标准PHP环境打包静docker镜像中,所有开发成员代码运行在容器里面,本地不需要安装开发环境(除IDE工具外)
- 容器里面提供sshd服务,使开发者能够通过ssh登陆并传输文件(类似轻量级虚拟机,在容器启动后利用sftp远程同步文件比较有用)
构造环境镜像
-
版本
linux:alpine3.13
PHP: 7.4 -
准备文件(在后面国建镜像有用)
nginx主配置文件:nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
#tcp_nopush on;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
include /etc/nginx/conf.d/*.conf;
}
镜像入口文件(用于启动镜像服务): entrypoint.sh
#!/bin/sh
/usr/sbin/sshd -D &
nginx &
php-fpm
- 镜像Dockerfile
在有了上面两个文件后,我们就可以开始构建我们的环境镜像了
# 采用基于alpine的php-fpm镜像(alpine为一个轻量级的linux镜像)
FROM amd64/php:7.4-fpm-alpine3.13
# 复制PHP配置文件
RUN cp "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# 由于仓库镜像网络问题,换成阿里云资源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装php扩展(可以根据自己的需要安装所需PHP扩展)
# install-php-extensions使用文档:
# https://github.com/mlocati/docker-php-extension-installer
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x