下一篇,如果對這方法沒興趣直接看第2篇的最後面有些參考指令跟資源。
需求:
已安裝好docker和docker-compose。
目的:
由於公司某個需求,需要在laravel job裡面用docker run執行某個環境複雜的image來處理檔案,所以才會有這一篇文章以記錄,避免忘記。
因為是把本機的docker.sock以volume的模式傳入docker container中,所以感覺並不是很安全,參考時應該注意。
從一個空的目錄開始,到使用job queue執行docker ps指令並將結果log起來,證明docker在jobs中有用,當然也可以跑docker run等指令。
設定laradock
空目錄:
git clone https://github.com/laradock/laradock.git
cd laradock
cp env-example .env
創建一個code資料夾,跟laradock同層。
調整laradock的.env:
APP_CODE_PATH_HOST設為../code。
MYSQL_VERSION設為5.7
在laradcok目錄底下,將laravel-horizon底下的conf複製到php-worker裡面。
cp laravel-horizon/supervisord.d/laravel-horizon.conf.example php-worker/supervisord.d/laravel-horizon.conf
改寫docker-compose.yml,php-worker的部分,將本機的docker.sock放入php-worker中。
在php-worker的Dockerfile裡新增docker
執行
docker-compose up -d mysql nginx php-worker redis
建立laravel
#執行
docker-compose exec workspace bash#出現類似下面的輸出,已經內建了composer跟npm指令
root@5b3931a3ac58:/var/www#composer create-project laravel/laravel blog#把blog資料裡的東西搬到/var/www底下,並刪除blog資料夾
cd blog
mv * ../
mv .* ../
cd ..
rm -r blog#開啟storage、cache權限
chmod -R 777 storage/
chmod -R 777 bootstrap/cache#安裝2個redis套件
composer require predis/predis
composer require ext-redis
打開網頁localhost
連線mysql:
hostname: 127.0.0.1
username: root
password: root
建立一個blog的database,調整laravel裡面的.env
php artisan migrate
注意裡面的DB_HOST必須是mysql不是127.0.0.1
建立laravel job
安裝laravel-horizon:
composer require laravel/horizon
php artisan horizon:install
將laravel的config/database.php裡面redis的client改成:
修改.env,QUEUE_CONNECTION改成redis
訪問網址http://localhost/horizon