操作环境
1、前置工作
docker pull nginx
### 我这里对nginx的版本没有要求,就拉取最新的了
docker pull php:7.4-fpm
### 这里我使用的是php7.4,若不指定默认拉取最新的镜像
### 新建一个本地的项目目录,下面的是我本机的目录,按照你们自己的做新建,没有什么要求,后面做挂载使用
mkdir -p /Users/zhiyu/WebFile/Docker/SCRM
### 新建一个nginx配置的目录,用于后面nginx配置的挂载使用
mkdir -p /Users/zhiyu/WebFile/Docker/nginx/conf
### 将需要执行的项目文件放入上面新建好的目录
cd /Users/zhiyu/WebFile/Docker/SCRM
git clone https://localhost/scrm-api.git #具体的项目看你们自己的,这里我只做一个示例
2、运行php镜像
docker run --name scrm-php-0523 -v /Users/zhiyu/WebFile/Docker/SCRM/html:/www -d php:7.4-fpm
### --name 为容器命名,方便后期查找
### -v 挂载本地的目录到容器内:将/Users/zhiyu/WebFile/Docker/SCRM/html目录挂载到容器内的/www上
### -d 后台运行
### php:7.4-fpm 运行的docker镜像
3、新增nginx的配置文件
server {
listen 80;
server_name localhost; ### localhost即可
location / {
# root的地址为我们后面运行nginx镜像后,容器内的项目地址
root /usr/share/nginx/html/scrm-api/public;
index index.html index.htm index.php;
### 下面的这个配置非tp项目不需要
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
location ~ \.php$ {
### 为什么是php,看下一步的操作
fastcgi_pass php:9000;
fastcgi_index index.php;
### 这个地方的/www/scrm-api/public/ 是第二步中,我们php容器内的项目实际的入口路径
fastcgi_param SCRIPT_FILENAME /www/scrm-api/public/$fastcgi_script_name;
include fastcgi_params;
}
}
4、运行nginx镜像
docker run --name scrm-php-nginx -p 8090:80 -d \
-v /Users/zhiyu/WebFile/Docker/SCRM/html:/usr/share/nginx/html:ro \
-v /Users/zhiyu/WebFile/Docker/nginx/conf:/etc/nginx/conf.d:ro \
--link scrm-php-0523:php \
nginx
# -p 将本机的8090映射到容器内的80端口
# 第一个 -v 是将本机的项目目录挂载到容器内部,后面的是容器内的项目路径,即第三步内的root的配置时选用的路径
# 第二个 -v 是将本机的nginx配置目录挂载到容器内部
# --link 将第二步执行的php容器与当前的容器进行联通,并以php的别名可以在当前容器内进行使用,即第三步中php:9000,是在当前容器内访问scrm-php-0523的网络接口
# ro 标识只读,可要可不要
# nginx 指定运行的镜像
5、其他说明
## 若你的本地可与容器进行互相访问,可以在本机的hosts文件加入下述代码,即可实现本地域名访问容器内的项目,当然别忘记你第四步映射的端口,若是映射的80端口,不加也行,其他的需要加上端口进行访问
[容器的ip] [domain]
### 查看docker容器的ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [容器名称/ID]
### 本机ping一下容器的ip,能ping通即可使用上述的操作
ping 172.17.0.2 # 具体的ip,看上一步执行后的操作
### 若你的本机与docker容器没办法访问,使用127.0.0.1:8090访问也可以的