DOCKER PHP+NGINX

临近国庆,又回过头来鼓捣docker,因为从事php开发,所以还是先从环境入手。

本来考虑搭建php+mysql+nginx+redis全部,但是由于使用的都是公司的mysql和redis,故只搭建php+nginx,因为我的操作系统是win10,一下操作都是在win下完成的。

首先先拉取镜像,当然你也可以自己编写dockerfile去构建自己的镜像。这里先拉取nginx镜像:

docker pull nginx

这里会默认拉取最新的镜像,完成后可以使用docker images查看已有镜像。

接下来安装php,跟nginx镜像一样,可以通过直接拉取镜像完成操作,拉取的php镜像只有部分扩展,自己需要的扩展需要进入容器里面去安装,官方给出了三种安装php扩展的方法:

docker-php-ext-install
pecl install name-xxx
curl 源码安装

但是通过这种方式运行的php存在一个问题,那就是重新创建的镜像或重新运行的容器,是没有上次安装好的扩展的,需要重新安装,所以,这里采用dockerfile构建自己的php镜像。

先创建一个目录,然后在这个目录里面创建dockerfile文件,文件内容如下:

FROM php:7.2-fpm AS php7.2
RUN docker-php-ext-install mysqli pdo pdo_mysql \
    && pecl install redis-5.0.0 \
    && pecl install yaf-3.0.8 \
    && pecl install xdebug-2.7.2 \
    && docker-php-ext-enable redis xdebug yaf \
    && cd /usr/local/etc/php \
    && touch php.ini

然后在当前目录打开cmd,执行:

docker build -t php7.2 .

然后就会开始构建自己的php镜像,上述dockerfile比较简单,只是在php:7.2-fpm镜像的基础上,使用docker-php-ext-install、pecl安装了mysqli,pdo,redis,yaf,xdebug扩展,并创建了一个php.ini文件,用于后面挂载本地php.ini文件。

dockerfile还可以执行更复杂的操作,我们可以在ubuntu镜像里面通过RUN去执行终端命令安装php和nginx,并运行nginx、php-fpm服务,这样就可以在一个镜像里面同时安装php+nginx,但是这里只进行最简单的php镜像构建。

等一切完成之后,我们现在就有两个镜像

图片描述

现在我们需要做的就是启动这两个镜像,并将本地的工作目录和配置文件挂载到容器对应的目录,但是,每次都要分别启动两个镜像并挂载相应的文件,属实比较麻烦,并且每次的ip还会变化导致需要更改nginx配置,这样还不如直接安装集成环境呢。。。

因此,这里采用docker-compose去启动这两家伙:

version: '2'
services:
  nginx:
    container_name: "nginx"
    image: nginx
    ports:
      - "80:80"
    depends_on:
      - php
    volumes:
      - "F:/phpstudy/PHPTutorial/nginx/conf.d:/etc/nginx/conf.d"
      - "F:/phpstudy/PHPTutorial/WWW:/usr/www/html"
      - "F:/logs/error.log:/var/log/nginx/error.log"
      - "F:/logs/access.log:/var/log/nginx/access.log"
    networks:
      - app_net
  php:
    image: php7.2:latest
    ports:
      - "9000:9000"
    volumes:
      - "F:/phpstudy/PHPTutorial/WWW:/var/www/html"
      - "F:/lnmp/php.ini:/usr/local/etc/php/php.ini"
    networks:
      - app_net
    container_name: "php"
networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: 10.10.0.0/16

上面就是我们的docker-compose.yml文件,通过该文件和docker-compose命令可以快速部署分布式应用,这个文件同样放在刚才的dockerfile目录内,该文件里面指定了需要挂载的文件,以及映射的端口,这样就不需要每次都去手动输入,执行命令:

docker-compose up -d

该命令会在执行完毕后进入后台,这里建议第一次安装末尾不要-d:

docker-compose up

这样可以看到在容器运行期件报出的一些问题,比如扩展加载失败等。

推荐:
https://docs.docker.com/

日有所进 月有所变 终有所成

70 声望
0 粉丝
0 条评论
推荐阅读
如何使用 PHPStorm 进行优雅的项目开发?
PHP Storm 这个开发工具,很多 phper 应该有所耳闻,甚至也有不少人使用其作为生产工具,但是很多人都没有最大限度的使用它,本文就来总结一些优雅开发的小技巧。

唯一丶45阅读 4.8k评论 7

怎样用 PHP 来实现枚举?
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,...

唯一丶25阅读 6.3k评论 4

图片防盗链破解 解决图片防盗链问题 反向代理
当客户端(浏览器)向服务器请求内容的时候,会提交一个header,这个header中包含了如:浏览器信息、cookie等内容,那么有一个叫referer的东东,也包含在这里面。

TANKING7阅读 11.2k评论 5

Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2k评论 2

封面图
张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 666评论 2

封面图
Docker学习:Image的本地存储结构
在使用Docker时候,针对镜像的操作一般就是docker pull,docker build,docker commit(刚开始接触Docker的时候,还不会Dockerfile,经常使用这个命令,但是经历了一次血的教训,已经放弃这个命令很久)这些操作...

backbp4阅读 9.7k评论 3

使用docker快速搭建xssPlatform测试平台实践
笔者之前给一些开发团队多次做Web安全开发培训,为了让培训的学员能够理解XSS原理和XSS的危害,将xssPlatform进行了更新,之前一直放在GitHub中;发现关注的人越来越多,很多人在安装的过程中遇到问题不知道怎么...

汤青松1阅读 25.7k

日有所进 月有所变 终有所成

70 声望
0 粉丝
宣传栏