Hi,阿金 ...

基于Docker的php开发环境

发表: 2019-09-08 分类:

docker下的php开发环境

开发环境布署是每个开发应该掌握的技能,通常这个工作由技术主管或运维人员提供.然而一般公司都不会重视基础环境建设.

开发环境部署方案选择

搭建开发环境经常出现如下问题:

  1. 不同项目不同技术栈
  2. php,mysql等等版本与测试环境,生产环境不统一
  3. 搭建时间太长.在不熟悉或网络不好的情况下,下载资源,编译,摸索等需要时间.新人或新项目往往花费一两天来做基础环境搭建
  4. 配置不一致.生产环境,测试环境,不同开发人员环境除了版本,配置也不一致.经常出现这样的对话”在我电脑上是好好的.”
  5. 切换电脑或环境需要重新配置.不能良好的迁移和备份.

一般我们统一环境,常用的方法是,虚拟机镜像,Vagrant(Homestaed),Docker.

对比一下:

环境 说明
虚拟机 场景:虚拟硬件,
如:一台PC机虚拟出多个PC;
每个PC共享同一硬件;
每台PC可以装不同的操作系统.
解决问题:
1,模拟硬件(磁盘,cpu,内存);
2.与硬件隔离的系统环境,如在虚拟中格式化磁盘操作.
性能:一般,生产环境只有云厂商能用.
镜像跨平台:支持同一虚拟应用下迁移
镜像大小:大
启动:慢
Vagrant 场景:在虚拟机基础上,对镜像管理.
如通用的laravel homestaed 的运行环境,
包含:php+nginx+mysql+laravel框架,以及配置.
解决问题:一般解决统一开发环境问题.
性能:一般
镜像跨平台:只能在同宿主系统+虚拟应用下迁移
镜像大小:大
启动:慢
Docker 场景: 与平台无关的虚拟化应用
如:nginx 镜像运行在:
1.Windows+docker;
2.MacOs+docker;
3.Linux+docker
4.云平台+docker
5.虚拟机+docker.
解决问题:1.跨平台应用部署;2.统一环境;
镜像跨平台:支持同一种docker环境使用
性能:优,可生产环境使用
镜像大小:小
启动:快

统一开发环境:这三种都可以用,但统一运行环境,包含开发环境,测试环境,生产环境一致的话,目前只能使用docker的方案.

PHP的环境分析

现在流行的php基础支持环境,学用的应用有:nginx,php,mysql,redis.
操作系统统一使用linux,docker常用的容器系统有三种:Centos,Ubuntu,Alpine

Centos: 开源的操作系统,有企业级的RedHat背书,生产环境下支持的软件多.
Ubuntu: 常用于个人家用操作系统,用户群体多,很多人刚接触的linux是它.
Alpine: 是一个微型的linux操作系统,大小只有5MB左右,适合用于docker的镜像.

综合考虑PHP的基本环境:alpine/centos+php+nginx+mysql+php
下面要准备这些镜像.

php的docker环境

下面开始进入正题.
工具: docker, phpstrom, 命令行

安装docker

docker官网找到自己系统对应的安装方法.
https://www.docker.com/get-started
如:windows,目前(2019.09.09),安装docker-desktop就行.

注册并登录docker 官方账号

https://id.docker.com/login/
不是必须的,但下载安装docker需要登录.后面从docker hub下载东西也需要登录.

下载安装

省略.

启动docker桌面版

设置docker hub国内源

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"registry-mirrors" : [
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"experimental" : true
}

设置compose监听地址

端口为2375
windows如下图.

macOs不需要配置.

配置共享

比如,你数据库,代码等需要共享的,设置共享盘.如C:\,D:\
windows配置:

MacOs:

phpstrom 配置

打开配置–>Build–>Docker.
获取直接搜索”docker”就行.
新建一个配置

编写docker-compose.yml

docker-compose是docker编排工具.
在项目根目录下,创建一个docker-compose.yml配置文件.
services: 运行的服务
container_name: 自定义的容器名
image: docker 镜像
restart: 是否重启
volumes: 挂载的目录, 本地:docker容器
depends_on: 依赖
新版docker-compose 需要link设备网络了.
默认可以通过 service名来访问容器.
如在nginx中可以通过,http://my-php:9000,为什么不用IP地址,IP地址除非设置静态IP,不然IP地址每次启动都不一样.

举例:nginx+php-fpm 的docker

1
version: '3.4'
services:
  my-php:
    image: php:7.2-fpm
    container_name: my-phpfpm
    restart: always
    volumes:
      - ./www:/www
  my-nginx:
    image: nginx
    container_name: my-nginx
    restart: always
    ports:
      - "1800:80"
    volumes:
      - ./www:/usr/share/nginx/html
      - ./config/nginx:/etc/nginx/conf.d/
    depends_on:
      - my-php
  my-composer:
    image: composer
    container_name: my-composer
    restart: always
    volumes:
      - ./www:/app
    working_dir: /app

目录结构如下:

nginx 配置如下:

1
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   my-php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

注意: /www指的是 php-fpm容器中的目录,而不是nginx容器的路径; my-app指的是php-fpm的host.就像localhost一样的.

运行docker-compose

使用docker-compose up xxx.docker-compse.yml
也可以使用phpstrom 管理,推荐使用这种方式,更直观,好理解docker使用的场景.

在phpstrom 中运行.

可以直接右键运行docker-compose.yml.
会自动pull 对应的镜像文件.
运行之后可以,映射本地代码路径.
也可进入对应的容器,如修改docker的配置等等,这是不允许的.
进入容品的方法:通过exec 运行bash或sh


就像正常的ssh登录一样.

运行完compose.yml后.就能通过映射的端口查看.如1800.

便成功.

测试环境和开发环境可以使用一套方案.
生产环境,需要重新生成新项目配置,数据库,缓存.运维会安排好.

本文作者:阿金

本文链接:http://www.hi-arkin.com/2019/09/08/DevOps/docker-php/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

扫描二维码,分享此文章