Docker: Laravel
好,首先,我要先聽歌冷靜一下……
最近在用 Laravel OAuth。我覺得……Docker 實在是太過難以理解了。你每次用新的 container, 就算用一樣的 image, 一樣的指令,結果會因為不同的用途改動、或安裝問題,結果都不一定一樣。
總之,如果想用 Laravel 的話,建議每次都砍掉 /vendors 目錄後,重下 composer install 指令。
再來幾個問題:
Docker 與 Laravel 的交互
那麼,Docker 怎麼跑 Laravel 呢?最快的辦法,就是裝bitnami/laravel。官方說明你可以下這些指令裝這個 instance:
$ docker network create laravel-network
$ docker volume create --name mariadb_data
docker run -d --name mariadb \
--env ALLOW_EMPTY_PASSWORD=yes \
--env MARIADB_USER=bn_myapp \
--env MARIADB_DATABASE=bitnami_myapp \
--network laravel-network \
--volume mariadb_data:/bitnami/mariadb \
bitnami/mariadb:latest
$ docker run -d --name laravel \
-p 8000:8000 \
--env DB_HOST=mariadb \
--env DB_PORT=3306 \
--env DB_USERNAME=bn_myapp \
--env DB_DATABASE=bitnami_myapp \
--network laravel-network \
--volume ${PWD}/my-project:/app \
bitnami/laravel:latest
……那可不可以直接用 docker-compose-yml 啊?嗯,還真可以。這些指令可以搬的。
# 無所謂
version: "3.3"
services:
# docker volume create --name mariadb_data
mariadb_data:
# --env flag
environment:
# --env ALLOW_EMPTY_PASSWORD=yes \
ALLOW_EMPTY_PASSWORD: yes
# --env MARIADB_USER=bn_myapp \
MARIADB_USER: "bn_myapp"
# --env MARIADB_DATABASE=bitnami_myapp \
MARIADB_DATABASE: "bitnami_myapp"
# --network laravel-network
networks:
- "laravel-network"
# --volume mariadb_data:/bitnami/mariadb
volumes:
- "./mariadb_data:/bitnami/mariadb"
# bitnami/mariadb:latest
image: "bitnami/mariadb:latest"
# docker run -d --name laravel
laravel:
# -p 8000:8000
ports:
- "8000:8000"
environment:
# --env DB_HOST=mariadb
DB_HOST: mariadb
# --env DB_PORT=3306
DB_PORT: 3306
# --env DB_USERNAME=bn_myapp
DB_USERNAME: "bn_myapp"
# --env DB_DATABASE=bitnami_myapp
# mariaDB image 要用 DB_DATABASE
MARIADB_DATABASE: "bitnami_myapp"
# --network laravel-network
networks:
- "laravel-network"
# --volume ${PWD}/my-project:/app
# 但我們改為 my-project 然後不用 ${PWD} 浙東以以避免麻煩
volumes:
- "./my-project:/app"
# bitnami/laravel:latest
image: "bitnami/laravel:latest"
networks:
# docker network create laravel-network
laravel-network:
name: laravel-network
在裝了 Laravel 以後,的 controller 或 model 之類要怎麼產生?我都直接在主機裝自行設定的 PHP 後,再裝 composer 後直接在程式的目錄下 php artisan 指令。
但不對啊,我資料庫如果放在 docker 的 container 的話,我怎麼用資料庫指令?難道不會裝到本機去嗎?
所以資料庫相關的指令如 php artisan migrate
要這樣下:
$ docker exec {container名字} php artisan migrate
$ # 注意每個 container 名字都不一樣。你需要看 docker 是怎麼寫的。
$ # 比方上面的例子,下下去就會是這樣:
$ docker exec laravel php artisan migrate
也就是在你的 Laravel container 下 php artisan migrate。這樣 Laravel container 就會對 MariaDB container 做動作了。
phpmyadmin 與 Laravel
那能不能裝 phpmyadmin 呢?答案是可以。
pma:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80"
depends_on:
- mariadb_data
networks:
- "laravel"
environment:
PMA_HOST: mariadb_data
PMA_PORT: 3306
然後加到與 laravel:
同層就可以了。注意 networks
與 environment.PMA_HOST
都要用。
Socialize
難用。
SSL certificate problem: unable to get local issuer certificate
是怎麼一回事?- 憑證問題。localhost 會有問題。請從 curl.haxx.se 裝憑證解決。
InvalidStateException
又是如何?- 請去
config/session.php
設定。
- 請去