赞
踩
接前一个
https://blog.csdn.net/u010953609/article/details/89337660
直接 cp 上一次 搭建 LNMP 的整个目录,然后下载 TP 5 的完整版并解压到本次项目的 nginx/www 目录下
以下是我的项目结构,项目名称就叫 thinkphp
** mysql/data 内容太多,我 tree 的时候先删除了
** ThinkPHP 库 层次很多,这里只列举到 4 层
~/compose$ tree thinkphp/ -L 4
thinkphp/ ├── docker-compose.yml ├── mysql │ ├── data │ └── Dockerfile ├── nginx │ ├── conf.d │ │ └── default.conf │ ├── Dockerfile │ └── www │ ├── html │ │ ├── index.php │ │ ├── mysqli.php │ │ ├── pdo2.php │ │ └── pdo.php │ └── tp5 │ ├── application │ ├── build.php │ ├── CHANGELOG.md │ ├── composer.json │ ├── composer.lock │ ├── extend │ ├── index.php │ ├── LICENSE.txt │ ├── public │ ├── README.md │ ├── runtime │ ├── think │ ├── thinkphp │ └── vendor └── phpfpm └── Dockerfile 14 directories, 17 files
先使用 ss 查看 WEB 端口、php 、mysql 端口 、phpmyadmin 端口
以下是我将要使用的端口
ss -tlnp |grep 83
ss -tlnp |grep 9003
ss -tlnp |grep 3309
ss -tlnp |grep 9997
使用 docker ps -a 查看已经使用的容器名字,以免冲突
我的 docker-compose.yml 如下
~/compose/thinkphp$ cat docker-compose.yml
version: "3" services: web_server: build: ./nginx container_name: nginx-2 networks: - tp5-net depends_on: - phpfpm ports: - "83:80" - "4431:443" volumes: - ./nginx/www/tp5/public:/var/www/html - ./nginx/conf.d:/etc/nginx/conf.d db_server: build: ./mysql container_name: mysql57-2 networks: - tp5-net - phpmyadmin-net environment: MYSQL_ROOT_PASSWORD: 123456 ports: - "3309:3306" volumes: - ./mysql/data:/var/lib/mysql phpfpm: build: ./phpfpm container_name: phpfpm72 networks: - tp5-net depends_on: - db_server ports: - "9003:9000" volumes: - ./nginx/www/tp5:/var/www/html - ./nginx/conf.d:/etc/nginx/conf.d phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin links: - db_server:db # external_links: # - db_server:db networks: - tp5-net - phpmyadmin-net depends_on: - db_server ports: - 9997:80 networks: tp5-net: phpmyadmin-net:
*** 其中 links 和 external_links 两个都不推荐使用,我也不知道还有什么可以代替
*** 以上 links 和 external_links 经过实测,都是可以的
启动
** 确认进入项目 docker-compose.yml 所在目录
cd ~/compose/thinkphp
docker-compose up -d
本地测试:
curl 127.0.0.1:83
curl 127.0.0.1:9997
浏览器测试:
http://192.168.1.193:83
http://192.168.1.193:9997
docker-compose.yml 中 phpmyadmin 容器加上links (我是先测试了 external_links )之后, OK!
其他错误
基本上都是 名称冲突,因为都是 cp 过来的,总有一些修改漏掉了
还有就是端口冲突
** 每次修改完之后,一定要 restart 修改过的容器
最简单的方式就是
docker-compose down
docker-compose up -d
以上都是学习中的一些点滴记录,过程都比较粗糙
建议多参考 phpmyadmin
https://hub.docker.com/r/phpmyadmin/phpmyadmin/dockerfile
个人觉得:
1. nginx 和 php fpm 分成 2 个容器有些多余
2. 这个 phpmyadmin 就是直接在 php fpm alpine 容器下 安装了 nginx
3. 以上 docker-compose.yml 中 nginx 和 php fpm 容器的 volume 实际都对应的是同一个目录
4. nginx 对应到 thinkphp 的 public , php 对应到项目根目录,这应该是因为 TP 项目结构导致的,但是,nginx 配置里面 2 个 root 又正好反过来了!这里感觉很别扭!主要是 nginx 理解不透!
5. 如果 nginx 和 php 在同一个容器,上面这个别扭的问题就应该不存在了
以下是我的 nginx 网站配置文件
~/compose/thinkphp/nginx/conf.d$ cat default.conf
server { listen 80; server_name localhost; location / { root /var/www/html; index index.html index.htm index.php; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html; } location ~ \.php$ { # root /var/www/html; root /var/www/html/public; # fastcgi_pass 127.0.0.1:9000; # 必须修改为compose模版文件中php容器名字 fastcgi_pass phpfpm72:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修改为$document_root include fastcgi_params; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。