== 背景:CentOS7操作系統 ==
官方鏡像倉庫:
一、MySQL:
### 指定版本
docker pull mysql:5.6
### 創建mysql容器
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql_password -d mysql:5.6
二、Nginx:
### 指定版本
docker pull nginx:1.18
### 創建容器(基礎容器)
docker run --name nginx -p 80:80 -d nginx:1.18
### 默認情況下,Docker nginx服務器的HTML路徑(網站根目錄)在容器 /usr/share/nginx/html 目錄下
### 項目、nginx配置文件持久化
### 映射容器內根目錄至本地服務器
docker run --name nginx -p 80:80 -d -v /本地服務器項目目錄/:/usr/share/nginx/html nginx:1.18
### 映射nginx的配置文件
cd /home/nginx
### 拷貝容器nginx內配置文件至本地服務器當前目錄
docker cp nginx:/etc/nginx/conf.d/default.conf default.conf
三、PHP:
### 指定版本
docker pull php:7.4
### 創建初始容器
docker run --name php -p 9000:9000 -d php:fpm
### 拷貝配置文件
cd /home/www/php
docker cp php:/usr/local/etc/php-fpm.d/www.conf www.conf
docker cp php:/usr/local/etc/php/php.ini-production php.ini
### 修改配置
vi /home/www/php/phh.ini
### 設置cgi.fix_pathinfo=1(需先刪除前面的;註釋符)
四、重要的步驟!重要的步驟!重要的步驟!重複三遍
### 鏈接不同的容器,使其可相關通訊和協作
### 先清除原nginx、php容器
docker stop php && docker rm php
docker stop nginx && docker rm nginx
### 創建php容器
docker run --privileged --name php -p 9000:9000 --link mysql:mysql -v /home/www/web:/var/www/html -v /home/www/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /home/www/php/php.ini:/usr/local/etc/php/php.ini -d php:fpm
### 創建nginx容器
#### 修改nginx配置 參考下圖詳細配置信息
### 生成容器
docker run --privileged --name nginx -p 80:80 --link php:fpm -v /home/www/web:/usr/share/nginx/html -v /home/www//nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx:1.18
無、注意事項
### 1:如果因爲系統防火牆關閉或開啓,導致容器創建失敗:docker0: iptables: No chain/target/match by that name
### 解決方案:
### 重啓docker守護進程即可
service docker restart
### 2:如果構建容器後出現Existe(1)
### 解決方案:
### 刪除該容器,重新創建容器可加 --privileged 參數
docker run --privileged --name nginx [imagename]:[版本] -d [容器別名]
### 3: 構建完成後出現無法解析php文件時,請注意檢查自己的nginx配置項
### 解決方案:
nginx配置:
server {
...
root /nginx容器內根目錄[一般默認/usr/share/nginx/html]/
...
location / {
//自定義的轉發規則
}
...
localtion ~ \.php$ {
root /[php容器根目錄,默認/var/www/html]/;
fastcgi_pass [php(php容器名稱)]:9000;
...
#######
[空白處]
#######
# 修改如下
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 若修改爲上述後還是爲解決,可將下一行(即include ...)移至上述標記空白處即可
include fastcgi_params;
}
...
}