开发者社区 问答 正文

使用Docker快速搭建Nginx PHP-FPM环境


实战
1、下载nginx官方镜像和php-fpm镜像
docker pull nginx
docker pull bitnami/php-fpm


笔者未进行更改docker源,依然是官方源。
当然,你可以使用中国源。

2、使用php-fpm镜像开启php-fpm应用容器
docker run -d --name myFpm -p  -v /var/www/html:/usr/share/nginx/html bitnami/php-fpm
-d : 该参数为后台运行之意
-v : 指定宿主机与容器的映射关系。/var/www/html为宿主机的项目目录(自定义的),/usr/share/nginx/html为nginx服务器项目默认的路径。
3、使用nginx镜像开启nginx应用容器
docker run -d --name myNginx -p 8080:80 -v /var/www/html:/usr/share/nginx/html nginx
-p : 该参数设置端口对应的关系。所有访问宿主机8080端口的URL会转发到nginx容器的80端口。
4、查看对应的IP信息
首先查看是否启动成功
docker ps -a


可以看到,上述在STATUS一栏中显示UP,其含义为正在运行。

查看IP信息
docker inspect myFpm | grep "IPAddress"


5、修改nginx的相关配置
在容器中是没有vim命令的,所以不能在容器中直接修改配置文件。所以我们必须通过变通的方式去解决这个问题,否则只能在每个容器中安装vim。

首先登录到对应的容器中,查看配置信息路径,这在之后修改时会用到。
docker exec -it myNginx /bin/bash


-i : –interactive,交互模式。
-t : –tty,开启一个伪终端。
/bin/bash : 必须写,否则会报错。这是开始伪终端时,进入bash界面,也就是命令行界面。
查看对应的配置文件位置

/etc/nginx/conf.d/default.conf


退出命令行,不要使用exit,因为exit会让容器停止。这里使用ctrl + p + q来退出容器。
使用专用的复制命令将配置文件复制到宿主机,然后在宿主机进行编辑(这就是变通的方法)

docker cp myNginx:/etc/nginx/conf.d/default.conf ./default.conf
这里用到了上一步查询到的配置文件路径信息

在宿主机修改配置文件的php部分,内容如下:
location ~ \.php$ {
   fastcgi_pass   172.17.0.2:9000;
   fastcgi_index  index.php;
   fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
   fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
   include        fastcgi_params;
}
再次使用复制命令将其复制到容器中,然后再次进入容器中,将nginx配置文件重新载入
docker cp ./default.conf myNginx:/etc/myNginx:/etc/nginx/conf.d/default.conf
进入到nginx容器中重新载入配置文件
docker exec -it myNginx /bin/bash
service nginx reload
成功了

转载:Linux运维日志

展开
收起
寒喵 2018-12-31 22:52:23 2554 分享 版权
阿里云 AI 助理回答

您所描述的流程是使用Docker部署Nginx和PHP-FPM的经典方法,以构建一个简单的Web服务环境。下面我将根据您的步骤,结合阿里云的产品和服务,提供一些建议和优化方案。

1. 使用阿里云镜像仓库加速下载

虽然您提到可以使用中国源来加速Docker镜像的下载,但更推荐的做法是利用**阿里云容器镜像服务(ACR)**作为您的私有镜像仓库,并开启镜像加速功能。这样不仅可以加速镜像拉取速度,还能方便地管理组织内的镜像资源。

  • 创建镜像加速器: 登录阿里云控制台,进入容器镜像服务,按照指引创建镜像加速器。
  • 配置Docker: 按照阿里云提供的指南配置Docker守护进程,使用专属的加速地址。

2. 容器网络与安全组设置

在阿里云ECS上运行Docker时,注意考虑容器网络与ECS实例的安全组规则。默认情况下,Docker使用的是桥接网络,但为了更好地与ECS实例的网络集成,建议使用自定义网络或考虑使用阿里云专有的网络解决方案如VPC进行配置。

  • 自定义网络: 创建Docker网络时,可以指定子网等参数,使其与ECS实例所在的VPC网络对齐。
  • 安全组: 确保ECS实例的安全组规则允许外部访问8080端口(或其他您开放的端口),同时内部容器间的通信也需要相应的规则支持。

3. 数据持久化与自动备份

对于-v /var/www/html:/usr/share/nginx/html这样的数据卷挂载,考虑到数据持久性和安全性,阿里云提供了云盘服务文件存储NAS等产品,可以作为数据卷的后端存储,实现数据的高可用和自动备份。

  • 云盘: 可以直接挂载到ECS实例上,然后通过Docker的数据卷映射到容器内,适合小到中型应用的数据存储。
  • 文件存储NAS: 提供共享文件系统,适用于多容器或多实例共享数据的场景,易于扩展和管理。

4. 配置文件管理与自动化部署

修改容器内配置文件时,除了您提到的手动复制方式外,还可以考虑使用Kubernetes(阿里云ACK服务)、Docker Compose或GitOps等工具进行配置管理和自动化部署。

  • Kubernetes: 在阿里云ACK上部署应用,可以利用ConfigMap和Secrets来管理配置文件,实现配置的版本控制和动态更新。
  • Docker Compose: 对于小型项目,可以在ECS实例上使用Docker Compose编写YAML文件,一次性启动并配置所有服务及网络,简化管理。
  • GitOps: 结合Git仓库和CI/CD流程,实现配置文件的版本控制和自动部署,提高运维效率。

5. 监控与日志

最后,别忘了利用阿里云的监控和日志服务来确保应用的稳定运行。

  • 云监控: 监控ECS实例、Docker容器的性能指标,及时发现并解决问题。
  • 日志服务SLS: 收集Nginx、PHP-FPM的日志,便于分析应用运行状态,支持实时查询和报警功能。

综上所述,结合阿里云的服务,您可以进一步提升基于Docker的Web服务部署的效率、安全性和可维护性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答