赞
踩
每次换一台新电脑,或者强迫症的重装了一次系统之后,就必须重新配置一下本地的开发环境。对于配置本地开发环境,从很早以来就有多种方案,包括:从PHP, MySQL等官网下载并手工安装配置
使用Windows自带的Web Pi一键式安装
使用XAMPP,phpStudy之类的一键包
使用VirtualBox安装开发专用集成镜像
现在多了另一种更方便的方法,就是使用docker。其实上面的方式也都是可以的,第一种可能有些麻烦,第二种对于生产为Linux平台来说,可能出现环境不一致导致的问题。第三种是比较方便的,此前我一直比较喜欢。而第四种则需要比较高配一些的电脑,整个开发IDE都放置在镜像中,基本相当于在电脑里内置了另一台开发机了。
使用Docker配置开发环境,原理上来说其实类似于第四种,但是由于Docker的特性,占用资源基本感觉不到虚拟机的存在(特指Win和Mac平台,如果你的开发平台是Linux的话,则连这个问题都不存在)。另外一个就是Docker的扩展性比较好,使用网上现成的官方镜像组合一下,就能快速变更开发环境,就像从苹果的APP STORE上下载软件一样。
废话不多说,接下来就直接开始使用Docker搭建PHP本地开发环境吧
安装Docker
根据不同平台去官网下载不同的版本即可:
其中Windows平台需要Win10,否则可能需要安装Docker Toolbox
安装完毕后,托盘中有如图所示,表示已经正常运行:
配置Docker
配置国内源
首先要做的是设置一下docker hub的国内源,否则下载镜像的速度可以让人抓狂。这里推荐daocloud.io以及aliyun的加速器,配置步骤登录对应的账号后,根据其文档进行配置即可。
获取Docker Compose配置文件
这里以ThinkPHP 3.2 自用开发环境为例,对应的组件为Nginx1.12 + PHP5.3.29(php-fpm) + MySQL5.6.36 + Redis 3.0。
首先创建在我的文档中创建一个docker-dev目录,然在该目录中创建docker-compose.yml文件,填入:version: "3"
services:
nginx:
image: nginx:1.12-alpine
container_name: tp3-nginx
ports:
- "80:80"
networks:
- dockerinnernet
depends_on:
- "php"
volumes:
- ~/docker_data/nginx:/etc/nginx/conf.d
- ~/docker_data/wwwroot:/var/www/html:ro
php:
image: surenkid/php53:latest
container_name: tp3-php
ports:
- "9000:9000"
networks:
- dockerinnernet
depends_on:
- "mysql"
- "redis"
volumes:
- ~/docker_data/wwwroot:/var/www/html
mysql:
image: mysql:5.6.36
container_name: tp3-mysql
ports:
- "3306:3306"
networks:
- dockerinnernet
volumes:
- mydata:/var/lib/mysql
- ~/docker_data/dbdump:/root
environment:
MYSQL_ROOT_PASSWORD: "hi_ktsee_com"
redis:
image: redis:3.0-alpine
container_name: tp3-redis
ports:
- "6379:6379"
networks:
- dockerinnernet
volumes:
- ~/docker_data/redis:/data
networks:
dockerinnernet:
volumes:
mydata:
保存即可。
在我的github中有我自己常用的两个PHP环境配置文件,可以直接拿来使用,后期我也会根据工作需求增加新的配置。
运行Docker环境
接下来打开终端,在命令行中执行:docker-compose up
Docker会自动根据配置运行对应找到需要的镜像开始创建容器,由于这里是第一次运行,所以会从Docker hub下载对应的镜像。由于前面配置了加速器,这里的下载速度应该是可以的。
等待下载并运行完成后,基本的开发环境就已经搭建成功。如果你打算开始一个新的项目,现在就可以在我的用户文件夹中,进入docker_data/wwwroot文件夹开始编码了。
注意:这里由于我们已经把nginx的配置文件目录暴露到本地,因此需要在本地~/docker_data/nginx目录中新建一个default.conf的nginx配置文件,文件内容如下:server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
之后使用docker-compose命令重启docker项目即可。
备份还原docker环境中的开发数据
如果你之前在其他机器中的dockerhu环境中就有一个开发中的项目,现在需要把以前的数据导入继续开发,那么就需要继续下面的步骤。
备份开发数据
参考官方的说明,使用ubuntu镜像来打包备份其中的数据,首先创建一个一次性ubuntu镜像实例,将/root目录映射到本地磁盘,然后在镜像中将对应的数据备份到映射的路径(即/root),之后就可以在本地磁盘中看到备份的数据文件。备份命令格式:docker run -rm --volumes-from 需要备份的实例 -v $(pwd):/root ubuntu bash -c "cd /需要备份的数据目录 && tar cvzf /root/备份.tar.gz *"
如:docker run --rm --volumes-from zf2-mysql -v $(pwd):/root ubuntu bash -c "cd /var/lib/mysql && tar cvzf /root/mysql.tar.gz *"
docker run --rm --volumes-from zf2-postgres -v $(pwd):/root ubuntu bash -c "cd /var/lib/postgresql/data && tar cvzf /root/pgsql.tar.gz *"
docker run --rm --volumes-from zf2-solr -v $(pwd):/root ubuntu bash -c "cd /opt/solr/server/solr/mycores && tar cvzf /root/solr.tar.gz *"
docker run --rm --volumes-from zf2-webserver -v $(pwd):/root ubuntu bash -c "cd /zf2-app && tar cvzf /root/www.tar.gz *"
如果平台为当前宿主主机的操作系统是Windows,需要将其中的$(pwd)改为%cd%。
还原开发数据
恢复备份数据到docker实例则刚好相反,需要注意的是,恢复时最好将实例停止,防止出现数据冲突。恢复命令格式:docker run --rm --volumes-from 需要恢复的实例 -v $(pwd):/root ubuntu bash -c "cd /需要还原数据的目录 && tar xvzf /root/备份.tar.gz"
例如:docker run --rm --volumes-from zf2-mysql -v $(pwd):/root ubuntu bash -c "cd /var/lib/mysql && tar xvzf /root/mysql.tar.gz"
docker run --rm --volumes-from zf2-postgres -v $(pwd):/root ubuntu bash -c "cd /var/lib/postgresql/data && tar xvzf /root/pgsql.tar.gz"
docker run --rm --volumes-from zf2-solr -v $(pwd):/root ubuntu bash -c "cd /opt/solr/server/solr/mycores && tar xvzf /root/solr.tar.gz"
docker run --rm --volumes-from zf2-webserver -v $(pwd):/root ubuntu bash -c "cd /zf2-app && tar xvzf /root/www.tar.gz"
这样基本的开发环境就算是完成了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。