基础环境
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;
参考资料
图南日晟-互联网技术服务
网友评论