溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker中怎么部署LNMP環(huán)境

發(fā)布時間:2021-06-22 14:18:06 來源:億速云 閱讀:218 作者:Leah 欄目:大數(shù)據(jù)

這篇文章給大家介紹Docker中怎么部署LNMP環(huán)境,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

整個流程:

  • 客戶端http請求服務(wù)器80端口,該端口被映射到Nginx容器80端口,進(jìn)入Nginx處理。

  • Nginx分析請求,如果是靜態(tài)資源,直接服務(wù)器讀取內(nèi)容;如果是PHP腳本,通過PHP容器調(diào)用服務(wù)器獲取腳本,然后FastCGI處理。

  • FastCGI解析PHP腳本,必要時訪問MySQL容器讀寫數(shù)據(jù)。

具體步驟

Dockerfile:

  • MySQL鏡像
    繼承自官方的MySQL5.7鏡像,相對獨立解耦的模塊,無其它額外處理,見mysql/Dockerfile。

  • PHP鏡像
    繼承自官方的centos7鏡像,PHP源碼按需編譯安裝,方便后續(xù)擴(kuò)展管理或者配置。通過sed修改php.in監(jiān)聽所有9000端口(此處為關(guān)鍵?。∫驗樘峁㎞ignx容器訪問支持PHP腳本,PHP容器對于Nginx容器不是localhost),完整見php7/Dockerfile。

  • Nginx鏡像
    繼承自官方的centos7鏡像,Nginx源碼按需編譯安裝,方便后續(xù)更改或者配置。通過sed修改nginx.conf增加對PHP腳本的支持,完整見nginx/Dockerfile。

構(gòu)建鏡像:

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三者的關(guān)系:
Nginx容器---->PHP容器,PHP容器---->MySQL容器。即容器之間是有關(guān)聯(lián)的,兩兩容器的數(shù)據(jù)通信通過容器啟動命令docker run加參數(shù)--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參數(shù)共享PHP容器的網(wǎng)絡(luò),配置nginx.conf文件(見nginx/Dockerfile),當(dāng)處理PHP腳本時,轉(zhuǎn)給PHP容器解析:

location ~ \\.php$ {
    root           html;
    fastcgi_pass   php7:9000;  #此處為關(guān)鍵!!其中php7為PHP容器的名稱,見啟動PHP容器docker run --name指定的值
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name; #關(guān)鍵??!/usr/local/nginx/html為web目錄
    include        fastcgi_params;
}
  • PHP如何讀取MySQL數(shù)據(jù)?
    PHP容器啟動時候,通過--link mysql:mysql參數(shù),與MySQL容器共享網(wǎng)絡(luò),類似兩者處于同一臺機(jī)器,因此PHP代碼連接的時候使用$conn = new PDO('mysql:host=mysql;port=3306;dbname=mysql;charset=utf8', 'root', '123456');就可以連接上MySQL(其中host=mysqlmysql為MySQL容器的名稱,見啟動MySQL容器docker run --name指定的值)。

關(guān)于Docker中怎么部署LNMP環(huán)境就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI