1. 采用什麼樣的鏡像很重要。必須是php:7.3-fpm,采用預設的latest鏡像是不行的,是以
$ docker pull php:7.3-fpm #現在有了7.4-fpm
$ docker pull nginx
$ docker pull mariadb
2. 搭建獨立的lnmp網絡環境
$ docker network create --driver bridge --subnet 172.168.1.0/24 --gateway 172.168.1.1 lnmp-net #網絡名稱為lnmp-net
3.建立lnmp的根目錄,并建立應有的目錄體系
$ mkdir /lnmp
其他的目錄結構:
/lnmp/data/mariadb #用于存儲mariadb資料庫的資料
/lnmp/php #用于存放php的配置文檔
/lnmp/nginx/html #用于存放網頁源碼,phpMyAdmin,wordpress 等
/lnmp/conf.d #用于存放nginx的配置文檔,也就是 default.conf
4.建構各個容器
建構mariadb資料庫容器:
$ docker run -itd --name mysql -h mysql -p 3306:3306 --network=lnmp-net --ip 172.168.1.201 -v /lnmp/data/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456789 mariadb
建構php-fpm容器:
$ docker run -itd --name myphp -h myphp -p 9000:9000 --network=lnmp-net --ip 172.168.1.202 -v /lnmp/nginx/html:/usr/share/nginx/html --privileged=true php:7.3-fpm
也可以使用php鏡像自身的路徑,也就是:
$ docker run -itd --name myphp -h myphp -p 9000:9000 --network=lnmp-net --ip 172.168.1.202 -v /lnmp/nginx/html:/var/www/html --privileged=true php:7.3-fpm
建構nginx:
$ docker run -itd --name mynginx -h mynginx -p 80:80 --network=lnmp-net --ip 172.168.1.203 -v /lnmp/nginx/html:/usr/share/nginx/html --link myphp nginx
5. 對nginx配置檔案進行編輯,主要是将default.conf 中的下列段落進行修改。增加解析類型,指定php檔案的目錄:
location / {
root /usr/share/nginx/html;
index index.html index.php index.htm; #較預設内容增加了 index.php
client_max_body_size 64m;
}
location ~ \.php$ {
# root html;
fastcgi_pass 172.168.1.202:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; #這一行也比較關鍵,這個路徑是php容器内的路徑。如果上一步建構php容器使用的是 /var/www/html/ 則用就是 /var/www/html
include fastcgi_params;
client_max_body_size 64m;
}
若容器内沒有vi、vim等編輯工具,可以使用 docker cp 指令向容器内進行配置檔案的更新,例如本例中
# docker cp /home/nginx/conf.d/default.conf mynginx:/etc/nginx/conf.d/default.conf 這是将編輯好的defaul.conf檔案進行覆寫
6.在/lnmp/nginx/html中建立info.php,并增加内容
$ vi info.php
内容: <?php phpinfo();?>
7.重新開機相關容器
$ docker restart myphp mynginx
8.用浏覽器檢視nginx歡迎頁和php資訊:
http://host-ip/index.html
http://host-ip/info.php
9. 下載下傳并解壓phpMyAdmin到 /lnmp/nginx/html中,通過浏覽器進入
http://host-ip/phpMyAdmin/
出現錯誤:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzQjM0UDO0YTM4EDNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
很明顯,要在myphp容器中添加mysqli擴充
10.為php容器添加擴充元件
$ docker exec -it myphp /bin/bash #進入myphp容器
$ cd /usr/local/bin #進入安裝指令群組件所在目錄
$ ./docker-php-ext-install pdo_mysql #安裝擴充pdo_mysql
$ ./docker-php-ext-install mysqli #安裝擴充 mysqli
$ exit #退出myphp容器
$ docker myphp restart #重新開機容器,使擴充元件生效
11.再次嘗試 http://host-ip/phpMyAdmin/
然後發現還是無法進入,出現 “ mysqli_real_connect(): (HY000/2002): No such file or directory ”的 錯誤提示,還是需要修改
具體方法為:
将phpmyadmin\libraries\config.default.php,修改條目為: $cfg['Servers'][$i]['host']='172.168.1.201';
将phpmyadmin\config.sample.inc.php重命名為config.inc.php,修改條目為: $cfg['Servers'][$i]['host'] = '172.168.1.201';
然後重新登入。
這裡我們在建構mariadb資料庫時,指定了root賬戶的密碼為 123456789
登入成功後界面右側會顯示下圖資訊
好了,至此我們用3個獨立的docker 容器組成了LNMP開發環境。
其他
A。從容器内複制檔案和把外部編輯好的檔案複制進容器
1. 從容器複制到host
$ docker cp myphp:/usr/local/etc/php/php.ini-production /home/lnmp/php/php.ini
2.從host複制到容器
$ docker cp /home/lnmp/php/php.ini myphp:/usr/local/etc/php/php.ini
從php7開始,php.ini 沒有直接給出,而是給了 php.ini-production php.ini-development 這兩個預置檔案,将其cp一份命名為php.ini 即可。
B。對配置内容進行部分更新,也就是upload
建立并編輯 uploads.ini檔案,内容為
file_uploads = On
memory_limit = 128M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
用上面的複制指令,将其添加到myphp 容器的 /usr/local/etc/php/conf.d/ 目錄下
$ docker cp /home/lnmp/php/uploads.ini myphp:/usr/local/etc/php/conf.d/
重新開機 myphp容器
$ docker restart myphp
開機啟動參數的補加:
docker update --restart=always 容器名
docker update --restart=no 容器名