大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

Windows下使用docker compose搭建跨平台php


Docker

最近Docker发布了全新的Windows版Docker,安装上手体验了一下,非常流畅的使用体验,正好手边需要用PHP开发一个demo小程序,就用docker来构建一个跨平台的研发环境;可以快速的搭建环境,并且没有平台限制;在搭建过程中顺手完成nginx+php和apache+php两种环境;使用php7。

这个版本的Docker,基于Windows原生提供的Hyper-v和Powershell特性,更好的和windows集成在一起,使用起来非常流畅。安装过程中因为使用的都是docker官方的地址,可能需要翻墙,作者使用的是用AWS自己搭建的VPN服务器,稍后也整理一篇文章。

配置文件的git项目地址:https://coding.net/u/liuwill/p/docker-compose-php/git

1 下载安装Docker

直接从官方网站下载安装,https://docs.docker.com/docker-for-windows/页面有详细的安装和操作说明,直接按照官方说明安装即可,安装完可以尝试一些基本操作。


win-install-success-hello-world

为了通过volumes方式将windows宿主机的文件系统映射到容器中,需要在setting中进行设置:


docker shared file

2 找到合适的镜像,配置docker-compose.yml

首先从官方的docker hub找到合适版本的php容器镜像。文章采用了两个镜像,对应apache和nginx的web server。分别是php:7.0.8-apachephp:7.0.8-fpm-alpine两种镜像。

然后还需要使用nginx的docker镜像,直接使用官方的镜像,为了减少镜像大小,直接使用nginx:mainline-alpine

完整的docker-compose.yml代码如下:

version: '2'
services:
  apache-php:
    image: php:7.0.8-apache
    command: apache2-foreground
    ports:
      - "8870:80"
    volumes:
      - ./project:/var/www/html:ro
  fastcgi-php:
    image: php:7.0.8-fpm
    command: php-fpm
    ports:
      - "9123:9000"
    volumes:
      - ./project:/var/www/html:ro
  nginx-server:
    image: nginx:latest
    command: nginx -g 'daemon off;'
    volumes:
      - ./project:/usr/share/nginx/html:ro
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "8880:80"
    links:
      - fastcgi-php:fastcgi-php

其中ports对应docker run命令的-p,volumes对应-v,分别将容器暴露的端口映射到主机,把主机的文件映射到容器内部

3 项目的基本结构

项目的目录结构如下:

docker-php-dev
├── docker-compose.yml
├── apache_php
│   └── Dockerfile
├── project
│   └── index.php
└── nginx
    ├── conf
    │   └── nginx.conf
    └── Dockerfile

其中apache_php和nginx下面的Dockerfile,用在需要对容器进行一些构建阶段的自定义时使用,可以不使用,直接从默认的开始。

nginx.conf是nginx的配置文件,需要配置fastcgi,主要配置包括以下两段配置文件:

...
#修改Document root
location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}
...
# 配置fastcgi
location ~ \.php$ {
    root           /usr/share/nginx/html;
    fastcgi_pass   127.0.0.1:9123;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
...

4 执行容器构建

使用docker compose可以简单的时候命令来批量执行docker容器的创建和执行。docker-compose help命令可以查看compose提供的操作命令。常用的基本操作如下:

#通常在第一次执行,该命令根据docker compose的配置来编排容器
docker-compose up
#使用-d选项,可以在后台执行
docker-compose up -d

#关闭compose启动的容器
docker-compose stop

#删除compose创建的容器,删除之后需要重新up
docker-compose rm

成功执行docker-compose up -d可以使用docker-compose ps或者docker ps来查看容器的运行情况。


容器运行情况

如果需要查看容器,或者进行修改,执行docker exec -it 容器id /bin/bash就可以进入容器。

5 最后看一眼效果

执行成功以后,就可以查看到project文件下php页面的效果:


phpinfo

代码如下:

<?php
    phpinfo();

这样就可以快速的搭建一个平台无关的php开发环境,后期可以使用gulp或者grunt进行前端代码的构建,将源代码构建编译生成最终代码之后,直接运行在docker容器内。