1. 程式人生 > >docker篇2-使用Docker構建PHP開發環境

docker篇2-使用Docker構建PHP開發環境

PHP開發環境中的一些服務之間是需要通訊的,例如nginx和php-fpm,PHP和MySQL,PHP和redis等都需要通訊,如果採用宿主機埠對映的方式可以滿足網路通訊但是效率和安全性都會減弱,所以可以使用Docker的網路指令來構建一個互通的網路,下面列出常用的網路命令。

建立網路

docker network create dev-net --driver bridge

檢視網路

docker network ls 刪除網路 docker network rm 網路名稱

假設建立了一個dev-net的網路,在使用docker run 建立容器的時候加上–network dev-net引數即可將容器加入此網路,加入到同一網路的服務是可以使用容器名稱進行通訊的,有了這層橋接網路PHP各個元件服務之間的通訊就很容易解決了,首先拉取映象

docker pull php:7.3-fpm docker pull nginx docker pull mysql:latest
docker pull redis:latest

假設我們需要將程式碼放置在目錄/home/wwwroot/default/,首先需要執行mkdir -p /home/wwwroot/default/ 建立目錄

然後執行啟動各個容器 例如:

#第一次執行時需要設定mysql密碼 docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d --network dev-net mysql:latest
–default-authentication-plugin=mysql_native_password

#nginx預設的web目錄是/usr/share/nginx/html 和宿主目錄 /home/wwwroot/default/做一個對映關係 docker run -p 80:80 -v
/home/wwwroot/default/:/usr/share/nginx/html
–name nginx80 --network dev-net -d nginx:latest

#PHP中的目錄也做同樣的對映 docker run --name php-fpm --network dev-net -d
-v /home/wwwroot/default/:/usr/share/nginx/html php:7.3-fpm

#執行redis docker run -d --name redis redis:latest

容器啟動後需要配置nginx和php-fpm之間進行通訊

#從nginx容器拷貝配置檔案到宿主機的當前目錄 docker cp nginx80:/etc/nginx/conf.d/default.conf ./
#編輯配置檔案 vi default.conf

將nginx的配置檔案修改如下

location ~ \.php$ {
     root           /usr/share/nginx/html;
     fastcgi_pass   php-fpm:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;
     include        fastcgi_params;
}

拷貝配置檔案到nginx容器內

docker cp ./default.conf nginx80:/etc/nginx/conf.d/default.conf

進入nginx容器內部重新載入nginx配置

docker exec -it nginx80 /bin/bash
#重新載入nginx配置 /usr/sbin/nginx -s reload
#退出容器 exit

在宿主機的/home/wwwroot/default/目錄建立php檔案然後測試訪問效果,可以看到php能夠正常解析

安裝對應的擴充套件

#進入PHP容器內 docker exec -it php-fpm /bin/bash
#例如安裝pdo pdo_mysql等擴充套件 docker-php-ext-install pdo pdo_mysql mysqli
#安裝redis時因為容器內的/usr/src/php/ext/目錄中沒有redis擴充套件包 所以需要先下載拷貝到容器內,否則會報錯 docker-php-ext-install redis

#pecl擴充套件也可以按如下方式執行(會自動下載對應的擴充套件包) pecl install redis-4.2.0 && docker-php-ext-enable redis

安裝完擴充套件後需要 exit 退出容器重啟容器

docker restart php-fpm

環境搭建完畢後使用php連線MySQL時會提示連線拒絕,可以通過修改mysql伺服器中mysql資料庫中的user表中的Host欄位的值來實現

#進入mysql容器內 docker exec -it mysql /bin/bash
#登入MySQL mysql -uroot -proot
#執行修改語句 語句中的php-fpm指的是php容器的名稱 update user set Host=‘php-fpm’ where User=‘root’ and Host=‘localhost’; flush privileges; exit; exit

設定完畢後再次測試,PHP可以連線到MySQL伺服器了.

使用phpMyAdmin操作容器內的MySQL資料庫方法

下載phpMyadmin到web目錄(只要能夠使用url地址訪問到的目錄或者子目錄都可以)

wget
https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.zip

2.解壓

unzip phpMyAdmin-4.8.4-all-languages.zip
#重新命名 mv phpMyAdmin-4.8.4-all-languages phpmyadmin

3.修改配置

cd phpmyadmin mv config.sample.inc.php config.inc.php vi
config.inc.php 將 c f g [ S e r v e r s ] [ cfg['Servers'][ i][‘host’] =
‘localhost’;修改為 c f g [ S e r v e r s ] [ cfg['Servers'][ i][‘host’] = ‘mysql’;

備註: c f g [ S e r v e r s ] [ cfg['Servers'][ i][‘host’] = ‘mysql’; 中的mysql指的是mysql容器的名稱

接下來可以使用瀏覽器訪問phpmyadmin並登陸mysql。文章來源於LW個人部落格 的分享文章連結:https://www.cliyun.club/contentsDo?id=154。