Mac使用dinghy和laradock搭建php運行環境

背景

每次更換一個工做用的電腦,都須要很長的時間來搭建本地的運行環境。有時候,爲了安裝一個擴展會折騰半天,並且可能須要安裝多個版本的 php。有人說,集成運行環境不是很好嘛,一次搞定全部的要求。是的,對於新手來講,使用集成包就足夠了。可是集成境包不容易知足定製化的需求,好比某個擴展沒有,仍是得手動編譯安裝,並且這種方式有點太 low 了。 對於 mac 來講,須要卸載自帶的 php ,而後使用 php 安裝器來管理多個版本,這可能會影響本地系統。
這篇博客主要跟你們帶來使用 docker 來搭建本地運行環境,docker 號稱 build once, run anywhere,用於生產環境也能夠哦。等你換一個電腦,從網上 down 下來本身的配置文件,剩下就是網速和時間的問題了。喝一杯咖啡,環境就搭建好了。php

安裝docker

  • 安裝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

  • 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 發現擴展裝上了。

使用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。

相關文章
相關標籤/搜索