我平時使用的環境是 Homestead
,我真不想說它是有多方便。但是最近一個專案沒法使用它了。因為要使用 PHP5.4
的版本,homestead
如果切換版本這個問題我一直沒搞明白,所以沒辦法,轉去用了 mamp
,然後你就會發現 mamp
真垃圾啊。超級不好用。沒辦法繼續研究 docker
.於是發現了 laradock
,這個傢伙是真心好用,可惜在低版本時會遇到一些問題。其它也不是 Laradock
的問題,這裡記錄一下。
安裝docker
安裝這裡就省略掉吧。配置這裡需要注意一下,因為眾所周知的原因,需要把 Docker
切換到國內映象(我曾經因為沒有配置映象多次安裝失敗,心累!)
點選 Docker-> Preferences->daemon->registry mirrors
,這裡可以新增國內映象,可以使用網易或阿里雲的映象地址,這裡不是重點。預設你新增完了,繼續向下吧
安裝Laradock
其它官方文件已經非常全面了,我只簡單寫下,主要是記錄出錯的解決方法
1 - 克隆專案到本地
git clone https://github.com/Laradock/laradock.git
2 - 重新命名 env-example
到 .env
。
cd laradock
cp env-example .env
3 - 執行容器
docker-compose up -d nginx mysql redis beanstalkd
4 -開啟瀏覽器並訪問本地主機:http://localhost
。
That's it! enjoy :)
上面幾個步驟其實已經把 docker
執行起來了,是不是相當的簡單?但是我可以有一些其它的需求,比如,我現在的專案是比較老的專案,使用的是TP3.1
的框架,需要使用的 PHP
版本為 5.4
,需要同時使用 mongo
和 mysql
這兩種資料庫,這裡就需要對 laradock
進行一些配置的更改了
重點在這裡,配置laradock
我們先去檢視一下 .env
檔案,這裡常規配置
############################
# General Setup
############################
### Application Path
# Point to your application code, will be available at `/var/www`.
//APPLICATION=../ 這裡是共享站點目錄的位置,也就是當前的laradock目錄的上級,為了方便管理,我在laradock的同級目錄建了一個WWW目錄做為網站目錄,於是這裡我改成下面了
APPLICATION=../www/
### Data Path:
# For all storage systems.
//資料庫地址。這裡可以使用預設,
DATA_SAVE_PATH=~/.laradock/data
### PHP version
# Applies to the Workspace and PHP-FPM containers (Does not apply to HHVM)
//這裡是PHP預設支援的版本。只有三個選擇,我只好選擇5.6了
# Accepted values: 71 - 70 - 56
//PHP_VERSION=71 修改為
PHP_VERSION=56
### PHP interpreter
# Accepted values: hhvm - php-fpm
PHP_INTERPRETER=php-fpm
繼續向下就是一個 PHP
的擴充套件的配置,你需要開啟什麼擴充套件,就把他後面的 false
改成 true
,我需要使用 mongo
, mysql
和 redis
,所以只需要改這個幾,但是 LDAP
和 V8JS
也需要一起改,因為不改他們也會報錯,這裡不詳細說了。
### WORKSPACE ##########################################################################################################
WORKSPACE_INSTALL_XDEBUG=false
WORKSPACE_INSTALL_LDAP=true
WORKSPACE_INSTALL_SOAP=false
WORKSPACE_INSTALL_MONGO=false
WORKSPACE_INSTALL_PHPREDIS=true
WORKSPACE_INSTALL_MSSQL=false
WORKSPACE_INSTALL_NODE=false
WORKSPACE_INSTALL_YARN=false
WORKSPACE_INSTALL_DRUSH=false
WORKSPACE_INSTALL_DRUPAL_CONSOLE=false
WORKSPACE_INSTALL_AEROSPIKE=false
WORKSPACE_INSTALL_V8JS=true
WORKSPACE_COMPOSER_GLOBAL_INSTALL=false
WORKSPACE_INSTALL_WORKSPACE_SSH=false
WORKSPACE_INSTALL_LARAVEL_ENVOY=false
WORKSPACE_INSTALL_LARAVEL_INSTALLER=false
WORKSPACE_INSTALL_DEPLOYER=false
WORKSPACE_INSTALL_LINUXBREW=false
WORKSPACE_INSTALL_MC=false
WORKSPACE_INSTALL_SYMFONY=false
WORKSPACE_INSTALL_PYTHON=false
WORKSPACE_INSTALL_IMAGE_OPTIMIZERS=false
WORKSPACE_INSTALL_IMAGEMAGICK=false
WORKSPACE_INSTALL_TERRAFORM=false
WORKSPACE_INSTALL_DUSK_DEPS=false
WORKSPACE_PUID=1000
WORKSPACE_PGID=1000
WORKSPACE_CHROME_DRIVER_VERSION=2.32
WORKSPACE_NODE_VERSION=stable
WORKSPACE_YARN_VERSION=latest
WORKSPACE_TIMEZONE=UTC
WORKSPACE_SSH_PORT=2222
### PHP_FPM ############################################################################################################
PHP_FPM_INSTALL_XDEBUG=false
PHP_FPM_INSTALL_MONGO=false
PHP_FPM_INSTALL_MONGO_OLD=true
PHP_FPM_INSTALL_MSSQL=false
PHP_FPM_INSTALL_SOAP=false
PHP_FPM_INSTALL_ZIP_ARCHIVE=false
PHP_FPM_INSTALL_BCMATH=false
PHP_FPM_INSTALL_PHPREDIS=true
PHP_FPM_INSTALL_MEMCACHED=false
PHP_FPM_INSTALL_OPCACHE=false
PHP_FPM_INSTALL_EXIF=false
PHP_FPM_INSTALL_AEROSPIKE=false
PHP_FPM_INSTALL_MYSQLI=true
PHP_FPM_INSTALL_POSTGRES=false
PHP_FPM_INSTALL_TOKENIZER=false
PHP_FPM_INSTALL_INTL=false
PHP_FPM_INSTALL_GHOSTSCRIPT=false
PHP_FPM_INSTALL_LDAP=true
PHP_FPM_INSTALL_SWOOLE=false
PHP_FPM_INSTALL_IMAGE_OPTIMIZERS=false
PHP_FPM_INSTALL_IMAGEMAGICK=false
這裡你會發現我的配置檔案比你的配置多出了一行
PHP_FPM_INSTALL_MONGO_OLD=true
沒錯,原本的配置檔案裡是沒有這一行的,這個問題是因為PHP5.6
版本的問題,如果直接使用原本的 PHP_FPM_INSTALL_MONGO=true
這個配置,最後你會發現這樣的報錯 ,
Error: Class 'MongoClient' not found
這個問題在 laradock
的 issue
裡已經有人遇到過,地址在這裡,雖然官方沒有修復,但是已經有人提出瞭解決方法,地址在這裡,好的,我們來看解決方法,需要更改以下三個檔案。
docker-compose.yml
檔案。
INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP}
INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}
//多加了這裡
INSTALL_MONGO_OLD=${PHP_FPM_INSTALL_MONGO_OLD}
INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
INSTALL_ZIP_ARCHIVE=${PHP_FPM_INSTALL_ZIP_ARCHIVE}
INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
env-example
檔案,當然別忘記 .env
檔案。
PHP_FPM_INSTALL_XDEBUG=false
PHP_FPM_INSTALL_MONGO=false
//這裡多加了一行程式碼,別忘記改成true
PHP_FPM_INSTALL_MONGO_OLD=false
PHP_FPM_INSTALL_MSSQL=false
PHP_FPM_INSTALL_SOAP=false
PHP_FPM_INSTALL_ZIP_ARCHIVE=false
php-fpm/Dockerfile-56
檔案,後面的 56
對應是的 PHP
的版本號,在原本的 MongoBD
前面加入了 Mongo(old)
.
#####################################
# Mongo (old):
#####################################
ARG INSTALL_MONGO_OLD=false
RUN if [ ${INSTALL_MONGO_OLD} = true ]; then \
# Install the mongo extension
pecl install mongo && \
docker-php-ext-enable mongo \
;fi
#####################################
# MongoDB:
#####################################
OK。。現在配置檔案搞定了,去重新 build
一下吧,記得,你改過配置的都需要重新 build
。
docker-composer build php-fpm workspace
時間可能會久一些,抽根菸等一下吧。等到程式碼跑完就OK了,現在可以啟動了
docker-compose up -d nginx mongo mysql redis beanstalkd phpmyadmin
開啟 localhost
,你又會看到熟悉的 LARAVEL
標誌了,當然,我這裡顯示的是 歡迎使用Thinkphp
。
本作品採用《CC 協議》,轉載必須註明作者和本文連結