# Eggs & Docker 이미지

> Daki Portal의 egg와 Docker 이미지 차이, 둘이 함께 작동하는 방식, 그리고 사용할 수 있는 보안 패치된 Daki Yolks 이미지를 알아보세요.

Portal에서 서버를 설정할 때 서로 관련된 두 개념인 **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까지 제공해요. Docker 이미지는 **Startup** 탭에서 선택해요.

---

## Daki Yolks: 보안 패치된 이미지

Free Tier와 유료를 포함한 Daki의 모든 Node.js 및 Python 서버는 **Daki Yolks**에서 실행돼요. 대부분의 Pterodactyl 호스트가 사용하는 커뮤니티 이미지를 그대로 대체할 수 있도록 저희가 직접 만든 Docker 이미지예요. 커뮤니티 이미지는 아주 드물게만 다시 빌드되기 때문에 보안 수정이 몇 달씩 늦어질 수 있어요.

- **항상 패치됨.** 6시간마다 새로운 공식 Node.js 또는 Python 기본 이미지가 나왔는지 확인하고, 영향을 받는 버전을 다시 빌드해요. 일주일에 한 번은 모든 이미지를 다시 빌드해 운영체제 업데이트(Debian 13)를 반영해요.
- **호환됨.** 이전과 같은 도구, 진입점, 동작을 제공하므로 봇은 계속 작동해요. Node.js 이미지에는 `git`, `ffmpeg`, `sqlite3`, `build-essential`, `python3`, `typescript`, `ts-node`가 포함되어 있고, Python 이미지에는 `gcc`, `g++`, `git`, `ffmpeg`가 포함되어 있어요.
- **검증됨.** 모든 이미지는 공개되기 전에 Portal이 시작하는 방식 그대로 실제 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/ko/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 이미지를 바꾸면 파일이 삭제되나요?**

아니요. (Startup 탭에서) Docker 이미지만 바꾸는 것은 파일에 영향을 주지 않아요. (Settings 탭에서) egg를 바꿀 때만 재설치가 실행돼요.

---

## 다음 단계

- [시작 설정](https://daki.cc/ko/wiki/guides/startup-settings) — Docker 이미지를 선택하고 시작 명령을 설정하세요.
- [서버 설정](https://daki.cc/ko/wiki/guides/server-settings) — egg를 바꾸거나 서버를 재설치하세요.
- [Discord.js 봇 배포하기](https://daki.cc/ko/wiki/guides/deploy-discordjs) — Node.js용 처음부터 끝까지의 배포 가이드예요.
- [Python 봇 배포하기](https://daki.cc/ko/wiki/guides/deploy-python) — Python용 처음부터 끝까지의 배포 가이드예요.

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