前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[入门] Docker将nginx容器和php容器关联起来

[入门] Docker将nginx容器和php容器关联起来

作者头像
宣言言言
发布2019-12-15 21:49:28
3.1K0
发布2019-12-15 21:49:28
举报
文章被收录于专栏:宣言(Siam)博客

概念教程和介绍有一大堆,我就不多说了。主要记录一下操作,方便你我查阅。

首先是在菜鸟教程里看的教程,里面把各种镜像、容器的概念和基本操作都说了。但是每一步都直到怎么测试运行起来。

如:nginx,运行成功了,然后呢?没了。其他环境要怎么弄?

在百度上找教程,看到有人先是开了一个centos镜像的容器,然后在上面跟一个基本服务器一样去yum各种环境,如php、nginx、mysql。

然后再把镜像更新commit,说是环境就搭建好了。方法①

但这样子的话,主机上pull下来的php和nginx又有什么用?(按着菜鸟教程走下来的时候pull的)

于是请教前辈,是按方法①去操作还是php,nginx各开一个容器再去连接方法②,得到了方法②的回复,于是开始了漫长的道路。

  • 单容器易于分发、维护。因为它们是独立的,所有的东西都运行在同一个容器中,这点就像是一个虚拟机。但这也意味着,当你要升级其中的某样东西(比如PHP新版本)的时候,需要重新构建整个容器。
  • 多容器可以在添加组件时提供更好的模块化。因为每个容器包含了堆栈的一部分:Web、PHP、MySQL等,这样可以单独扩展每个服务或者添加服务,并且不需要重建所有的东西。

需要先把php镜像和nginx镜像pull下来。查看已有镜像

docker images

 先新建一个php容器

代码语言:javascript
复制
docker run--name php1 -v/home/wwwroot/service_config/php_config:/usr/local/php/etc -v/home/wwwroot/:/home/wwwroot/ -d php:7.0-fpm

-v/home/wwwroot/service_config/php_config:/usr/local/php/etc这一句搭建可以省略

这是将主机的目录挂载到容器里,也就是让容器可以共享这个目录里的文件。这样子可以在主机灵活地去修改php配置,nginx同理。

坑:如果没有把配置文件挂载出来,会出现配置文件出错,然后容器就无法start了,也无法进入修改,只能删除重新建立一个容器。

接着开启nginx容器

代码语言:javascript
复制
docker run--name nginx   -v/home/wwwroot/:/home/wwwroot/   -v/home/wwwroot/service_config/nginx_config:/etc/nginx/conf.d   --link php1:php1   -p 80:80   -d nginx

  同样的两个配置挂载目录,第一个是放项目文件的,第二个是放配置文件的

  然后再link刚刚开启的php容器,名称是php1,端口映射都用的80

  在开启两个容器之前,需要先新建好主机目录,也就是/home/wwwroot/service_config/nginx_config等一列目录

  然后/home/wwwroot/service_config/nginx_config文件夹中有两个文件(这两文件docker官方下载下来的nginx镜像是没有的): 

代码语言:javascript
复制
fastcgi_params文件

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_param REQUEST_URI $request_uri;

fastcgi_param DOCUMENT_URI $document_uri;

fastcgi_param DOCUMENT_ROOT $document_root;

fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI / 1.1;

fastcgi_param SERVER_SOFTWARE nginx / $nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;

fastcgi_param REMOTE_PORT $remote_port;

fastcgi_param SERVER_ADDR $server_addr;

fastcgi_param SERVER_PORT $server_port;

fastcgi_param SERVER_NAME $server_name;

#PHP only, required

if PHP was built with--enable - force - cgi - redirectfastcgi_param REDIRECT_STATUS 200;

nginx.conf文件(根据你多少个网站,配置多少个。下面配置若是不懂,请查看相关文档)

代码语言:javascript
复制
server {

    listen 80;

    server_name www.test.com test.com;

    index index.html index.htm index.php;

    root / home / wwwroot /

        default;#

    error_page 404 / 404.html;

    location~[ ^ /].php(/ | $) {

        try_files $uri = 404;

        fastcgi_pass php1: 9000;#

        极其重要fastcgi_index index.php;

        include / etc / nginx / conf.d / fastcgi_params

    }

    location / nginx_status {

        stub_status on;

        access_log off

    }

    location~.*.(gif | jpg | jpeg | png | bmp | swf) $ {

        expires 30d

    }

    location~.*.(js | css) ? $ {

        expires 12h

    }

    location~/.{deny all}}

新建完文件后就可以开启容器了,开启后应该就正常了,访问你的服务器ip(默认就是80端口,应该就可以正常访问nginx)

然后在刚刚的主机目录/home/wwwroot/下新建一个目录default (因为在nginx里设置的默认目录,可以自己修改)

然后新建test.php 写入php代码测试运行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档