摘要:配置例如文件的目录关系如下打开文件,修改的值为项目文件的相对路径,这个路径会映射到容器的目录上,注意任何修改配置文件都需要执行容器名字重新构建相关容器。
背景
每次更换一个工作用的电脑,都需要很长的时间来搭建本地的运行环境。有时候,为了安装一个扩展会折腾半天,而且可能需要安装多个版本的 php。有人说,集成运行环境不是很好嘛,一次搞定所有的要求。是的,对于新手来说,使用集成包就足够了。但是集成境包不容易满足定制化的需求,比如某个扩展没有,还是得手动编译安装,而且这种方式有点太 low 了。 对于 mac 来说,需要卸载自带的 php ,然后使用 php 安装器来管理多个版本,这可能会影响本地系统。
这篇博客主要跟大家带来使用 docker 来搭建本地运行环境,docker 号称 build once, run anywhere,用于生产环境也可以哦。等你换一个电脑,从网上 down 下来自己的配置文件,剩下就是网速和时间的问题了。喝一杯咖啡,环境就搭建好了。
安装Homebrew
Homebrew 可以说填补了 mac 包管理工具的空缺,安装起来非常简单。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装 docker
brew install docker docker-machine docker-compose
Docker 和传统意义的虚拟机相比,Docker 运行在进程的命名空间内,并没有提供操作系统层的抽象,直接使用主机的资源。
docker-machine 有点类似虚拟机了,Docker 可以运行在其中。由于 Mac 文件系统的限制,Docker 运行在 Mac OS 上有明显延迟,这也就是后面要用 dinghy 加速的原因。
docker-compose 多带带的容器只可以提供比较单一的服务,通过 docker-compose 来管理容器,定义容器之间的依赖关系等,来满足应用级别的需要。
官方文档
使用laradock或者可以通过 Docker For Mac 的安装包进行安装,也很简单。
laradock
laradock 是通过 docker-compose 来构建的,旨在方便地提供 laravel 的运行环境。做适当的修改可以很方便的当做 php 的开发环境。
安装
git clone https://github.com/laradock/laradock.git
简介
进入到 laradock 的目录,看到有很多文件夹和文件,其中最重要的就是 env-example,docker-compose.yml以及各个目录里的 Dockerfile 文件了。env-example 的环境配置文件的样例,后两者有很多变量都是在这个文件中定义的。
初运行
启动 docker,进入到 laradock 的目录,执行
cp env-example .env docker-compose up -d mysql redis nginx # 启动相关容器 docker-compose ps # 查看进程 docker-compose exec 容器名字 sh # 进入相关容器
通过ps可以看到有6个进程启动了,分别是 application, workspace, php-fpm, nginx, redis, mysql。 其中 php-fpm 是 nginx 所依赖的容器, appliction 代表整个应用,workspace 是主要用来执行 php-cli 命令的容器,例如 artisan, composer, phpunit等。
配置
例如 文件的目录关系如下:
/dev - laradock - code - project-1 - project-2
打开 .env 文件,修改 APPLICATION 的值为项目文件的相对路径,APPLICATION=../code/ 这个路径会映射到 worksapce 容器的 /var/www/ 目录上,(注意任何修改配置文件都需要执行 docker-compose build 容器名字 重新构建相关容器)。进入 nginx/sites 目录,执行 cp project-1.conf.example project-1.conf,修改 docker 让它可以挂载 /dev 目录后,执行 docker-compose restart nginx 重启 nginx ,本地绑定 host 127.0.0.1 project-1.dev,在浏览器中输入 http://project-1.dev 应该就可以看到效果了。
编译自己的扩展
定好的扩展
一般的扩展作者都已经提供了,在 .env 中找到相关的配置选项打开或关闭。
未定义的扩展
如果没有定义我们需要的扩展就需要,就需要我们动手来编译扩展了。比如我们 php-cli 需要 zmq 扩展,首先打开 .env 文件在 WORKSPACE 下面加入 WORKSPACE_INSTALL_ZMP=true 然后打开 docker_composer.yml 在 workspace 的 args 中加入 INSTALL_ZMQ=${WORKSPACE_INSTALL_ZMQ} 然后保存,打开 workspace/Dockerfile-71 (假如我们用的是 php 7.1),找一个合适的位置添加
ARG INSTALL_ZMQ=false ENV INSTALL_ZMQ ${INSTALL_ZMQ} RUN if [ ${INSTALL_ZMQ} = true ]; then # Install the ZMQ extension RUN apt-get -yqq install wget && wget https://github.com/zeromq/libzmq/releases/download/v4.2.1/zeromq-4.2.1.tar.gz && tar -zxvf zeromq-4.2.1.tar.gz && apt-get -yqq remove wget && cd zeromq-4.2.1 && ./configure && make && make install && pecl install zmq-beta && echo "extension=zmq.so" >> /etc/php/7.1/cli/conf.d/40-zmq.ini && cd .. ; ;fi
保存后,重新编译启动 workspace ,进入容器后执行 php -m 发现扩展装上了。
使用dinghy加速mac
dinghy
主要用来在 MAC 上加速 docker 的虚拟机。
安装
brew tap codekitchen/dinghy && brew install dinghy
安装虚拟机
xhyve, virtualbox, vmware fusion, parallels desktop 这四个均可,以parallels desktop 为例。只有 vmware 支持的比较好,其他三个都需要安装驱动。下面以 parallels 为例。
安装 driver
brew install docker-machine-parallels
创建虚拟机
dinghy create --provider parallels 成创建后可以看到都是 running 的状态,可以按要求加入相关环境变量,以便启动 docker 的时候可以找到 dinghy。同时还应该加上挂载目录的配置:
export DINGHY_HOST_MOUNT_DIR=/dev/ export DINGHY_GUEST_MOUNT_DIR=/dev/
配置 dns 和 http-proxy
当运行 docker-compose up -d nginx 的时候,你会发现启动失败,提示 80 和 443 被占用了。是 http-proxy 占用了,这个是默认被打开的。dinghy 很有趣,当打开 dns revole 的时候,默认所有的 .docker 为二级域名的域名都会被 dinghy 的 dns 解析,这个可以被修改,我们打开 $HOME/.dinghy/preferences.yml,在下面加入
:dinghy_domain: dev,所有以 .dev 为二级域名的域名都会被 dinghy 解析。并通过 http-proxy 代理来访问其它容器(如果本地绑定了 host 需要去掉)。下面开始配置:
打开 docker-compose.yml 找到 nginx 的配置选项,去掉 80 和 443 端口的映射。添加新的配置项
environment: - VIRTUAL_HOST=${DINGHY_VIRTUAL_HOST}
然后再 .env 中加入 DINGHY_VIRTUAL_HOST=project-1.dev 多个域名可以用逗号隔开,重新构建 nginx, docker-compose build nginx,然后重启 dinghy。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/23174.html
摘要:默认包含,并作为工作样本。警告如果您使用旧版本的,强烈建议您重建需要使用的容器,了解如何重建容器以防止尽可能多的错误。从环境运行时,必须用多个文件分隔。默认情况下,将创建的容器具有当前目录名称作为后缀例如。 可能你并不清楚 Docker 是什么,更不了解 Laradock是什么,送上语句自己特别喜欢的一句话 Use Docker First And Learn About It Lat...
摘要:本文就介绍如何使用搭建本地环境。讲座介绍是现在火热的一个容器技术,作为开发人员有必要掌握它的使用,无论你是用来搭建本地环境,还是部署应用。 (原文地址:https://blog.tanteng.me/2017/...) Laravel 官方提供 Homestead 和 Valet 作为本地开发环境,Homestead 是一个官方预封装的 Vagrant Box,也就是一个虚拟机,但是跟...
摘要:本文就介绍如何使用搭建本地环境。讲座介绍是现在火热的一个容器技术,作为开发人员有必要掌握它的使用,无论你是用来搭建本地环境,还是部署应用。 (原文地址:https://blog.tanteng.me/2017/...) Laravel 官方提供 Homestead 和 Valet 作为本地开发环境,Homestead 是一个官方预封装的 Vagrant Box,也就是一个虚拟机,但是跟...
摘要:根据不同的项目,使用不同的镜像,搭建开发环境而每一个应用有自己一个独立的运行环境,互不干扰。如何测试人员还是运维人员,也可以根据最新版本的镜像来测试和部署新的测试环境和生产环境。下一步我们从如何利用已有的运行项目来进一步掌握。 showImg(https://segmentfault.com/img/remote/1460000011106825); 什么是 Docker Docke...
摘要:根据不同的项目,使用不同的镜像,搭建开发环境而每一个应用有自己一个独立的运行环境,互不干扰。如何测试人员还是运维人员,也可以根据最新版本的镜像来测试和部署新的测试环境和生产环境。下一步我们从如何利用已有的运行项目来进一步掌握。 showImg(https://segmentfault.com/img/remote/1460000011106825); 什么是 Docker Docke...
阅读 1311·2021-11-24 10:24
阅读 4085·2021-11-22 15:29
阅读 1085·2019-08-30 15:53
阅读 2787·2019-08-30 10:54
阅读 1976·2019-08-29 17:26
阅读 1270·2019-08-29 17:08
阅读 604·2019-08-28 17:55
阅读 1575·2019-08-26 14:01