前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用腾讯云容器服务来构建简单web service

使用腾讯云容器服务来构建简单web service

原创
作者头像
腾讯云容器服务团队
发布2018-01-15 16:58:14
4.3K1
发布2018-01-15 16:58:14
举报
文章被收录于专栏:腾讯云容器服务团队的专栏

使用腾讯云容器服务来构建简单 web service

本文将介绍使用nginx和php来构建简单web service,核心在于如何配置nginx的upstream,使得nginx能够与后端服务通信。我们的web service包含两个服务,分别是nginx和php-fpm,nginx服务收到用户请求后,根据配置,如果用户请求的是php文件,则将请求转给后端的php-fpm服务来处理。

为了方便,nginx容器和php-fpm容器使用同一个镜像,这个镜像右下面的仓库build而来。其中,app目录是我们的核心目录,用于存放php代码文件。etc目录用来存放配置,它包含了nginx服务的配置,以及php-fpm服务的配置。

一、配置说明

代码语言:txt
复制
|-- Dockerfile
|-- app
|   |-- index.php
|   `-- info.php
`-- etc
    |-- nginx
    |   |-- nginx.conf
    |   `-- sites-enabled
    |       `-- myapp
    `-- php-fpm
        |-- php-fpm.conf
        `-- pool.d
            `-- www.conf

我们来看下nginx的核心配置文件 myapp:

代码语言:txt
复制
server {
        root /app;

        location / {
                try_files $uri /index.php$is_args$args;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass php-fpm:9000;
                fastcgi_index index.php;
                include fastcgi_params;
    }
}

nginx通过root指定了代码的访问路径,我们项目的php文件都位于app目录下。

代码语言:txt
复制
root /app

并且定义了如果用户请求的是php文件,则将请求转发给后端的php-fpm服务,该服务监听了9000端口(php-fpm目录的www.conf文件中定义)。

代码语言:txt
复制
fastcgi_pass php-fpm:9000;

通过以上的配置可以看出nginx需要将php文件转发给后端的php-fpm服务,而nginx服务访问php-fpm服务的方式是通过服务名来访问。在我们的容器集群中,服务之间访问不需要知道服务的ip或者实例的ip,只需要指定服务名,集群会自动根据服务名做dns解析,如果一个服务有多个实例,dns解析的结果是等概率随机的,由于是等概率的,通过服务名来访问可以实现负载均衡。

二、实验

下面开始我们的实验。在项目目录执行以下命令,将项目build成docker镜像,并上传到镜像仓库中(请把镜像仓库空间tencentyun请换成自己的空间)

代码语言:txt
复制
docker build -t ccr.ccs.tencentyun.com/tencentyun/nginx-php .
docker tag ccr.ccs.tencentyun.com/tencentyun/nginx-php ccr.ccs.tencentyun.com/tencentyun/nginx-php
docker push ccr.ccs.tencentyun.com/tencentyun/nginx-php

镜像上传完毕后,我们可以使用这个镜像分别创建两个服务,nginx和php-fpm,由于两个服务使用的是同一个镜像,在创建服务时注意:

  1. 服务名分别为 nginx和php-fpm,其中nginx服务名您可以改成其他名称比如frontend,但是php-fpm这个服务名不能改成其它名称,因为我们的nginx配置指定了访问php-fpm服务,如果没有这个服务,nginx转发php时会解析php-fpm服务出错
  2. nginx服务指定运行命令为nginx。
  3. php-fpm服务指定运行命令为php5-fpm。
  4. nginx服务的访问方式为提供公网访问,绑定容器和服务的端口均为80。
  5. php-fpm服务的访问方式为仅在集群内访问,绑定容器和服务的端口为9000。

nginx和php-fpm服务创建成功后,我们可以根据nginx服务的外网ip来访问我们的项目的index和info.php。

本文实验的项目源码下载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用腾讯云容器服务来构建简单 web service
    • 一、配置说明
      • 二、实验
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档