技术归档文章随笔一句话导航搜索关于

使用 Docker 容器部署 PHP 网站

日期: 2025-03-24 分组: Docker 标签: DockerPHP 3分钟 522字

今天朋友给我讲给客户部署 PHP 网站一直遇到问题让我帮助,我看了下系统环境,宝塔面板,好几个 Nginx 程序,还有 Apache 服务器,乱七八糟的什么都有,各个服务器占用 80 443 端口,PHP 环境也有问题,然后我觉得也别折腾主机环境了,把程序该卸载卸载了,进程该结束结束了,使用 Docker 部署吧,把环境隔离开,然后就是整的这些东西。

Terminal window
1
# 所有文件都在 /data/docker 目录下
2
3
nginx/
4
----ssl/
5
--------域名证书
6
----nginx.conf
7
php/
8
----web/
9
--------网站项目文件

构建 PHP 镜像

PHP 的官方镜像少了很多拓展,所以自己构建一个包含程序所有依赖的镜像。

dockerfile 文件

Terminal window
1
# 使用PHP官方镜像作为基础依赖
2
FROM php:7.4-fpm
3
# 更改软件源为清华源,为了后续的安装加速,PHP官方镜像使用Debian作为基础镜像
4
# 这里安装了gd mysqli pdo pdo_mysql这几个拓展
5
# 并且安装这些拓展的环境依赖
6
RUN apt install apt-transport-https ca-certificates && \
7
echo > /etc/apt/sources.list && \
8
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
9
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
10
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
11
apt-get update && apt-get install -y \
12
libpng-dev \
13
libjpeg-dev \
14
libfreetype6-dev \
15
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
1 collapsed line
16
&& docker-php-ext-install gd mysqli pdo pdo_mysql

使用 docker build 构建镜像

Terminal window
1
docker build image:tag .

nginx 配置文件和域名证书

nginx.conf 文件

Terminal window
1
user nginx;
2
worker_processes auto;
3
4
error_log /var/log/nginx/error.log;
5
pid /run/nginx.pid;
6
7
events {
8
worker_connections 1024;
9
}
10
11
http {
12
include /etc/nginx/mime.types;
13
default_type application/octet-stream;
14
15
server {
17 collapsed lines
16
listen 443 ssl;
17
18
root /var/www/html;
19
index index.php index.html;
20
ssl_certificate /etc/nginx/ssl/domain.com.pem;
21
ssl_certificate_key /etc/nginx/ssl/domain.com.key;
22
location / {
23
try_files $uri $uri/ =404;
24
}
25
26
location ~ \.php$ {
27
include fastcgi_params;
28
fastcgi_pass app-php:9000;
29
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
30
}
31
}
32
}

使用 docker-compose 管理应用程序容器编排

docker-compose.yml 文件

1
version: "3.8"
2
services:
3
app-nginx:
4
image: nginx:latest
5
container_name: app-nginx
6
ports:
7
- "38888:443"
8
- "38887:80"
9
- "443:443"
10
- "80:80"
11
volumes:
12
- /data/docker/nginx/ssl:/etc/nginx/ssl
13
- /data/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
14
- /data/docker/php/web:/var/www/html
15
depends_on:
32 collapsed lines
16
- app-php
17
networks:
18
- app-network
19
20
app-php:
21
image: php-mysql:0.0.2
22
container_name: app-php
23
volumes:
24
- /data/docker/php/web:/var/www/html
25
networks:
26
- app-network
27
28
app-mysql:
29
image: mysql:latest
30
container_name: app-mysql
31
environment:
32
MYSQL_ROOT_PASSWORD: root@pass2025
33
MYSQL_DATABASE: my_database
34
MYSQL_USER: user
35
MYSQL_PASSWORD: user@pass2025
36
ports:
37
- "3306:3306"
38
volumes:
39
- /data/docker/mysql-data:/var/lib/mysql
40
networks:
41
- app-network
42
43
volumes:
44
mysql-data:
45
46
networks:
47
app-network:

完事之后使用 docker-compose up -d 运行所有容器

人应当是有理想的.
文章目录