tightenco/takeout
使用简单的单次Docker容器管理您的开发依赖。
Requires
- php: ^8.0
- ext-json: *
- ext-pcntl: *
- ext-posix: *
- composer/semver: ^3.4
- guzzlehttp/psr7: ^2.6
Requires (Dev)
- guzzlehttp/guzzle: ^7.4
- laravel-zero/framework: ^9.0
- mockery/mockery: ^1.3.1
- nunomaduro/laravel-console-menu: ^3.3
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.5
- tightenco/tlint: ^6.0
- dev-main
- v2.8.0
- v2.7.0
- v2.6.0
- v2.5.1
- v2.5.0
- v2.4.0
- v2.3.1
- v2.3.0
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.8.13
- v1.8.12
- v1.8.11
- v1.8.10
- v1.8.9
- v1.8.8
- v1.8.7
- v1.8.6
- v1.8.5
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- v1.8.0
- v1.7.1
- v1.7.0
- v1.6.5
- v1.6.4
- v1.6.3
- v1.6.2
- v1.6.1
- v1.6.0
- v1.5.1
- v1.5.0
- v1.4.0
- 1.3.2
- v1.3.1
- v1.3.0
- v1.2.6
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- dev-tm/shell-cmd
- dev-feat/prompts-enable-list
- dev-tm/docker-install
- dev-tm/upgrade-laravel-zero
- dev-morrislaptop-eventstore-recovery
- dev-mes/refactor-start-command
This package is auto-updated.
Last update: 2024-09-20 22:07:48 UTC
README
Takeout
Takeout是一个用于启动小巧Docker容器的CLI工具,每个容器对应您开发环境中的一个依赖。
它旨在与Laravel Valet等工具配合使用。目前兼容macOS、Linux、Windows 10和WSL2。
使用takeout enable mysql
运行MySQL,您再也不用担心管理或修复Homebrew MySQL了。
但您也可以通过简单的命令轻松启用ElasticSearch、PostgreSQL、MSSQL、Mongo、Redis等。查看此目录中可用的服务类,以获取当前服务列表:https://github.com/tighten/takeout/tree/main/app/Services
要求
- macOS、Linux、Windows 10或WSL2
- 已安装Composer
- 已安装Docker(macOS: Docker for Mac,Windows: Docker for Windows)
安装
通过运行以下命令使用Composer安装Takeout:
composer global require "tightenco/takeout:~2.8"
确保~/.composer/vendor/bin
目录已添加到系统“PATH”中。
使用方法
在终端的任何位置运行takeout
,然后输入一个命令名。
Takeout的主要优势之一是它能够快速轻松地启动(“启用”)或删除(“禁用”)您的各种依赖项的Docker容器。
由于Docker提供持久卷存储,删除容器(我们称之为“禁用”)实际上并不会删除其数据。这意味着您可以无后顾之忧地启用和禁用服务。
启用服务
显示您可以启用的所有服务的列表。
takeout enable
启用特定服务
传入一个或多个服务的短名称,启用它们。
takeout enable mysql takeout enable redis meilisearch
使用默认参数启用服务
如果您想跳过每个参数的提示并接受默认值。这也适用于一个命令中的多个服务。
takeout enable mysql --default takeout enable redis meilisearch --default
透传容器参数
您可以在--
分隔符之后指定容器的额外参数
takeout enable mysql -- -hsome.mysql.host -usome-user
请注意,这些是容器Entrypoint的参数,而不是额外的docker run选项(见下文)。
额外的docker run
选项
在内部,takeout enable
命令生成一个docker run
命令。有时您可能想为docker run
命令指定额外的选项,如额外的环境变量或额外的卷映射。您可以使用--run=
选项传递包含所有额外docker run
选项的字符串
takeout enable mysql --run="{docker-run-options}"
这将生成以下命令
docker run {docker-run-options} {service-options} mysql/mysql-server
其中{docker-run-options}
是在--run
选项内指定的选项,而{service-options}
是基于该服务的默认选项生成的。
混合docker run
选项与容器参数
您可以混合匹配run
选项和容器参数
takeout enable mysql --run="{docker-run-options}" -- -hsome.mysql.host -usome-user
禁用服务
显示您可以禁用的所有已启用服务的列表。
takeout disable
禁用特定服务
传入一个或多个服务的短名称,禁用最接近的已启用服务。
takeout disable mysql takeout disable redis meilisearch
禁用所有服务
takeout disable --all
启动已停止的容器
显示可以启动的所有已停止容器的列表。
takeout start
启动特定的已停止容器
传入一个或多个已停止容器的容器ID,启动匹配的已停止容器。
takeout start {container_id} takeout start {container_id1} {container_id2}
启动所有容器
您可以使用 -all
标志来启动所有启用的容器。
takeout start --all
停止正在运行的容器
显示可以停止的所有正在运行的容器的列表。
takeout stop
停止特定的正在运行的容器
传入一个或多个正在运行的容器的容器ID,停止匹配的正在运行的容器。
takeout stop {container_id} takeout stop {container_id1} {container_id2}
运行依赖关系的多个版本
Takeout的另一个好处是它允许您同时安装和运行依赖关系的多个版本。这意味着,例如,您可以在不同的端口上同时运行MySQL 5.7和8.0。
运行 takeout enable mysql
两次;第一次,您需要选择默认端口(3306
)和第一个版本(5.7
),第二次,您需要选择第二个端口(3307
)、第二个版本(8.0
)以及不同的卷名(这样它们不会共享相同的mysql_data
)。
现在,如果您运行 takeout list
,您将看到两个服务同时运行。
+--------------+----------------+---------------+-----------------------------------+ | CONTAINER ID | NAMES | STATUS | PORTS | +--------------+----------------+---------------+-----------------------------------+ | 4bf3379ab2f5 | TO--mysql--5.7 | Up 2 seconds | 33060/tcp, 0.0.0.0:3306->3306/tcp | | 983acf46ceef | TO--mysql--8.0 | Up 35 seconds | 33060/tcp, 0.0.0.0:3307->3306/tcp | +--------------+----------------+---------------+-----------------------------------+
网络详情
Takeout容器会自动添加到名为 takeout
的Docker网络中。这允许您使用与其他容器相同的别名和基本别名。
每个容器在该网络上分配两个别名
- 基于核心依赖名称的基本别名(例如 mysql、postgres)
- 结合基本别名和版本的完整别名(例如 mysql8.0、postgres13)
Takeout网络上的其他容器可以通过它们的别名访问Takeout容器。[查看这篇文章了解如何将sail和takeout一起使用](https://mattstauffer.com/blog/how-to-use-takeout-to-add-new-services-to-laravel-sail-and-save-ram/)
常见问题解答
这会通过PECL为我启用PHP驱动程序吗?
很遗憾,不会。
如果我禁用了服务,但Takeout仍然显示端口已被占用,我该怎么办?
首先,运行 lsof -i :3306
(其中3306是不可用的端口)。
如果您看到如下输出
com.docke 936 mattstauffer 52u IPv6 0xc0d6f0b06d5c4efb 0t0 TCP localhost:mysql->localhost:62919 (FIN_WAIT_2)
TablePlus 96155 mattstauffer 16u IPv4 0xc0d6f0b0b6dccf6b 0t0 TCP localhost:62919->localhost:mysql (CLOSE_WAIT)
解决方案是只需关闭您的数据库GUI,然后它应该会被释放。
为什么您会使用这个而不是 `docker-compose`?
使用 docker-compose
会根据项目设置依赖关系,这是一种完全合理的方法。如果您认为在整个全局环境中对每个依赖项只有一个副本更有意义,那么Takeout更有意义。
禁用服务会永久删除我的数据库吗?
不!您的数据会保留!默认情况下,我们几乎所有的服务都使用“卷”来附加您的数据,正是出于这个原因。
所以,当您禁用MySQL服务时,例如,包含所有数据的这个卷将静静地坐在那里。当您重新启用时,只要您将其附加到相同的卷,所有数据仍然都在那里。
未来计划
查看我们的未来计划的最好方法是查看项目板,但以下是一些未来的计划
- 基于Electron的GUI
self-remove
命令:删除所有启用的服务,然后可能自行卸载?upgrade
:销毁旧容器,启动一个带有新指定标签的新容器(提示用户输入,默认为latest
)并保持所有其他参数(例如端口、卷)与旧容器完全相同pt/passthrough
:通过docker代理命令(./takeout pt mysql stop
)- 以对非PHP开发者友好的方式交付软件包(Homebrew?NPM?)
- 允许其他人通过添加自己的插件来扩展外卖功能(感谢@angrybrad提出的想法!)
发布流程
如果您正在与我们合作,并被分配发布任务,以下是最简单的流程