建立於: 5年前 ( 更新: 5年前 )
前言
D-Laravel是一個採用Docker進行的PHP執行環境,將所有的服務放入容器中執行,
資料庫的服務(db),網頁伺服器的服務(web),PHP-FPM的服務(php)...等,
經由定義docker-compose.yml檔,我們能輕易調整資料庫的版本或PHP版本。
D-Laravel同時建立了簡易的bash,可幫我們更快速的採用docker,來建立Laravel的專案,並且完成資料庫設定。
就算您單純只是個PHP的開發著,其實也是可以透過D-Laravel,打造自己的開發環境的。
接下來,讓我們借由Docker官方文件,來理解D-Laravel做了那些設定。
請點下方藍色連結查看說明: (往下捲動提供簡易的中文說明)
最後,期盼本文可以讓您理解docker-compose.yml的設定方式,
進而產生或調整出符合您需求的環境設定。
資料庫的服務(db),網頁伺服器的服務(web),PHP-FPM的服務(php)...等,
經由定義docker-compose.yml檔,我們能輕易調整資料庫的版本或PHP版本。
D-Laravel同時建立了簡易的bash,可幫我們更快速的採用docker,來建立Laravel的專案,並且完成資料庫設定。
就算您單純只是個PHP的開發著,其實也是可以透過D-Laravel,打造自己的開發環境的。
接下來,讓我們借由Docker官方文件,來理解D-Laravel做了那些設定。
關於docker-compose.yml設定
以下為D-Laravel v1.6.10版之docker-compose-normal.yml檔。請點下方藍色連結查看說明: (往下捲動提供簡易的中文說明)
version: '3.6'
services:
#=== 網頁伺服器的container ======================
web:
image: nginx
dns: 8.8.8.8
ports:
- "80:80"
- "443:443"
volumes:
- ./sites:/var/www/html
- ./etc:/etc/nginx/conf.d
- ./var/log/web:/var/log/nginx
hostname: web
networks:
- dlaravel_net
#=== PHP-FPM container ==========================
### Laravel 5.6/5.7 >= 7.1.3
### Laravel 5.5 >= 7.0.0
### Laravel 5.4 >= 5.6.4
### Laravel 5.3 between 5.6.4 & 7.1.*
php:
network_mode: "service:web"
image: deviny/fpm:7.2.10
#image: deviny/fpm:7.1.22
#image: deviny/fpm:7.0.32
#image: deviny/fpm:5.6.38
volumes:
- ./etc/php:/usr/local/etc/php/conf.d
- ./sites:/var/www/html
- ./etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
###建立composer cache###
- ./etc/cache:/home/dlaravel/.composer/cache
#- ./var/log/php:/var/log
#- ./etc/supervisor:/etc/supervisor/conf.d
#- ./var/log/supervisor:/var/log/supervisor
environment:
- TZ=Asia/Taipei
#- PHP_IDE_CONFIG=serverName=dlaravel
#- XDEBUG_CONFIG="remote_host=???? profiler_enable=1"
#建立bash_aliases在etc下,可用來自訂dlaravel使用者的環境變數
#- ./etc/bash_aliases:/home/dlaravel/.bash_aliases
#=== 資料庫 container ===========================
db:
image: mysql:5.7.19
hostname: db
ports:
- "127.0.0.1:3306:3306"
volumes:
- ./etc/mysql/my.cnf:/etc/mysql/my.cnf
- ./data:/var/lib/mysql
environment:
#- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD-secret}
- MYSQL_ALLOW_EMPTY_PASSWORD= "yes"
- TZ=Asia/Taipei
networks:
- dlaravel_net
#=== top-level netowks key ======================
networks:
dlaravel_net:
簡短的中文說明
services:
#=== 網頁伺服器的container ======================
web:
image: nginx
dns: 8.8.8.8
ports:
- "80:80"
- "443:443"
volumes:
- ./sites:/var/www/html
- ./etc:/etc/nginx/conf.d
- ./var/log/web:/var/log/nginx
hostname: web
networks:
- dlaravel_net
#=== PHP-FPM container ==========================
### Laravel 5.6/5.7 >= 7.1.3
### Laravel 5.5 >= 7.0.0
### Laravel 5.4 >= 5.6.4
### Laravel 5.3 between 5.6.4 & 7.1.*
php:
network_mode: "service:web"
image: deviny/fpm:7.2.10
#image: deviny/fpm:7.1.22
#image: deviny/fpm:7.0.32
#image: deviny/fpm:5.6.38
volumes:
- ./etc/php:/usr/local/etc/php/conf.d
- ./sites:/var/www/html
- ./etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
###建立composer cache###
- ./etc/cache:/home/dlaravel/.composer/cache
#- ./var/log/php:/var/log
#- ./etc/supervisor:/etc/supervisor/conf.d
#- ./var/log/supervisor:/var/log/supervisor
environment:
- TZ=Asia/Taipei
#- PHP_IDE_CONFIG=serverName=dlaravel
#- XDEBUG_CONFIG="remote_host=???? profiler_enable=1"
#建立bash_aliases在etc下,可用來自訂dlaravel使用者的環境變數
#- ./etc/bash_aliases:/home/dlaravel/.bash_aliases
#=== 資料庫 container ===========================
db:
image: mysql:5.7.19
hostname: db
ports:
- "127.0.0.1:3306:3306"
volumes:
- ./etc/mysql/my.cnf:/etc/mysql/my.cnf
- ./data:/var/lib/mysql
environment:
#- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD-secret}
- MYSQL_ALLOW_EMPTY_PASSWORD= "yes"
- TZ=Asia/Taipei
networks:
- dlaravel_net
#=== top-level netowks key ======================
networks:
dlaravel_net:
語法 | 中文說明 |
---|---|
version: '3.6' | 非常明顯,就是compose-file的版本囉,不同docker-compose檔案版本會使用不同的Docker釋出版本。關於版本的相容請參看此文件 |
services | 在分佈式應用程式中,應用程式的不同部分稱為“服務”。例如,如果您想像一個視訊共享站點,它可能包括一個用於將應用程式資料存儲在資料庫中的服務,一個用於在後台進行視訊轉碼的服務。 用戶上傳內容,前端服務等。 服務實際上就是“建立出的容器”。服務會運行一個映像(image)檔,但服務中編寫了映像(Image)檔的執行方式 - 像是應該使用哪些連接埠(ports),應該執行多少個容器副本,及服務具有所需容量等等。 擴展服務會調整運行在該應用程式中的容器實例的數量,從而為流程中的服務分配更多計算資源。 幸運的是,使用Docker平台定義,運行和擴展服務非常容易 - 只需編寫一個docker-compose.yml文件即可。 (作者註: 我想這裡指的服務是在Docker swarm mode下的服務,一個Service有多個Task,所以可以Scale,在D-Laravel的stack.yml中,有類似的定義像是一個web的服務replicas了4個task,這屬於進階的運用,我們可以不需理會。) ===== 上面我用Goolge翻譯後,小調整的,所以看了是不是覺的頭昏了,簡單說,services的字面上看,有s嘛,複數,所以services下是有多個服務的,以D-Laravel為例,主要有三個服務,分別是web、php、db。 這也是為何,在D-Laravel建好的Project中,會把Laravel的.env的資料庫主機(DB_HOST)指到了db服務,非127.0.0.1囉。
|
image | 定義要使用那個映象檔。docker的映像檔主要是由dockerfile產生的。 我可以在DockerHub上搜尋不同的印象檔,但請盡量選擇標示為官方版本的印像檔才是安全的。 |
dns |
自訂的DNS伺服器。可以一個或多個。
|
ports | 定義要暴露的連接埠(Expose ports)。 在docker文件中,host指的,就是我們執行docker的主機。透過了posts的設定,我們才能連到container內開啟的連接埠。 |
volumes | 掛載主機端的目錄到容器內。在docker-compose的環境,當我們執行docker-compose down時,容器是會被移掉的,所以透過volumes的掛載,我們才能保留我們的資料。 當然Volume(卷宗)的使用決對不僅於此,請自行查看官方文件說明。 |
environment | 新增環境變數,在container中打env即可看到我們定義的環境變數。 |
hostname | 直接翻譯主機名稱,非常明顯囉,定義了容器執行時使用的稱,而非顯示Container ID。 |
networks | 在docker-compose的設定中,相同網路下的"服務"是可以互ping的,所以,我們可以看見,web及db服務都是使用了
這代表了,我們在web的容器內能ping到db的服務。我們可以發現到--links的方式以列為不建議使用了,所以D-Laravel的設定,並不採用links的方式,進行container之間的連接。 |
network_mode: "service:web" | 在php的服務下,是否發覺了這個network_mode的設定呢?
php的服務主要是php-fpm,他會開啟port 9000,這裡的策略上將他開啟的連接埠綁到了,web的服務了,這樣在整合Laravel Dusk運用時才不會有問題。 並無規定php-fpm一定要採用此方式,當然如果您調整為networks的方式時,您必需手動變更nginx的設定。 例如: etc/default.conf。 將原來的web變更為php如下,代表了php的服務已不是使用network_mode綁定在web的服務上了。
變更為
|
進而產生或調整出符合您需求的環境設定。
No Comment
Post your comment