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 [容器名]。

猜你喜欢

转载自blog.csdn.net/glx490676405/article/details/107067749