当先锋百科网

首页 1 2 3 4 5 6 7

临近国庆,又回过头来鼓捣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

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

推荐:
文档