docker下的php开发环境
开发环境布署是每个开发应该掌握的技能,通常这个工作由技术主管或运维人员提供.然而一般公司都不会重视基础环境建设.
开发环境部署方案选择
搭建开发环境经常出现如下问题:
- 不同项目不同技术栈
- php,mysql等等版本与测试环境,生产环境不统一
- 搭建时间太长.在不熟悉或网络不好的情况下,下载资源,编译,摸索等需要时间.新人或新项目往往花费一两天来做基础环境搭建
- 配置不一致.生产环境,测试环境,不同开发人员环境除了版本,配置也不一致.经常出现这样的对话”在我电脑上是好好的.”
- 切换电脑或环境需要重新配置.不能良好的迁移和备份.
一般我们统一环境,常用的方法是,虚拟机镜像,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 | { |
设置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 的docker1
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 许可协议。转载请注明出处!
扫描二维码,分享此文章