php-nignx docker集成环境
步骤:
-
1:新建一个目录如phpdockerfile
-
2:在新目录下建立Dockerfile文件和supervisord.conf文件【用来启动多个进程,Nginx和php-fpm】
Dockerfile内容
FROM centos:centos8
ARG PHP_VERSION
RUN yum install -y wget
#改镜像源
#RUN sed -i 's/http:\/\/mirror.centos.org/https:\/\/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo
#RUN sed -i 's/\/run\/php-fpm\/www.sock/127.0.0.1:9000/g' /etc/php-fpm.d/www.conf
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum makecache
RUN yum install epel-release -y
#默认是php7.2
#RUN dnf -y install epel-release && dnf -y install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
#指定PHP版本
RUN yum -y module reset php && yum -y module enable php:7.4
RUN yum install -y php php-devel\
php-bcmath php-gd php-json php-zip php-xml php-mysqli php-pdo_mysql php-gettext php-mbstring
# Composer
RUN php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" && php composer-setup.php && mv composer.phar /usr/local/bin/composer
#COPY composer /usr/local/bin/composer
RUN chmod 755 /usr/local/bin/composer
RUN yum install -y git
RUN yum install -y nginx
RUN yum install -y supervisor
RUN yum install -y make
RUN yum install -y openssl
RUN yum install -y openssl-devel
RUN yum install -y php-pear
#下载redis,
RUN wget http://pecl.php.net/get/redis-5.3.4.tgz && tar -zxvf redis-5.3.4.tgz && cd redis-5.3.4 && phpize && ./configure --with-php-config=/usr/bin/php-config && make && make install
#写入PHPINI配置
RUN touch /etc/php.d/30-redis.ini && echo "extension=redis.so" > /etc/php.d/30-redis.ini
#更改端口,非UNinx socket
RUN sed -i 's/\/run\/php-fpm\/www.sock/127.0.0.1:9000/g' /etc/php-fpm.d/www.conf
#这个配置有问题
RUN echo "" > /etc/nginx/default.d/php.conf
RUN mkdir /etc/supervisord/
RUN mkdir /run/php-fpm/
COPY supervisord.conf /etc/supervisord/
# Install swoole
RUN curl -sSL "https://codeload.github.com/swoole/swoole-src/tar.gz/v4.5.1" | tar -xz \
&& cd swoole-src-4.5.1 && phpize \
&& ./configure --enable-mysqlnd --enable-openssl --enable-http2 \
&& make && make install \
&& echo "extension=swoole.so" > /etc/php.d/30-swoole.ini \
&& echo "swoole.use_shortname = 'off'" >> /etc/php.d/30-swoole.ini
#&& cd ../ && rm -rf swoole-src-4.5.1
#安装 kfaka
RUN cd ~
RUN git clone https://hub.fastgit.org/edenhill/librdkafka.git
RUN cd librdkafka && ./configure && make && make install
RUN cd ~
RUN git clone https://hub.fastgit.org/arnaud-lb/php-rdkafka.git
RUN cd php-rdkafka/ && phpize && ./configure --with-php-config=/usr/bin/php-config && make && make install
RUN echo "extension=rdkafka.so" > /etc/php.d/30-rdkafka.ini
#安装 amqp
RUN cd ~
RUN yum install -y cmake
RUN wget https://hub.fastgit.org/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz
RUN tar -zxvf rabbitmq-c-0.7.1.tar.gz
RUN cd rabbitmq-c-0.7.1 && ./configure --prefix=/usr/local/rabbitmq-c-0.7.1 && make && make install
RUN cd ~
RUN wget https://hub.fastgit.org/php-amqp/php-amqp/archive/refs/tags/v1.10.2.tar.gz \
&& tar -zxvf v1.10.2.tar.gz \
&& cd php-amqp-1.10.2 && phpize \
&& ./configure --with-php-config=/usr/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.7.1 \
&& make && make install
RUN echo "extension=amqp.so" > /etc/php.d/30-amqp.ini
RUN cd ~
# install amqp
EXPOSE 80
EXPOSE 9000
WORKDIR /var/www/html
CMD ["supervisord", "-c", "/etc/supervisord/supervisord.conf"]
supervisord.conf内容
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/var/run/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisor/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
[program:nginx]
command=/usr/sbin/nginx
[program:php-fpm]
command=/usr/sbin/php-fpm
- 3:在phpdockerfile目录下构建docker build -t local/php72 .
- 4:设置自己的Nginx配置文件,确认自己的项目目录。【PS:镜像里装了composer可以在docker容器里执行composer,如果本机没安装composer】
可以把多个项目放在一个目录下来挂载到docker,多个Nginx 的server配置也可以写在一个文件里,方便自己修改。
启动docker:docker run -itd --name php72-nginx -p 9000:9000 -p 80:80 -v 自己的项目路径/:/var/www/html/ -v 自己的Nginx配置/nginxhost/:/etc/nginx/conf.d local/php72