# Eggs 与 Docker 镜像

> 了解 Daki 门户中 Egg 与 Docker 镜像的区别、它们如何协同工作，以及有哪些已打安全补丁的 Daki Yolks 镜像可用。

在 门户中配置服务器时，你会遇到两个相关概念：**Egg** 和 **Docker 镜像**。了解它们之间的区别，有助于你正确地配置服务器。

## 你将学到

- 什么是 Egg，它控制什么
- 什么是 Docker 镜像，以及如何选择合适的镜像
- Egg 与 Docker 镜像如何协同工作
- 有哪些 Node.js 和 Python 版本可用，以及 Daki 如何为它们打补丁
- 何时更改它们各自

---

## 什么是 Egg？

**Egg** 是一个服务器模板，用于定义你运行的服务器的整体类型。它指定：

- 使用的编程语言或框架
- 可供选择的 Docker 镜像
- 默认的启动命令模板
- 预先配置的启动变量及其默认值
- 全新安装时创建的文件

Daki 上可用的 Egg 示例：
- **Node.js** — 用于 JavaScript 应用和 Discord 机器人
- **Python** — 用于 Python 应用和 Discord 机器人
- **Java** — 用于 Java 应用（付费套餐可用）
- **Rust** — 用于 Rust 应用（付费套餐可用）
- **Minecraft Java** — 用于 Minecraft 游戏服务器（游戏服务器套餐）

**你在创建服务器时选择 Egg。** 在 Free Tier 上，仅提供 Node.js 和 Python 两种 Egg。付费套餐可以使用更多 Egg。

要更改现有服务器的 Egg，请进入 **Settings** 标签页。请注意，更改 Egg 会触发重新安装 — 强烈建议事先备份你的文件。

---

## 什么是 Docker 镜像？

**Docker 镜像**是你的服务器所运行的运行时的具体版本。Egg 决定语言，Docker 镜像决定版本。

例如，Node.js Egg 提供 Node.js 22、24 和 26，Python Egg 提供 Python 3.11 至 3.15。你在 **Startup** 标签页中选择 Docker 镜像。

---

## Daki Yolks：已打安全补丁的镜像

Daki 上所有 Node.js 和 Python 服务器，无论是 Free Tier 还是付费套餐，都运行在 **Daki Yolks** 上：这是我们自己构建的 Docker 镜像，可直接替代大多数 Pterodactyl 主机使用的社区镜像。这些社区镜像很少重新构建，因此安全修复可能会滞后数月。

- **始终打补丁。** 每 6 小时，我们会检查是否发布了新的官方 Node.js 或 Python 基础镜像，并重新构建受影响的版本。每周一次，所有镜像都会重新构建，以获取操作系统更新（Debian 13）。
- **兼容。** 工具、入口点和行为与之前相同，因此你的机器人可以继续运行。Node.js 镜像包含 `git`、`ffmpeg`、`sqlite3`、`build-essential`、`python3`、`typescript` 和 `ts-node`；Python 镜像包含 `gcc`、`g++`、`git` 和 `ffmpeg`。
- **经过测试。** 每个镜像在发布前，都必须能以门户启动它的方式启动并运行一个真实的 TypeScript 或 Python 程序。
- **开源。** 这些镜像以 MIT 许可证公开发布在 [GitHub](https://github.com/niclasspecht/daki-yolks) 上。

| 运行时 | 版本 | 支持截止 |
| :--- | :--- | :--- |
| Node.js | **26** | 2029 年 4 月 |
| Node.js | **24** | 2028 年 4 月 |
| Node.js | **22** | 2027 年 4 月 |
| Python | **3.15** | 2031 年 10 月 |
| Python | **3.14** | 2030 年 10 月 |
| Python | **3.13** | 2029 年 10 月 |
| Python | **3.12** | 2028 年 10 月 |
| Python | **3.11** | 2027 年 10 月 |

> **提示:** **重启即可更新。** 每次重新构建后，镜像名称保持不变。运行中的服务器会保留当前镜像，直到重启；下次启动时，它会自动获取最新的补丁版本。你的文件不会受到影响。

### 较旧的版本（已停止支持）

Node.js 18 至 21、23 和 25，以及 Python 3.9 和 3.10 不再接收其开发者提供的安全修复。它们仍可供选择，以便现有项目继续运行，但在镜像列表中会标记为 **EOL - no security updates**，而且我们不会重新构建它们。请尽快迁移到受支持的版本。

切换到新的主版本时（例如从 Node.js 20 切换到 24，或从 Python 3.10 切换到 3.13），请重新安装依赖：运行 `npm rebuild`，或删除 `node_modules` 后再次运行 `npm install`，并重新创建 Python 虚拟环境。

---

## 它们如何协同工作

可以这样理解：

| 概念 | 类比 | 设置位置 |
| :--- | :--- | :--- |
| **Egg** | 选择用 Python 编写程序 | Settings 标签页（或在创建服务器时） |
| **Docker 镜像** | 选择 Python 3.12 还是 3.13 | Startup 标签页 |

你只需选择一次 Egg（或很少更改），并在项目需要不同版本时调整 Docker 镜像。

---

## 何时更改

### 以下情况更改 Docker 镜像：
- 你需要更新的运行时版本（例如从已停止支持的 Node.js 20 升级到 Node.js 24）
- 你的项目需要某个特定的次版本以保证兼容性

### 以下情况更改 Egg：
- 你想完全切换编程语言（例如从 Node.js 切换到 Python）
- 你需要不同的默认配置或预定义的安装设置

> **警告:** 更改 Egg 会触发重新安装。虽然文件通常不会被自动删除，但某些文件可能会被覆盖，并可能导致设置不兼容。更改 Egg 之前，强烈建议先备份。参见[服务器设置](https://daki.cc/zh/wiki/guides/server-settings)。

---

## 常见问题

**Discord 机器人应该使用哪个 Egg？**

Discord.js/JavaScript 机器人请使用 **Node.js** Egg，discord.py/Python 机器人请使用 **Python** Egg。

**如果列表中没有我需要的 Docker 镜像怎么办？**

可用的镜像由 Egg 定义。如果你没有看到需要的版本，请联系支持 — 按需可能提供其他镜像。

**我的镜像显示 'EOL - no security updates'，应该怎么办？**

该版本已不再由其开发者维护。你的服务器仍可运行，但不再获得安全修复。请在 Startup 标签页中选择受支持的版本（Node.js 22、24、26 或 Python 3.11 至 3.15），重新安装依赖并重启。

**如何获取最新的安全补丁？**

重启你的服务器。每当发布修复时，Daki Yolks 都会自动重新构建，服务器会在下次启动时获取新构建。

**更改 Docker 镜像会删除我的文件吗？**

不会。仅更改 Docker 镜像（在 Startup 标签页中）不会影响你的文件。只有更改 Egg（在 Settings 标签页中）才会触发重新安装。

---

## 下一步

- [启动设置](https://daki.cc/zh/wiki/guides/startup-settings) — 选择你的 Docker 镜像并配置启动命令。
- [服务器设置](https://daki.cc/zh/wiki/guides/server-settings) — 更改 Egg 或重新安装服务器。
- [部署 Discord.js 机器人](https://daki.cc/zh/wiki/guides/deploy-discordjs) — Node.js 的端到端部署指南。
- [部署 Python 机器人](https://daki.cc/zh/wiki/guides/deploy-python) — Python 的端到端部署指南。

---
Source: https://daki.cc/zh/wiki/guides/eggs-and-images
