您好,登錄后才能下訂單哦!
這篇文章給大家介紹Docker中怎么部署LNMP環境,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
整個流程:
客戶端http請求服務器80端口,該端口被映射到Nginx容器80端口,進入Nginx處理。
Nginx分析請求,如果是靜態資源,直接服務器讀取內容;如果是PHP腳本,通過PHP容器調用服務器獲取腳本,然后FastCGI處理。
FastCGI解析PHP腳本,必要時訪問MySQL容器讀寫數據。
具體步驟
Dockerfile:
MySQL鏡像
繼承自官方的MySQL5.7
鏡像,相對獨立解耦的模塊,無其它額外處理,見mysql/Dockerfile。
PHP鏡像
繼承自官方的centos7
鏡像,PHP源碼按需編譯安裝,方便后續擴展管理或者配置。通過sed
修改php.in
監聽所有9000
端口(此處為關鍵!!因為提供Nignx容器訪問支持PHP腳本,PHP容器對于Nginx容器不是localhost
),完整見php7/Dockerfile。
Nginx鏡像
繼承自官方的centos7
鏡像,Nginx源碼按需編譯安裝,方便后續更改或者配置。通過sed
修改nginx.conf
增加對PHP腳本的支持,完整見nginx/Dockerfile。
構建鏡像:
docker build --tag addcn/mysql -f mysql/Dockerfile . docker build --tag addcn/php7 -f php7/Dockerfile . docker build --tag addcn/nginx -f nginx/Dockerfile .
啟動容器:
整個流程可以看到,Nginx、PHP、MySQL三者的關系:
Nginx容器---->
PHP容器,PHP容器---->
MySQL容器。即容器之間是有關聯的,兩兩容器的數據通信通過容器啟動命令docker run
加參數--link
解決。
docker run --name mysql -p 3306:3306 -v /root/bo/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it addcn/mysql docker run --name php7 -p 9000:9000 -v /var/www/html:/usr/local/nginx/html --link mysql:mysql -it addcn/php7 docker run --name nginx -p 80:80 -v /var/www/html:/usr/local/nginx/html --link php7:php7 -it addcn/nginx
測試 PHP & MySQL:
vi /var/www/html/test.php
<?php //date echo date("Y-m-d H:i:s")."<br />\\n"; //mysql try { $conn = new PDO('mysql:host=mysql;port=3306;dbname=mysql;charset=utf8', 'root', '123456'); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } //$conn->exec('set names utf8'); $sql = "SELECT * FROM `user` WHERE 1"; $result = $conn->query($sql); while($rows = $result->fetch(PDO::FETCH_ASSOC)) { echo $rows['Host'] . ' ' . $rows['User']."<br />\\n"; } //phpinfo phpinfo(); ?>
客戶端瀏覽:
http://192.168.8.36/test.php
![Docker運行PHP及輸出MySQL表][1]
[1]: https://cache.yisu.com/upload/information/20210524/347/781130.png
Q&A
Nginx如何支持PHP腳本?
Nginx容器啟動時候,通過--link php7:php7
參數共享PHP容器的網絡,配置nginx.conf
文件(見nginx/Dockerfile),當處理PHP腳本時,轉給PHP容器解析:
location ~ \\.php$ { root html; fastcgi_pass php7:9000; #此處為關鍵!!其中php7為PHP容器的名稱,見啟動PHP容器docker run --name指定的值 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #關鍵!!/usr/local/nginx/html為web目錄 include fastcgi_params; }
PHP如何讀取MySQL數據?
PHP容器啟動時候,通過--link mysql:mysql
參數,與MySQL容器共享網絡,類似兩者處于同一臺機器,因此PHP代碼連接的時候使用$conn = new PDO('mysql:host=mysql;port=3306;dbname=mysql;charset=utf8', 'root', '123456');
就可以連接上MySQL(其中host=mysql
的mysql
為MySQL容器的名稱,見啟動MySQL容器docker run --name
指定的值)。
關于Docker中怎么部署LNMP環境就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。