參考資料
docker
https://www.minwt.com/website/server/20822.html
docker指令
https://blog.longwin.com.tw/2017/01/docker-learn-initial-command-cheat-sheet-2017/
利用 Dockfile、Docker Compose 建立 LAMP 環境 (PHP、Apache、MySQL)
https://hackmd.io/@titangene/docker-lamp
adminer
https://www.minwt.com/website/server/18404.html
https://banbanpeppa.github.io/2019/01/24/docker/docker-mysql-adminer/
docker mariaDB
https://hub.docker.com/_/mariadb
adminer缺少mysqli擴展
https://www.twblogs.net/a/5cac8989bd9eee2dd0f290aa?lang=zh-cn
php extension
https://kejyuntw.gitbooks.io/devops-learning-notes/content/drone/debug/drone-debug-php-extension-sockets-is-missing.html
composer 安裝
https://getcomposer.org/download/
docker caddy
https://hub.docker.com/_/caddy?tab=description
caddy反向代理
https://www.yuyang.io/post/caddy-proxy-docker-wordpress/
Laravel 在 Docker 環境下訪問 storage 靜態資源 404 問題解決
https://iter01.com/460382.html
流程
- 安裝docker
- 安裝docker-compose
- docker安裝caddy映象檔
- docker安裝php映象檔
- docker安裝mysql映象檔
- 使用docker-compose將服務啟動
- 建立caddyfile寫入設定值
- 建立phpinfo
- 確定caddy連線正常
- 進入PHP的容器
- 安裝php擴充套件
- 安裝composer
- 利用composer安裝laravel專案
laravel 6
laravel本身是以PHP這個語言所建立的框架,所以基本上就需要有PHP的環境
laravel 6官方所需要的環境:
- PHP >= 7.2.5
- BCMath PHP Extension
- Ctype PHP Extension
- Fileinfo PHP Extension
- JSON PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PDO PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
由於本身的mamp是使用php 7.4.1,所以這邊就以php 7.4.1作為環境
實際安裝版本:
- php 7.4.1
- caddy 2.3
- mariaDB 10.5
docker pull php:7.4.15-fpm
docker pull caddy:2.3.0-alpine
docker composer
sudo apt install docker-compose
若您之後使用 docker 指令時不想要一直打 sudo 的話,可以依照官方的建議將自己的帳號加到 docker 這個群組:
sudo usermod -aG docker shengyou
不過要提醒您的是,由於我們目前是在自己的本機端建置開發環境,所以這樣設定比較沒有安裝性風險。但若是在正式機上建置 Docker 的話,則建議您閱讀一下官方文件,了解這樣設定可能帶來的風險。
###docker composer.yml設置
設置caddy及php
version: "3"
services:
caddy:
restart: unless-stopped
image: caddy:2.3.0-alpine
container_name: caddy
ports:
- 80:80
- 443:443
volumes:
- ./volumes/caddy:/etc/caddy
- ./volumes/www:/usr/share/caddy
php:
restart: unless-stopped
image: php:7.4.15-fpm
container_name: php
volumes:
- ./volumes/www:/var/www/htmls
caddyfile:
要注意php_fastcgi這樣設定以避免拿不到根目錄
localhost
root * /usr/share/caddy
php_fastcgi php:9000 {
root /var/www/html
}
file_server
可以在www目錄下新增一個PHPINFO:
<?php
echo phpinfo();
?>
瀏覽器輸入localhost
出現這個畫面代表OK

安裝mysql以及管理器
管理器使用adminer 較為輕量化
docker pull mariadb:10.5
串起來會有問題

要進PHP裡面增加模組
terminal進入docker容器的方法
docker exec -it hash-id /bin/sh
安裝系統所需套件
apt-get update -y && apt-get install -y zlib1g-dev libpng-dev unzip libzip-dev
安裝PHP套件
以下程式還沒有連接在一起,需一個一個執行
docker-php-ext-install zip
docker-php-ext-install gd
docker-php-ext-install sockets
docker-php-ext-install pdo_mysql
docker-php-ext-install bcmath
請注意由於我們是利用容器間連接,所以伺服器那邊需填入「db」(compose.yml 內的設定名稱)

php composer
一樣在PHP內安裝composer
安裝 composer 後,將composer.phar指令移動到/bin/裡面並改名為composer,方便安裝其他的composer套件。
sudo mv composer.phar /usr/bin/composer
laravel
依官方說明利用composer 安裝laravel框架套件
composer global require laravel/installer
執行laravel new app
會出現 command not found
因為沒有把composer內的指令寫到系統變數中
而docker這版php的composer是安裝在/root/.composer/內
composer套件安裝位置可利用
composer global about
查詢
使用vim等編輯器開啟~/.bashrc並加入:
export PATH=/root/.composer/vendor/bin:$PATH
然後重讀.bashrc:
source ~/.bashrc
執行
laravel new app
這個方式會安裝最新版的laravel,若要安裝其他版本的需直接用composer指令來處理
composer create-project --prefer-dist laravel/laravel app "6.*"
瀏覽localhost/app/public
出現如下圖即代表安裝成功

但因為整個laravel專案是建立在掛載出來的volume上,所以一般來說也可以直接透過本機安裝好的composer來處理這個專案
測試mysql
先利用adminer之類的建立新資料庫以及使用者供laravel使用
設定app/.env內的設定檔,注意DB_HOST設定為db (docker用的名稱)
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=apdc
DB_PASSWORD=b1201b1200
在docker的PHP容器內執行
php artisan migrate
若有成功migrate即代表laravel與資料庫連結沒有問題
權限設定
若發現CSS等設定有帶到,但圖片是回傳404,請執行下列步驟
chown -R www-data:www-data 專案資料夾
chmod -R 775 專案資料夾
於專案資料夾內執行
php artisan storage:link
docker內的php有時後無法以上面的指令建立軟連結,所以需使用另一種指令方式
進入public/內執行:ln -sf ../storage/app/public storage
將設定好的資料存到image
看一下要存的image ID
docker ps
將變動存到image裡
docker commit {image ID} {要存的檔名}
將image另存成一個tar檔
docker save {image名稱} > {存的名稱}.tar
讀取image
docker load < {image名稱}
LINUX
在LINUX上處理有任何連線問題,請先確定防火牆的設定,centos7的SELinux以及filwall都是預設開啟的
神奇的錯誤
若出現以下錯誤
iptables: No chain/target/match by that name
-
請在系統執行
sudo iptables -t filter -F sudo iptables -t filter -X
-
重啟docker服務
systemctl restart docker