Takeout 是一种 CLI 工具,用于启动小型 Docker 容器,每个容器都对应您的每个开发环境依赖项。
它应该与 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
通过运行以下命令安装 Takeout 和 Composer:
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
请注意,这些是容器入口点的参数,而不是额外的 docker 运行选项(见下文)。
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 网络中。这允许您使用与其他容器相同的别名和基本别名。
每个容器在该网络上都有两个别名:
Takeout 网络上的其他容器可以通过别名访问 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
在逐个项目的基础上设置依赖关系,这是一种非常好的做事方式。如果您认为为整个全局环境拥有每个依赖项的单个副本更有意义,那么 Takeout 更有意义。
没有!您的数据将保留!默认情况下,我们的几乎所有服务都使用“卷”来附加您的数据,正是出于这个原因。
因此,例如,当您禁用 MySQL 服务时,该卷(其中包含所有数据)将静静地坐在那里。当您重新启用时,只要将其附加到同一个卷,您的所有数据仍然会在那里。
查看我们未来计划的最佳方式是查看项目板,但以下是一些未来计划:
self-remove
命令:删除所有启用的服务,然后可能会自行卸载?upgrade
:销毁旧容器,使用新指定的标签启动一个新容器(提示用户输入,默认为latest
),并保持所有其他参数(例如端口、卷)与旧容器完全相同pt/passthrough
: 代理命令通过 docker ( ./takeout pt mysql stop
)如果您与我们合作并被分配推送版本,以下是最简单的流程:
main
( git checkout main && git pull
)php ./takeout app:build
)php ./builds/takeout list
)v1.5.1
)Publish release