资讯专栏INFORMATION COLUMN

Docker中配置Nginx与PHP

王晗 / 2212人阅读

摘要:后台运行容器后面的那个就是镜像的名称了启动配置的配置文件下面贴出我的配置这个我在主机的文件中配置的指向,其实就是访问的本机端口。

最近在学docker,顺便配置了一下docker中的nginx与php,发现网上的关于docker中配置nginx与php的资料很少,而且有的也很旧,没有太多的参考性,所以决定自己写一篇,分享一下其中的经验。

版本说明

docker: Version 17.06.2-ce-mac27 (19124)

PHP:7.1

Nginx:1.13.3

操作系统 Mac 10.12.6

安装docker

直接上docker的官网https://www.docker.com下载docker For Mac这个版本,是docker专门为mac系统编写的软件,相当于一个app,下载安装好后,打开docker App,然后在App中启动docker即可。

安装Nginx

启动docker之后,打开命令行,你的命令行里面就有了docker这个命令:

然后我直接使用的是官方的nginx镜像,下载方法:

docker pull nginx

等待下载完即可。

安装PHP

同理,我也是使用的官方的PHP镜像,其实nginx和php我都推荐官方的镜像,毕竟官方镜像代表着安全和稳定。

docker pull php:7.1-fpm

你如果想下载其他的版本,上官方镜像上面去看一下,都有各种版本的说明,想下载什么版本的都有。我这里就用的最新的php版本了。

启动Nginx

安装好nginx之后,便用命令启动它:

docker run -p 80:80 --name mynginx -v /Users/Doubleduan/Documents/project:/home -v /Users/Doubleduan/Documents/conf:/etc/nginx/conf.d -d nginx 

-p 代表着把容器中的80端口绑定到宿主机的80端口,所以以后访问宿主机的80端口就会转发到nginx容器的80端口

--name 启动的容器的名称,自己定义,方便好记就行

-v 就是把我主机的/Users/Doubleduan/Documents/project目录映射到容器中的/home目录中,在容器中访问/home你就会发现是我/Users/Doubleduan/Documents/project目录中的东西。我映射了项目目录和配置文件,你也可以把日志目录也映射了,这样你以后操作什么东西直接在主机中操作了,就不用登录容器中去查看了。

-d 后台运行容器

后面的那个nginx就是镜像的名称了

启动PHP
docker run -p 9000:9000 --name myphp -v /Users/Doubleduan/Documents/project:/home -d php:7.1-fpm
配置nginx的配置文件

下面贴出我的配置

server {
    listen       80;
    server_name  algo.test.com;
    root /home/algorithm;

    access_log  /var/log/nginx/access.log  main;
    error_log /var/log/nginx/error.log error;

    location / {
        index  index.html index.htm index.php;
    }

    location ~ .php$ {
        fastcgi_pass   172.17.0.3:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

这个algo.test.com我在主机的hosts文件中配置的指向127.0.0.1,其实就是访问的本机80端口。这里要特别注意两个点:

第一点:是fastcgi_pass 172.17.0.3:9000,这里的172.17.0.3就是php容器的ip,查询容器IP的方法:

docker inspect 容器ID或容器名 |grep ""IPAddress""

你自己配置的话要替换成你自己的php容器ip,注意不能用127.0.0.1,因为我用的是docker默认的网络连接模式,也就是docker bridge模式,这种模式下你要访问另一个容器就必须用那个容器的虚拟ip,而且端口也必须要与宿主机的相应端口绑定,因为宿主机是一个网关,nginx容器访问php容器要经过宿主机的网关转发的,所以不绑定端口肯定访问不了。

第二点
关于fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name这个配置,如果你想用$document_root变量,那就必须把nginx容器的数据目录与php容器的数据目录弄成一致的,比如我的nginx容器的数据目录是/home/algorithm,在php容器中依然是这个,如果php容器中的目录改变了,不是这个了,那么php容器就会找不到请求的这个文件的。因为两个容器相当于两套文件系统,路径有可能是不一样的。但是呢,如果你偏要设置成不一样的,那么只能写死地址了,比如弄成这样:fastcgi_param SCRIPT_FILENAME /home/algorithm/$fastcgi_script_name,就可以让php容器访问到相应的文件了。

弄好配置文件之后,重启nginx容器,就可以访问了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30680.html

相关文章

  • Docker配置NginxPHP

    摘要:后台运行容器后面的那个就是镜像的名称了启动配置的配置文件下面贴出我的配置这个我在主机的文件中配置的指向,其实就是访问的本机端口。 最近在学docker,顺便配置了一下docker中的nginx与php,发现网上的关于docker中配置nginx与php的资料很少,而且有的也很旧,没有太多的参考性,所以决定自己写一篇,分享一下其中的经验。 版本说明 docker: Version 17...

    ISherry 评论0 收藏0
  • Docker配置NginxPHP

    摘要:后台运行容器后面的那个就是镜像的名称了启动配置的配置文件下面贴出我的配置这个我在主机的文件中配置的指向,其实就是访问的本机端口。 最近在学docker,顺便配置了一下docker中的nginx与php,发现网上的关于docker中配置nginx与php的资料很少,而且有的也很旧,没有太多的参考性,所以决定自己写一篇,分享一下其中的经验。 版本说明 docker: Version 17...

    AnthonyHan 评论0 收藏0
  • 使用 Docker 构建 LNMP 环境

    摘要:该配置用于建立远程连接,使得本地可以通过端口连接到宿主机,进而连接到这一容器的服务。删除容器当不再使用时,可以使用以下命令删除容器。 构建的环境为:PHP 7.1.3 fpm & Nginx 1.11.10 & MySQL 5.7 对 Docker 不熟悉的读者可以参考之前撰文的一篇文章:Docker 快速上手 配置简单的 LNMP 环境 这里使用 docker-compose 的方...

    CarlBenjamin 评论0 收藏0
  • Docker部署WordPress LNMP(Nginx PHP MySQL)环境实践

    摘要:为了能只使用一个文件就能快速部署环境,我们把及环境的相关配置保存到阿里云的代码托管,然后使用阿里云的镜像仓库从拉取自动构建镜像。编写以上在阿里云创建的镜像到本地,在此项目中创建然后在目录分别创建目录,用于存放它们各自及配置文件。 Docker基于LXC实现了把软件封装到一个完整的文件系统,可以在docker容器中运行所需的一切代码,运行环境,系统工具和系统库。由于docker使用独立于...

    Aklman 评论0 收藏0
  • Docker部署WordPress LNMP(Nginx PHP MySQL)环境实践

    摘要:为了能只使用一个文件就能快速部署环境,我们把及环境的相关配置保存到阿里云的代码托管,然后使用阿里云的镜像仓库从拉取自动构建镜像。编写以上在阿里云创建的镜像到本地,在此项目中创建然后在目录分别创建目录,用于存放它们各自及配置文件。 Docker基于LXC实现了把软件封装到一个完整的文件系统,可以在docker容器中运行所需的一切代码,运行环境,系统工具和系统库。由于docker使用独立于...

    Raaabbit 评论0 收藏0

发表评论

0条评论

王晗

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<