美文网首页
Docker 构建PHP+Nginx -第一篇

Docker 构建PHP+Nginx -第一篇

作者: needrunning | 来源:发表于2020-08-12 14:39 被阅读0次

基础环境

Mac Docker

docker-compose -v

docker-compose version 1.25.4, build 8d51620a

我原来本地有一套 PHP 环境,

第一次的错误做法,我试图本地和 Docker 都共用本地的 Nginx 配置文件

Docker 安装 Nginx 的时候没有单独挂载本地的配置文件

正确的思路是 Docker 启动 Nginx 时会访问内部 Nginx 服务,实际的配置文件 如 vhost 文件 会映射挂载到本地单独的目录

设置 Docker 镜像代理地址

https://registry.docker-cn.com

单独安装 docker nginx

 docker run --name docker-nginx -p 8091:80 -d nginx

启动 Nginx

docker run --name docker-nginx -p 8091:80 -d -v ~/Users/wangmingming/sources:/usr/share/nginx/html:ro  -v ~/usr/local/etc/nginx/servers:/etc/nginx/conf.d:ro  --link docker_dev_php:php  nginx

常用命令

停止 Containner

docker stop id

docker rm id

docker info

查看所有正在运行的 container

docker ps

查看所有的容器

docker ps -a

查看容器 IP 地址

docker inspect 5a469075259d |grep '"IPAddress"'

172.17.0.5

如何分离 Docker 服务与本地服务共存

本地端口映射时,设置不同的端口,如 8089 9001

启动后会自动退出

通过 docker logs containnerId 查看日志

nginx 容器必须使用--link 连接到 php-fpm 容器

多容器连接

1 通过端口映射
2 通过--link

Docker Nginx

创建挂载目录

mkdir -p /Users/wangmingming/sourceraw/docker/nginx/{conf,conf.d,html,logs}
docker run --name docker-nginx--privileged=true  -p 8091:80 -v /Users/wangmingming/sources/ETCPCloudHosting:/usr/share/nginx/html -v /Users/wangmingming/sourceraw/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /Users/wangmingming/sourceraw/docker/nginx/logs:/var/log/nginx -v /Users/wangmingming/sourceraw/docker/nginx/conf.d:/etc/nginx/conf.d -d nginx

以上命令 如果站点虚拟配置文件中的错误日志目录,设置为 /var/log/nginx/logs/docker.dev.cloud.com-error.log

启动 Nginx 就会出现找不到目录文件的错误,启动失败

Nginx 关联 PHP

docker run --name docker-nginx --privileged=true  -p 8089:80 -v /Users/wangmingming/sources/ETCPCloudHosting:/usr/share/nginx/html -v /Users/wangmingming/sourceraw/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /Users/wangmingming/sourceraw/docker/nginx/logs:/var/log/nginx -v /Users/wangmingming/sourceraw/docker/nginx/conf.d:/etc/nginx/conf.d   --link docker_dev_php:php -d nginx

本地挂载(Mount)的 Nginx 错误文件目录 应该指定本地的实际目录地址吗?

容器内交互目录

docker exec -it 545cef74a0f3 /bin/bash

使用容器名字代替 配置文件中的 IP 地址

小结

001 配置文件独立

Docker 环境内部文件配置目录不能直接访问本地目录,必须依靠映射和挂载

002 创建镜像命令

docker_dev_php

docker run --name  docker_dev_php  -v /Users/wangmingming/sources/ETCPCloudHosting/backend/web:/www    -p 9001:9000 -d phpdockerio/php72-fpm

docker-nginx

docker run --name docker-nginx --privileged=true  -p 8089:80 -v /Users/wangmingming/sources/ETCPCloudHosting/backend/web:/usr/share/nginx/html -v /Users/wangmingming/sourceraw/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /Users/wangmingming/sourceraw/docker/nginx/logs:/var/log/nginx -v /Users/wangmingming/sourceraw/docker/nginx/conf.d:/etc/nginx/conf.d   --link docker_dev_php:php -d nginx
phpdockerio/php72-fpm

Nginx 和 PHP 镜像都需要映射目录

003 端口分离

通过端口映射区分本地和 Docker 环境

004 配置文件目录

Nginx 配置文件目录 注意 转发路径

/www/backend/web/$fastcgi_script_name;

 location ~ \.php$ {
            #root      /www;
            include fastcgi_params;
            #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            fastcgi_param  SCRIPT_FILENAME  /www/backend/web/$fastcgi_script_name;
            fastcgi_pass  docker_dev_php:9000;
            try_files $uri =404;
        }

root /usr/share/nginx/html;


         listen 80;
        server_name localhost;
        root         /usr/share/nginx/html;
        index        index.php;


参考资料

Docker 安装 Nginx
mac 上 docker 容器没有操作挂载文件权限问题

docker 构建安装 nginx

图南日晟-互联网技术服务

相关文章

网友评论

      本文标题:Docker 构建PHP+Nginx -第一篇

      本文链接:https://www.haomeiwen.com/subject/yiijrktx.html