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