每次更換一個工做用的電腦,都須要很長的時間來搭建本地的運行環境。有時候,爲了安裝一個擴展會折騰半天,並且可能須要安裝多個版本的 php。有人說,集成運行環境不是很好嘛,一次搞定全部的要求。是的,對於新手來講,使用集成包就足夠了。可是集成境包不容易知足定製化的需求,好比某個擴展沒有,仍是得手動編譯安裝,並且這種方式有點太 low 了。 對於 mac 來講,須要卸載自帶的 php ,而後使用 php 安裝器來管理多個版本,這可能會影響本地系統。
這篇博客主要跟你們帶來使用 docker 來搭建本地運行環境,docker 號稱 build once, run anywhere,用於生產環境也能夠哦。等你換一個電腦,從網上 down 下來本身的配置文件,剩下就是網速和時間的問題了。喝一杯咖啡,環境就搭建好了。php
安裝Homebrew mysql
Homebrew 能夠說填補了 mac 包管理工具的空缺,安裝起來很是簡單。nginx
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝 dockerlaravel
brew install docker docker-machine docker-compose
Docker 和傳統意義的虛擬機相比,Docker 運行在進程的命名空間內,並無提供操做系統層的抽象,直接使用主機的資源。
docker-machine 有點相似虛擬機了,Docker 能夠運行在其中。因爲 Mac 文件系統的限制,Docker 運行在 Mac OS 上有明顯延遲,這也就是後面要用 dinghy 加速的緣由。
docker-compose 單獨的容器只能夠提供比較單一的服務,經過 docker-compose 來管理容器,定義容器之間的依賴關係等,來知足應用級別的須要。
官方文檔git
或者能夠經過 Docker For Mac 的安裝包進行安裝,也很簡單。github
laradock redis
laradock 是經過 docker-compose 來構建的,旨在方便地提供 laravel 的運行環境。作適當的修改能夠很方便的當作 php 的開發環境。sql
安裝docker
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
發現擴展裝上了。
主要用來在 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。