lombax85 / phpdocker
This package is not auto-updated.
Last update: 2024-09-28 20:03:40 UTC
README
项目描述
使用Docker和Composer的力量,在几分钟内让您的PHP/MySQL项目上线!只需几个命令,您就可以拥有开发、预发布和生产的基础设施,充分利用Docker容器。在这个项目中,您将找到以下依赖项的容器
- apache
- php-fpm
- mysql
- mongodb
- couchdb
此外,数据库数据和会话由一个特定的容器管理,并提供最后一个容器作为工作区(您可以使用它来运行CLI命令的特殊容器)。
感谢Composer,此项目可以轻松集成和封装到您现有的Web应用中,允许您在开发机器、预发布服务器和生产服务器上更快地部署。
要求
- docker-compose,最低版本1.8
- docker,最低版本1.10
- composer
- php,最低版本5.6
通过Composer快速安装
- 运行以下命令安装phpdocker
composer global require lombax85/phpdocker
- 如果您想更新它,请运行
composer global update lombax85/phpdocker
此命令将为您的用户全局安装phpdocker。
NOTE: Be sure to add your composer bin directory to your PATH variable.
On OSX and Linux, this is usually in $HOME/.composer/vendor/bin
现在,进入您的项目根目录,并键入
phpdocker dockerize
运行此命令将在您的项目根目录中创建一个docker
目录,您就差不多可以开始了。
重要信息
- 当您第一次启动容器时,将出现一个
docker_data
目录。建议将/docker_data
添加到您的.gitignore
文件中,但请仔细阅读数据目录部分。 - 在
docker
目录中,您将找到所有您的Docker基础设施配置和一个名为.env
的文件。该.env
文件已预配置,包含您的Docker配置;有关更多信息,请参阅Docker .env文件部分。
Docker .env文件
- 配置(要绑定的端口、在容器中启用的模块)存储在
docker
目录中的名为.env
的文件中。在此文件中,您可以启用或禁用特定选项和模块,例如,您可以切换到PHP 7或PHP 5.6,或设置MySQL的默认密码。
数据目录
./docker_data
目录包含所有数据库和会话数据。如果您在生产环境中使用此配置,请勿忘记使用适当的工具备份所有数据(例如:使用mysqldump对mysql)。./docker_data
目录通过目录绑定在容器之间共享,并在容器重建之间保持。
因此,当你重建 - 例如 - 你的mysql容器时,数据不会丢失。然而,请注意,如果你将mysql引擎更改为与数据目录内容不兼容的某些引擎,内容本身可能会损坏。
默认情况下,数据目录配置为在./docker_data
内部。
当您第一次启动容器时,将创建此目录。如果您想更改docker_data
目录的默认路径,请查看.env
文件。
启动
- 进入
docker
目录(cd docker
) - 执行以下命令(如果您不需要特定的引擎,在“up”命令中省略它)
docker-compose build apache2 mysql workspace mongo php-fpm couchdb
docker-compose up -d apache2 mysql mongo couchdb
- 执行这些命令后,您的容器将启动并运行,使用
docker ps
查看它们 - 现在做一些安装后的事情
- MongoDB:与MySQL不同,MongoDB不允许在安装前设置默认用户名和密码。因此,您必须使用运行后脚本设置它们。要设置mongodb的默认用户和密码,请输入
docker-compose exec mongo sh /mongo.sh user password
与项目交互
“工作区”容器应用于所有cli命令(composer install/update,artisan)
docker-compose exec workspace bash
将在www目录内提供shell。如果您愿意,可以直接发送命令而不使用shell。例如,要发送“php artisan migrate”,只需这样做
docker-compose exec workspace php artisan migrate
主机名
Docker为同一项目的所有容器创建一个虚拟私有和隔离的网络(它使用根目录名作为前缀)。
要从另一个容器访问一个容器(例如,从php-fpm访问mysql容器),只需使用主机名即可。主机名是docker-compose.tml文件中容器名称。
不要使用私有IP,因为它可能会随时更改。
因此,当您需要在Web应用的配置文件中配置mysql服务器主机名时,只需输入“mysql”
MYSQL_HOST=mysql
如果您进入容器,您会看到
root@7aa4b96361fb:/var/www# ping mysql
PING mysql (172.19.0.4) 56(84) bytes of data.
64 bytes from mongo_mysql_1.mongo_default (172.19.0.4): icmp_seq=1 ttl=64 time=0.148 ms
在此项目中,这些容器/主机名存在
workspace mysql php-fpm apache2 mongo couchdb
附加设置和故障排除
- 在mac上:如果项目的根文件夹尚未共享,请启用
./docker_data
和./docker
文件夹的文件共享。 - 如果您想查看Apache/MySQL的错误日志,您可以从
docker-compose up
命令中省略-d
开关。这样做将显示容器的stdout。最终命令将是:docker-compose up apache2 mysql mongo couchdb
实际问题
- 如果在第一次容器启动期间在“docker-compose up”期间停止(按Ctrl+C),则/docker/data的内容可能会损坏或未正确初始化。在这种情况下,例如,您将无法连接到MySQL。要解决
docker-compose stop
rm -Rf ./docker/data/mysql/*
注意:如果清除MongoDB数据,别忘了重新添加默认用户