建立laravel job,在laradock目錄底下:
docker-compose exec worksapce bash#建立job
php artisan make:controller TestController
php artisan make:job TestJob
TestController
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use App\Jobs\TestJob;class TestController extends Controller
{
//OnQueue可以指定queue
public function index() {
TestJob::dispatch()->onQueue('default');
}
}
Route
Route::get('/test', 'TestController@index');
TestJob.php
<?phpnamespace App\Jobs;use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}/**
* Execute the job.
*
* @return void
*/
public function handle()
{
exec('whoami', $out);
\Log::info($out);
exec('docker ps', $out1);
\Log::info($out1);
}
}
在網址欄輸入http://localhost/test啟動job,再去laravel.log看:
若是docker出來的結果為空,就是在php-worker container裡面,以laradock身分讀取docker.sock會權限不足,在container裡輸入指令:
chown laradock /var/run/docker.sock
就可以用laradock身分讀取docker.sock。
幾個有用的指令
/bin/sh底下
由於php-worker是/bin/sh,當然也可以裝bash,只要在Dockerfile設定一下。
- whoami
可以查看自己的user名稱 - su - laradock
使用docker-compose exec php-worker sh的時候,進去是預設root,可以使用此指令切換user。 - adduser {user名稱} {群組名稱}
ex: adduser laradock root,將laradock加入root群組。 - apk add {套件名稱}
在alpine linux底下的套件安裝指令。
docker-compose
- docker-compose up -d {服務名稱}
沒有服務就建立並啟動,有的話就直接啟動。 - docker-compose restart php-worker
特別寫明php-worker是因為當laravel裡面的Job程式碼改動時,有時候需要重啟php-worker才會生效,此指令就是重啟的功能,更改config - docker-compose build {服務名稱}
有改動Dockerfile時重新編譯以生效,若是沒有可以試試
docker-compose build — no-cache {服務名稱},編譯完須用 force-recreate重新產生container。 - docker-compose build — no-cache {服務名稱} (— 是 兩個-的意思)
視情況使用。 - docker-compose up -d — force-recreate {服務名稱}
build完之後使用,重新產生container。
有用資源:
- https://github.com/docker/docker-install
快速安裝docker command,只需執行2行,不適用在只有/bin/sh環境。
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh - https://stackoverflow.com/questions/54099218/how-can-i-install-docker-inside-an-alpine-container
在alpine下安裝docker指令,alpine只有/bin/sh。
RUN apk add — update docker openrc
RUN rc-update add docker boot - https://itnext.io/docker-in-docker-521958d34efd
主要遇到的錯誤就是
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 或是
/var/run/docker.sock Permission Denied
解決方法是參考這篇。