Docker系列學習 -- (二)多容器構建web基礎環境(php+mysql+nginx)

== 背景: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;
	}
	...
}
至此,我們就完成的相關係列的配置,正常運行php的項目了,如果修改本地nginx或這php的配置文件,最好重啓一下相應容器:docker restart [容器名]。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章