在Mac上安裝和使用Docker搭建laravel環境
首先當然是下載docker, 推薦使用增強型brew
brew cask install docker
安裝, 其實就是下載了這個文件, 你也可以自己下載這個文件進行手動安裝: https://download.docker.com/mac/stable/17661/Docker.dmg 。100MB出頭, 下載要點時間。安裝成功后我們開始使用
sudo docker version
命令行測試操作, 成功的標志是終端返回docker服務端和客戶端版本信息, 另外請記住服務器上Docker的絕大多數命令都需要在root權限下執行。絕大多數你想的docker配置信息都可以使用docker info
來查看。
測試安裝是否成功
由于Docker在2017年三月的大更新, 導致現在存在CE, EE和以前的Docker老版本, 如果直接使用yum, apt-get, brew install docker/docker.io/docker-io可能會下載到老版本。新版本要求linux內核大于3.8。
現在我們先cd到家目錄, 使用composer創建個laravel程序:
composer create-project laravel/laravel example
。當然你也可以選擇使用git clone https://www.github.com/laravel/laravel.git
下載源碼進行配置, 但是composer創建的好處在于它會自動幫你生成.env配置文件和加密key, 還會自動執行composer install下載依賴(下載慢的話請配置過程compsoer全量鏡像)。下載完了我們進入這個目錄并使用php命令創建內置的測試服務器:
cd && sudo php -S localhost:8080 -t ./public
, 然后訪問localhost:8080, 顯示laravel主頁則關閉php內置服務器, 開始使用dockerfile。(這一步驟使用php命令可能需要管理員權限, 使用php artisan serve不需要管理員權限)我們首先在下載laradock這個寫好dockerfile的一個文件夾:
git clone https://www.github.com/laradock/laradock.git
laradock的官方文檔在這里, 但是很多使用講解不清楚, 出現問題建議查看github源碼托管所的Issues, windwos用戶使用就是各種坑, 一啟動mysql容器就會報錯, 那是因為windows的文件目錄結構和Unix是不同的, 需要在配置文件中修改本地mysql數據保存路徑。windows下模擬的終端環境把盤符都掛在在/mnt目錄下, 所以并沒有真正的超級管理員權限, 使用docker會經常碰到如搜索時權限不足, 內存不足, docker重啟失敗, mysql容器啟動失敗, apache配置文件錯誤等等一系列問題, 我前幾天就是因為受不了這一點菜忍痛借錢買蘋果電腦。
現在你的example和laradock都在~/目錄下, 那么現在進入laradock目錄執行
cp env-example .env
生成環境的配置文件, 并修改.env文件中DB_HOST=mysql, REDIS_HOST=redis, QUEUE_HOST=demo(如果你的mysql安裝在本機127.0.0.1就可以不需要修改這部分, 修改主要是方便上線在內網部署mysql服務器, 這樣修改不需要指定內網mysql的ip地址)。
如圖Docker在pull一個可使用的鏡像, 鏡像是可讀不可寫的, 圖中可見該鏡像有七個添加后的可寫層并被重新構建了images, 現在正在下載壓縮鏡像并解壓鏡像啟動容器, 這個步驟容易出問題, 那就直接去github issues搜索相關問題。
laradock目錄下可以使用環境構建工具docker-compose啟動容器, 例如啟動mysql, apache, redis容器實例各一個:
docker-compose up -d mysql apache2 redis
。docker會查看你本地是否有需要的鏡像, 沒有的話它就會自動根據dockerfile里面的代碼起pull images, then build containers。 一般情況下php-fpm和workspace容器不需要制定就會被啟動, 我們就可以進入workspace容器中使用里面的git, composer, npm, glup等一系列命令:docker-compose exec workspace
。其實每一個容器你都可以進去, 只是推薦進入這個為開發者打造的workspace而已, 你也可以添加參數指定以哪個用戶進入(由于composer不推薦使用默認的root執行compsoer命令), 還可以指定端口, 可以指定進入時候使用何種shell, 我也不知道在Mac上是不是可以指定zsh。默認從國外的docker官方hub下載鏡像非常慢, 建議使用阿里云或者DaoCloud加速器或者更換為國內倉庫。點擊Docker圖標, Preferences, Daemon, 將加速器鏈接添加到下方的鏡像倉庫中應用并重啟即可。你前后使用
docker info
可以查看到鏡像倉庫的改變。當然, 其他平臺也可以使用DaoIcoud官方提供的方法配置加速器: https://www.daocloud.io/mirror#accelerator-doc。
添加鏡像加速服務
查看一下容器啟動情況, 你可以使用
docker ps
查看正在運行的所有容器, 也可以進入laradock目錄只查看laradock中使用docker-compose啟動的容器: docker-composer ps。看到容器啟動成功(和你使用ps aux|grep nginx
類似, 容器啟動成功后又一個容器是會關閉的, 沒任何影響哦)后就訪問localhost或者虛擬余名進行測試吧。修改.env中的配置, 單個項目只需要改成
APPLICATION=../example/
, 多個項目設置不需要改變這個配置文件。修改后重啟Docker容器docker-compose restart
, 可別down銷毀容器哦。
-
其他常用命令:
- 停止所有容器運行
docker-compose stop
, - 停止mysql容器運行
docker-compose stop {container name}
, - 刪除所有容器
docker-compose down
, - 刪除指定容器
docker-compose down {container name}
, - 后臺啟動容器(本地沒有鏡像則會先pull)
docker-compose up -d {container name}
, - 進入容器:
docker-compose exec {container name} bash/zsh
- 查看正在運行的容器
docker-compose ps
, - 查看歷史所有的容器
docker-compose ps -a
, - 查看日志文件
docker logs {container name}
- 重建所有容器
docker-compose build
, - 重建某個容器
docker-compose build {container name}
, - 退出容器
exit
- 停止所有容器運行
其他關于虛擬域名配置, php版本切換, 安裝XDebug, apache和nginx多站點和php拓展安裝大家就看文檔吧, 這部分挺簡單的。laradock作為docker中的homestead稍微有些龐大, 并且使用laradock部署yii和普通的php項目不太合適, 所以我最近轉向使用phpdocker.io, 這是一個可定制的dockerfil生成器, 并且簡潔清爽, 缺點就是官方文檔幾乎沒有。
自己對docker還有一些問題不太清楚, 關于dockerfile和持續集成部署也尚未實戰了解, 希望這次能從曉樂這邊學到很多東西。