将nginx和php-fpm 打包到一个镜像中。
1。 DockerFile 文件
# 使用官方 PHP FPM 镜像作为基础镜像
FROM php:7.4-fpm
# 更新 APT 包源
RUN sed -i 's|deb.*stretch|deb http://mirrors.aliyun.com/debian stretch main contrib non-free|g' /etc/apt/sources.list && \
sed -i 's|deb.*stretch-updates|deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free|g' /etc/apt/sources.list && \
sed -i 's|deb.*stretch-backports|deb http://mirrors.aliyun.com/debian stretch-backports main contrib non-free|g' /etc/apt/sources.list && \
sed -i 's|deb.*stretch-security|deb http://mirrors.aliyun.com/debian stretch-security main contrib non-free|g' /etc/apt/sources.list
# 更新 apt 包源
RUN apt-get update && apt-get install -y \
nginx \
zip unzip \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
&& docker-php-ext-install gd
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . .
RUN chmod +x ./start.sh
# 配置 Nginx
COPY ./conf/default.conf /etc/nginx/conf.d/default.conf
# 暴露端口
EXPOSE 80
# 启动 Nginx 和 PHP-FPM
CMD ["./start.sh"]
2。 启动文件start.sh
#!/bin/sh
php-fpm &
nginx -g "daemon off;"
3。 对应的nginx配置
server {
listen 80;
server_name localhost;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/html;
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4。 文档结构如下:
├── Dockerfile
├── conf
│ └── default.conf
├── index.php
└── start.sh
5。 构建和运行docker容器命令
在项目更目录下(Dockerfile),执行以下命令构建镜像:
docker build -f ./Dockerfile -t test-php:1.0.0 .
构建成功后需要运行容器,执行如下命令:
docker run --name=php-server -p 80:80 -v /Users/wangxu11/DockerData/php/code:/var/www/html -d test-php:1.0.0
重点说明: 端口需要和nginx中端口一致,如80 ,nginx->server->port 80;