Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。他很轻巧,CPU/内存低消耗,所也笔者选择了docker作为虚拟化工具
1.安装for Mac
从官网下载dockerDocker Toolbox,下载完成,点下一步下一步就安装好了是不是很简单。
2.构建镜像
docker search [name] #查找官网提供的镜像
docker pull busybox #安装官网提供的镜像
3.构建php开发环境
使用Dockerfile文件
# 从官方PHP镜像构建
FROM php
# 将index.php复制到容器内的/var/www目录下
ADD index.php /var/www/
# 对外暴露8080端口
EXPOSE 8080
# 设置容器默认工作目录为/var/www
WORKDIR /var/www/
# 容器运行后默认执行的指令
ENTRYPOINT ["php", "-S", "0.0.0.0:8080"]
构建容器
docker build -t allovince/php-helloworld .
运行这个容器
docker run -d -p 8080:8080 allovince/php-helloworld
安装更多的服务
FROM php
ADD index.php /var/www/
# 安装更多服务
RUN apt-get install -y \
mysql-server \
nginx \
php5-fpm \
php5-mysql
# 编写一个启动脚本启动所有服务
ENTRYPOINT ["/opt/bin/php-nginx-mysql-start.sh"]
这种安装方式会有也下问题:
- 如果需要验证某个服务的不同版本,比如测试PHP5.3/5.4/5.5/5.6,就必须准备4个镜像,但其实每个镜像只有很小的差异。
- 如果开始新的项目,那么容器内安装的服务会不断膨胀,最终无法弄清楚哪个服务是属于哪个项目的
使用单一的容器安装方式:
FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y nginx
FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y mysql
这种方式的优点在于所有服务可以有一个统一的基础镜像,对镜像进行扩展和修改时可以使用同样的方式,比如选择了ubuntu,就可以使用apt-get指令安装服务。
这种方式的优点在于所有服务可以有一个统一的基础镜像,对镜像进行扩展和修改时可以使用同样的方式,比如选择了ubuntu,就可以使用apt-get指令安装服务。
问题在于大量的服务需要自己维护,特别是有时候需要某个服务的不同版本时,往往需要直接编译源码,调试维护成本都很高。