摘要:配置例如文件的目錄關(guān)系如下打開文件,修改的值為項目文件的相對路徑,這個路徑會映射到容器的目錄上,注意任何修改配置文件都需要執(zhí)行容器名字重新構(gòu)建相關(guān)容器。
背景
每次更換一個工作用的電腦,都需要很長的時間來搭建本地的運行環(huán)境。有時候,為了安裝一個擴(kuò)展會折騰半天,而且可能需要安裝多個版本的 php。有人說,集成運行環(huán)境不是很好嘛,一次搞定所有的要求。是的,對于新手來說,使用集成包就足夠了。但是集成境包不容易滿足定制化的需求,比如某個擴(kuò)展沒有,還是得手動編譯安裝,而且這種方式有點太 low 了。 對于 mac 來說,需要卸載自帶的 php ,然后使用 php 安裝器來管理多個版本,這可能會影響本地系統(tǒng)。
這篇博客主要跟大家?guī)硎褂?docker 來搭建本地運行環(huán)境,docker 號稱 build once, run anywhere,用于生產(chǎn)環(huán)境也可以哦。等你換一個電腦,從網(wǎng)上 down 下來自己的配置文件,剩下就是網(wǎng)速和時間的問題了。喝一杯咖啡,環(huán)境就搭建好了。
安裝Homebrew
Homebrew 可以說填補(bǔ)了 mac 包管理工具的空缺,安裝起來非常簡單。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝 docker
brew install docker docker-machine docker-compose
Docker 和傳統(tǒng)意義的虛擬機(jī)相比,Docker 運行在進(jìn)程的命名空間內(nèi),并沒有提供操作系統(tǒng)層的抽象,直接使用主機(jī)的資源。
docker-machine 有點類似虛擬機(jī)了,Docker 可以運行在其中。由于 Mac 文件系統(tǒng)的限制,Docker 運行在 Mac OS 上有明顯延遲,這也就是后面要用 dinghy 加速的原因。
docker-compose 多帶帶的容器只可以提供比較單一的服務(wù),通過 docker-compose 來管理容器,定義容器之間的依賴關(guān)系等,來滿足應(yīng)用級別的需要。
官方文檔
使用laradock或者可以通過 Docker For Mac 的安裝包進(jìn)行安裝,也很簡單。
laradock
laradock 是通過 docker-compose 來構(gòu)建的,旨在方便地提供 laravel 的運行環(huán)境。做適當(dāng)?shù)男薷目梢院芊奖愕漠?dāng)做 php 的開發(fā)環(huán)境。
安裝
git clone https://github.com/laradock/laradock.git
簡介
進(jìn)入到 laradock 的目錄,看到有很多文件夾和文件,其中最重要的就是 env-example,docker-compose.yml以及各個目錄里的 Dockerfile 文件了。env-example 的環(huán)境配置文件的樣例,后兩者有很多變量都是在這個文件中定義的。
初運行
啟動 docker,進(jìn)入到 laradock 的目錄,執(zhí)行
cp env-example .env docker-compose up -d mysql redis nginx # 啟動相關(guān)容器 docker-compose ps # 查看進(jìn)程 docker-compose exec 容器名字 sh # 進(jìn)入相關(guān)容器
通過ps可以看到有6個進(jìn)程啟動了,分別是 application, workspace, php-fpm, nginx, redis, mysql。 其中 php-fpm 是 nginx 所依賴的容器, appliction 代表整個應(yīng)用,workspace 是主要用來執(zhí)行 php-cli 命令的容器,例如 artisan, composer, phpunit等。
配置
例如 文件的目錄關(guān)系如下:
/dev - laradock - code - project-1 - project-2
打開 .env 文件,修改 APPLICATION 的值為項目文件的相對路徑,APPLICATION=../code/ 這個路徑會映射到 worksapce 容器的 /var/www/ 目錄上,(注意任何修改配置文件都需要執(zhí)行 docker-compose build 容器名字 重新構(gòu)建相關(guān)容器)。進(jìn)入 nginx/sites 目錄,執(zhí)行 cp project-1.conf.example project-1.conf,修改 docker 讓它可以掛載 /dev 目錄后,執(zhí)行 docker-compose restart nginx 重啟 nginx ,本地綁定 host 127.0.0.1 project-1.dev,在瀏覽器中輸入 http://project-1.dev 應(yīng)該就可以看到效果了。
編譯自己的擴(kuò)展
定好的擴(kuò)展
一般的擴(kuò)展作者都已經(jīng)提供了,在 .env 中找到相關(guān)的配置選項打開或關(guān)閉。
未定義的擴(kuò)展
如果沒有定義我們需要的擴(kuò)展就需要,就需要我們動手來編譯擴(kuò)展了。比如我們 php-cli 需要 zmq 擴(kuò)展,首先打開 .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 ,進(jìn)入容器后執(zhí)行 php -m 發(fā)現(xiàn)擴(kuò)展裝上了。
使用dinghy加速mac
dinghy
主要用來在 MAC 上加速 docker 的虛擬機(jī)。
安裝
brew tap codekitchen/dinghy && brew install dinghy
安裝虛擬機(jī)
xhyve, virtualbox, vmware fusion, parallels desktop 這四個均可,以parallels desktop 為例。只有 vmware 支持的比較好,其他三個都需要安裝驅(qū)動。下面以 parallels 為例。
安裝 driver
brew install docker-machine-parallels
創(chuàng)建虛擬機(jī)
dinghy create --provider parallels 成創(chuàng)建后可以看到都是 running 的狀態(tài),可以按要求加入相關(guān)環(huán)境變量,以便啟動 docker 的時候可以找到 dinghy。同時還應(yīng)該加上掛載目錄的配置:
export DINGHY_HOST_MOUNT_DIR=/dev/ export DINGHY_GUEST_MOUNT_DIR=/dev/
配置 dns 和 http-proxy
當(dāng)運行 docker-compose up -d nginx 的時候,你會發(fā)現(xiàn)啟動失敗,提示 80 和 443 被占用了。是 http-proxy 占用了,這個是默認(rèn)被打開的。dinghy 很有趣,當(dāng)打開 dns revole 的時候,默認(rèn)所有的 .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 多個域名可以用逗號隔開,重新構(gòu)建 nginx, docker-compose build nginx,然后重啟 dinghy。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/23174.html
摘要:默認(rèn)包含,并作為工作樣本。警告如果您使用舊版本的,強(qiáng)烈建議您重建需要使用的容器,了解如何重建容器以防止盡可能多的錯誤。從環(huán)境運行時,必須用多個文件分隔。默認(rèn)情況下,將創(chuàng)建的容器具有當(dāng)前目錄名稱作為后綴例如。 可能你并不清楚 Docker 是什么,更不了解 Laradock是什么,送上語句自己特別喜歡的一句話 Use Docker First And Learn About It Lat...
摘要:本文就介紹如何使用搭建本地環(huán)境。講座介紹是現(xiàn)在火熱的一個容器技術(shù),作為開發(fā)人員有必要掌握它的使用,無論你是用來搭建本地環(huán)境,還是部署應(yīng)用。 (原文地址:https://blog.tanteng.me/2017/...) Laravel 官方提供 Homestead 和 Valet 作為本地開發(fā)環(huán)境,Homestead 是一個官方預(yù)封裝的 Vagrant Box,也就是一個虛擬機(jī),但是跟...
摘要:本文就介紹如何使用搭建本地環(huán)境。講座介紹是現(xiàn)在火熱的一個容器技術(shù),作為開發(fā)人員有必要掌握它的使用,無論你是用來搭建本地環(huán)境,還是部署應(yīng)用。 (原文地址:https://blog.tanteng.me/2017/...) Laravel 官方提供 Homestead 和 Valet 作為本地開發(fā)環(huán)境,Homestead 是一個官方預(yù)封裝的 Vagrant Box,也就是一個虛擬機(jī),但是跟...
摘要:根據(jù)不同的項目,使用不同的鏡像,搭建開發(fā)環(huán)境而每一個應(yīng)用有自己一個獨立的運行環(huán)境,互不干擾。如何測試人員還是運維人員,也可以根據(jù)最新版本的鏡像來測試和部署新的測試環(huán)境和生產(chǎn)環(huán)境。下一步我們從如何利用已有的運行項目來進(jìn)一步掌握。 showImg(https://segmentfault.com/img/remote/1460000011106825); 什么是 Docker Docke...
摘要:根據(jù)不同的項目,使用不同的鏡像,搭建開發(fā)環(huán)境而每一個應(yīng)用有自己一個獨立的運行環(huán)境,互不干擾。如何測試人員還是運維人員,也可以根據(jù)最新版本的鏡像來測試和部署新的測試環(huán)境和生產(chǎn)環(huán)境。下一步我們從如何利用已有的運行項目來進(jìn)一步掌握。 showImg(https://segmentfault.com/img/remote/1460000011106825); 什么是 Docker Docke...
閱讀 1317·2021-11-24 10:24
閱讀 4145·2021-11-22 15:29
閱讀 1088·2019-08-30 15:53
閱讀 2794·2019-08-30 10:54
閱讀 1981·2019-08-29 17:26
閱讀 1287·2019-08-29 17:08
閱讀 608·2019-08-28 17:55
閱讀 1583·2019-08-26 14:01