docker配置lnmp環(huán)境

安裝docker

按照官網(wǎng)上面安裝就可以了

拉取鏡像文件

一開始我拉取的都是latest鏡像,后面我把docker run 這些鏡像寫在shell腳本中,去執(zhí)行,發(fā)現(xiàn)有些狀態(tài)是退出,然后一直沒有成功,后面我就單獨拿出來docker run又成功了。

我shell腳本執(zhí)行的時候如果后面沒有帶 TAG,就會一直起不來是退出狀態(tài),我也很詫異,百度也沒能拯救我,所以后面我的都是帶有版本的。

創(chuàng)建目錄

mkdir  -p /myDocker/firstDemo/nginx/html  
mkdir  -p /myDocker/firstDemo/nginx/log
mkdir  -p /myDocker/firstDemo/nginx/conf.d

編寫三個shell文件:

如果這幾個shell腳本不能跑起來容器,那就直接將文件里面的內(nèi)容拿出了跑吧。

  • docker_nginx.sh
#!/usr/bin bash
docker run -p 80:80 --name nginx \
-v /myDocker/firstDemo/nginx/html:/usr/share/nginx/html \
-v /myDocker/firstDemo/nginx/log/:/var/log/nginx \
-v /myDocker/firstDemo/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-idt nginx:1.16
  • docker_php.sh
#!/usr/bin bash
docker run -p 9000:9000 --name php \
-v /myDocker/firstDemo/nginx/html:/var/www/html/ \
--privileged=true \
-d php:7.2-fpm
  • docker_mysql.sh
#!/usr/bin bash
docker run -p 3306:3306 --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-v /usr/lib/mysql:/usr/lib/mysql \
-d mysql:5.7
執(zhí)行shell腳本
sh docker_nginx.sh
sh docker_php.sh
sh docker_mysql.sh

編寫nginx配置文件

創(chuàng)建default.conf文件
vim /myDocker/firstDemo/nginx/conf.d/default.conf
nginx配置如下
server {
    listen       80;   #監(jiān)聽80端口,接收http請求
    server_name  mgk.com;   #就是網(wǎng)站地址
    root /usr/share/nginx/html; # 準(zhǔn)備存放代碼工程的路徑
    #路由到網(wǎng)站根目錄www.example.com時候的處理
    location / {
        index index.php index index.html index.htm;   #跳轉(zhuǎn)到mgk.com/index.php
        autoindex on;
    }   

     #當(dāng)請求網(wǎng)站下php文件的時候,反向代理到php-fpm
     location ~ \.php$ {
        fastcgi_pass   172.16.236.190:9000; #nginx fastcgi進程監(jiān)聽的IP地址和端口,docker中要寫內(nèi)網(wǎng)的ip,127.0.0.1不行
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;#這里要寫/var/www/html,不然 php fastcgi解析不了目錄
        include        fastcgi_params;
    }
}
重啟nginx
docker restart nginx

測試

/myDocker/firstDemo/nginx/html中編寫測試代碼

echo "<?php echo phpinfo(); ?>" > index.php

然后瀏覽訪問出現(xiàn)php相關(guān)信息。

總結(jié)

  • 出現(xiàn)的很多問題:
    • 服務(wù)啟不來然后直接docker run ...
    • nginx解析不了PHP,不是權(quán)限的問題,是nginx配置問題,上面的配置文件作了說明
  • 沒有復(fù)雜的操作
    • PHP的擴展
    • MYSQL的使用測試
    • 其他服務(wù)的配置redis、swoole等

補充說明:

出現(xiàn)了502錯誤,檢查了半天的nginx配置,后來發(fā)現(xiàn)反向代理地址配置有問題:
proxy_pass http://127.0.0.1:8888;
因為nginx在docker中,所以不能使用127.0.0.1:8888來訪問宿主機里的nodejs應(yīng)用,docker內(nèi)部實際上實現(xiàn)了一個虛擬網(wǎng)橋docker0,所以要通過宿主機內(nèi)網(wǎng)地址(192.168.102.1)來訪問.

補充php+mysql測試

創(chuàng)建文件

vim mysql.php

編輯內(nèi)容
<?php 
    $link=mysqli_connect("172.16.236.190","root","root"); 
    if(!$link) echo "FAILD!連接錯誤,用戶名密碼不對"; 
    else echo "OK!可以連接"; 
?> 
  • 一開始會報錯 mysql_connect()不可用,PHP7不支持,改用mysqli。
  • mysqli_connect()不可用,沒有開擴展。
  • mysql連接的host寫localhost報錯,應(yīng)該需要寫內(nèi)外ip

解決mysqli擴展:

1、先得進入容器:docker exec -it php_server /bin/bash
2、然后運行 docker-php , 按兩下tab鍵會有提示

root@781322cc6de5:/var/www/html# docker-php-
docker-php-entrypoint     docker-php-ext-configure  docker-php-ext-enable     docker-php-ext-install    docker-php-source 

3、執(zhí)行docker-php-ext-install mysqli
4、重啟php
5、訪問成功

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容