nginx+php-fpm docker镜像合二为一

时间:2024-05-21 20:43:11

一、概述

在上一篇文章介绍了nginx+php-fpm,链接如下:

https://www.cnblogs.com/xiao987334176/p/12918413.html

 

nginx和php-fpm是2个独立的镜像,在实际环境部署过程中,发现配置比较麻烦,排错比较耗费实际。

因此,需要将nginx和php-fpm 这2个镜像合并为一个。

 

二、正式操作

目录结构

新建目录/opt/nginx_php,目录结构如下:

./
├── default
├── dockerfile
├── README.md
└── run.sh

 

default

nginx+php-fpm docker镜像合二为一nginx+php-fpm docker镜像合二为一
server {
  listen 80;
  server_name localhost;

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;

  location / {
    try_files $uri $uri/ =404;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
View Code

 

dockerfile

nginx+php-fpm docker镜像合二为一nginx+php-fpm docker镜像合二为一
FROM crunchgeek/php-fpm:7.3-r7
ADD default /
ADD run.sh /
RUN apt-get update && \
    apt-get install -y nginx net-tools && \
    apt-get clean all && \
    mv /default /etc/nginx/sites-available/ && \
    chmod 755 /run.sh

EXPOSE 80
EXPOSE 9000
ENTRYPOINT ["/run.sh"]
View Code

 

README.md

nginx+php-fpm docker镜像合二为一nginx+php-fpm docker镜像合二为一
# 说明
nginx+php-fpm

# 版本说明
```bash
nginx 1.14.2
PHP 7.3.17
```

# php-fpm模块说明
默认已经安装如下模块
```bash
apc
apcu
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
ds
enchant
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
igbinary
imagick
imap
interbase
intl
json
ldap
libxml
mbstring
memcache
memcached
mongodb
msgpack
mysqli
mysqlnd
newrelic
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
pdo_pgsql
pdo_sqlite
pdo_sqlsrv
pgsql
Phar
posix
pspell
readline
recode
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
ssh2
standard
sysvmsg
sysvsem
sysvshm
test
tidy
tokenizer
wddx
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib
```

# 构建镜像
```bash
docker build -t nginx_php:1 .
```

# 运行
```bash
docker run -d -it --restart=always --name nginx_php -p 80:80 nginx_php:1
```

# 说明
```bash
default 是示例nginx配置文件,可根据实际情况修改
```

# phpinfo
将`test.php`
```php
<?php
   phpinfo();
?>
```
拷贝到容器目录`/var/www/html`

通过以下url即可访问
```bash
http://ip地址/test.php
```

# 注意
phpinfo不要暴露在公网中访问,黑客知道php版本后,会通过漏洞攻击。

<br/>
<br/>
Copyright (c) 2020-present, xiao You
View Code

 

run.sh

nginx+php-fpm docker镜像合二为一nginx+php-fpm docker镜像合二为一
#!/bin/bash

# 后台启动
/usr/local/sbin/php-fpm -D

# 关闭后台启动,hold住进程
nginx -g 'daemon off;'
View Code

 

构建镜像

cd /opt/nginx_php
docker build -t nginx_php:1 .

 

运行

docker run -d -it --restart=always --name nginx_php -p 80:80 nginx_php:1

 

访问页面

http://ip地址

效果如下:

nginx+php-fpm docker镜像合二为一

 

 

phpinfo页面

新建test.php

cd /opt/nginx_php
vi test.php

内容如下:

<?php
   phpinfo();
?>

 

拷贝到容器中

docker cp test.php nginx_php:/var/www/html/

 

访问test.php

http://ip地址/test.php

效果如下:

nginx+php-fpm docker镜像合二为一