개요
TrueNAS 24.10 베타버전에서 Apps기능이 k3s기반에서 docker기반으로 전환되었습니다. TrueNAS의 쿠버네티스, Helm Chart기반의 Apps기능은 일종의 진입장벽이었기에, 개인적으로 굉장히 반가운 변경점 중 하나입니다. 그래서 후다닥 Proxmox에 설치해 봤습니다.
주요 변경점
Dashboard
뭔가 더 많아졌습니다. 베타 버전이기도 하고 VM이라 제대로 표시되는 항목이 없긴 한데.. 추후 정식 24.10을 기다려봐야 할 것 같습니다.
Apps GUI
Train Settings에서 표시할 앱들을 선택할 수 있습니다.
기본적으로 Stable과 Community가 있고, Enterprise와 Test는 비활성화되어 있습니다.
현재는, 베타버전이고 아직 전체 가용 앱을 마이그레이션 하진 않아서인지 81개의 앱만 나타납니다.
공식 홈페이지에 의하면 아직 docker compose를 통한 Custom App 기능이 구현되지 않았다고 합니다. 따라서 화면에 보이는 앱만 설치할 수 있는 상태입니다.
때문에, 아직은 End-User단에서는 큰 차이점을 느끼지 못합니다. 앱 설치 시 값을 채워넣는 과정도 기존과 동일합니다.
시험삼아 진입해본 FileBrowser 설치과정
내부적으로는 helm chart의 values항목이 docker compose의 항목값으로 변경되었겠지만, GUI로 조작하는 유저입장에선 느끼기 힘든 변화점이죠.
그렇지만 CLI에서 확실한 변화를 체감할 수 있습니다.
Docker로 컨테이너 띄워보기
shell에서 docker info를 입력하면 docker 정보가 나타납니다.
root@truenas[~]# docker info
Client: Docker Engine - Community
Version: 27.1.1
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.16.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.29.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.1.1
Storage Driver: overlay2
Backing Filesystem: zfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
runc version: v1.1.13-0-g58aa920
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.6.44-production+truenas
Operating System: Debian GNU/Linux 12 (bookworm)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 31.32GiB
Name: truenas
ID: 20856e79-065d-4d27-8004-5ca5df121ca4
Docker Root Dir: /mnt/.ix-apps/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
ZFS파일시스템을 그대로 사용하고 있고, docker compose플러그인도 확인할 수 있습니다. 그래서 docker compose를 입력해보면 잘 응답하는 것도 확인할 수 있죠.
root@truenas[~]# docker compose
Usage: docker compose [OPTIONS] COMMAND
Define and run multi-container applications with Docker
Options:
--all-resources Include all resources, even those not used by services
--ansi string Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
--compatibility Run compose in backward compatibility mode
--dry-run Execute command in dry run mode
--env-file stringArray Specify an alternate environment file
-f, --file stringArray Compose configuration files
--parallel int Control max parallelism, -1 for unlimited (default -1)
--profile stringArray Specify a profile to enable
--progress string Set type of progress output (auto, tty, plain, json, quiet) (default "auto")
--project-directory string Specify an alternate working directory
(default: the path of the, first specified, Compose file)
-p, --project-name string Project name
Commands:
attach Attach local standard input, output, and error streams to a service's running container
build Build or rebuild services
config Parse, resolve and render compose file in canonical format
cp Copy files/folders between a service container and the local filesystem
create Creates containers for a service
down Stop and remove containers, networks
events Receive real time events from containers
exec Execute a command in a running container
images List images used by the created containers
kill Force stop service containers
logs View output from containers
ls List running compose projects
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart service containers
rm Removes stopped service containers
run Run a one-off command on a service
scale Scale services
start Start services
stats Display a live stream of container(s) resource usage statistics
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker Compose version information
wait Block until the first service container stops
watch Watch build context for service and rebuild/refresh containers when files are updated
Run 'docker compose COMMAND --help' for more information on a command.
docker compose가 있다는 걸 확인했으니 잘 작동되는지도 확인해야겠죠?
무난하게 고스트 블로그를 하나 띄워보겠습니다.
아무것도 없는 깡통 TrueNAS VM이므로 'test' 스토리지 풀을 생성한 뒤
아래에 하위경로 ghost/www와 ghost/db를 생성한 후 아래처럼 작성했습니다.
#docker-compose.yml
services:
ghost:
image: ghost:latest
restart: always
ports:
- 8080:2368
environment:
# see https://ghost.org/docs/config/#configuration-options
database__client: mysql
database__connection__host: db
database__connection__user: root
database__connection__password: password
database__connection__database: ghost
# this url value is just an example, and is likely wrong for your environment!
url: http://truenasIP:8080
# contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
#NODE_ENV: development
volumes:
- /mnt/test/ghost/www:/var/lib/ghost/content
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- /mnt/test/ghost/db:/var/lib/mysql
그리고 docker compose up -d로 실행하고, TrueNAS IP:8080으로 접속하면 아래처럼 아주 무난하게 나타난 고스트 블로그를 확인할 수 있습니다.
Portainer 설치 및 사용
Apps페이지에 Portainer가 있습니다. 데이터 저장 경로만 지정해준 뒤 바로 설치할 수 있습니다.
아래처럼 설치가 완료되면, WEB UI버튼을 클릭해 초기설정 후 메인화면으로 진입합니다.
위에서 시험삼아 띄워본 고스트 컨테이너도 잘 보입니다.
스택을 이용해 watchtower를 띄워보겠습니다.
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
TZ: Asia/Seoul
WATCHTOWER_CLEANUP: 'true'
WATCHTOWER_POLL_INTERVAL: 43200
restart: unless-stopped
무난하게 잘 작동되는 것을 보실 수 있습니다.
마무리
개인용 NAS를 구축할 때 헤놀로지를 가장 많이 찾는 이유는 아무래도 높은 편의성 때문입니다. 다양한 기능들을 한데 모아 OS를 설치한 후부터 즉각 사용할 수 있고, 미려한 UI와 사용자 편의성이 높은(이라고 쓰고 커스터마이징이 굉장히 제한적인) 옵션을 제공해 초보자도 바로 쓸 수 있다는 점은 굉장한 메리트입니다. 그러나, 헤놀로지로 구축하면 업데이트 과정에서 발생하는 예상치 못한 사고와 이로 인한 데이터 유실이 굉장히 부담되기도 하죠.
DSM에서 제공하는 기능들은 모두 도커 이미지로 대체할 수 있습니다. 모바일 어플도 잘 되어 있는 편이죠.
단, DSM을 설치할 때처럼 모두 한 자리에 모여있는 것이 아니고, 직접 찾아다니며 설치해야 하기 때문에 도커를 모르는 사용자는 시행착오 과정을 겪어야만 하고, 도커를 사용할 수 있는 NAS OS들의 UI가 DSM에 비해 투박하기 때문에, 이런 점에서 디메리트를 느끼는 유저도 많았습니다.
현재 TrueNAS 24.10 베타버전은 제공되는 앱들 외에 유저가 직접 Custom App을 띄우는 기능은 없지만(docker compose의 GUI화 미완료), 이미 CLI로는 docker compose 플러그인을 무리없이 다룰 수 있기 때문에 SSH접속만 할 줄 알아도 사용할 수 있으며, Portainer 설치를 통해 무리없이 GUI를 활용해 컨테이너를 띄울 수도 있게 되었습니다.
DSM과는 결이 다르긴 하지만, UI/UX도 상당히 좋은 OS이고 중소규모에 적합한 시놀로지와 달리 대규모 엔터프라이즈급을 타겟으로 한 만큼 안정성도 좋은 TrueNAS에 편의성 높은 docker를 사용할 수 있게 되었으니, 일반 개인 유저 입장에서도 가져갈 수 있는 좋은 선택지가 하나 늘어난 셈이 되었네요.
관련 글
2025.01.23 - [TrueNAS] - TrueNAS SCALE에서 Docker로 앱 설치하기
TrueNAS SCALE에서 Docker로 앱 설치하기
개요이번 업데이트의 가장 큰 특이점은 Apps 기반이 쿠버네티스(k3s)로부터 Docker체제로 변경되었다는 것입니다. 이로 인해 개인이 직접 NAS를 구축할 때 제일 크게 느낄 수 있던 진입장벽이 사라졌
worklazy.net
출처
1. https://www.truenas.com/docs/scale/24.10/gettingstarted/scalereleasenotes/
24.10 (Electric Eel) Version Notes
Highlights, change log, and known issues for TrueNAS 24.10 release versions.
www.truenas.com