一个连人生都懒得规划的人,却要规划 docker 的存储目录。脑袋大 。。。
问题
我在使用 docker 时,依旧保持了直接使用宿主机的习惯,就是把项目代码都放到当前登录系统的账号的个人目录下,例如,/home/some_user/some_project/
但是这样做会有很多问题:
- 其他登录用户不方便访问此目录。自己的服务器这样用没啥问题,但是一旦涉及跟其他人共用一台服务器,确实不太好。
- 一些需要用到 /var/www/html 目录的容器 (例如 php fpm 容器),不方便跟宿主机中安装的 Nginx 进行协作,造成宿主机 Nginx 转发给 fpm 容器的路径不一致,引起 404 错误
项目代码存储目录规划
需要宿主机 Nginx 处理的,统一放到 /var/www/html 下,以项目名命名,例如,/var/www/html/magento2。对应的,fpm docker 容器中安装 magento2 时,也使用此目录。
其实同样的,即便其他非 php fpm 的项目,例如 python 代码的项目,也适合放到 /var/www/html 下。
数据库相关的存储目录规划
例如,一个 docker compose 配置文件中,会涉及 mysql, redis 等数据库的存储文件。
我原本计划放到 /var/data 目录下,但是感觉这样会容易出现被覆盖的隐患。因为我可能下次新建一个 docker compose 配置时,直接复制之前的配置文件,如果忘记修改目录,那么这里的 mysql 或者 redis 的存储目录,就会完全一样,估计会出现文件覆盖的问题。没有测试过,但是感觉风险很大。
所以,我参考了一个 github 上的 docker 安装 magento2 的做法。
https://github.com/norbertgoltl/docker-compose-for-magento-2/blob/master/docker-compose.yml
直接使用使用 docker compose 文件目录下的子目录 services 存储。例如
services:
redis:
volumes:
- ./services/redis_data:/data
db:
volumes:
- ./services/mysql_data:/var/lib/mysql
- ./services/mysql_log:/var/log/mysql
gitignore
需要将 services 放到 gitignore 里。避免被 git 提交到代码库中。
需要手动创建目录么
例如在 volumes 中指定了宿主机和容器内的映射目录,这些目录若不存在,docker 会自动创建的,不需要自己手动去提前创建。非常贴心。
最后
引入 docker,虽然简化了多版本 php 项目的部署,但是也增加了管理复杂度。也带来了更多的坑。是好是坏,需要自己评判。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式