本文简单介绍如何在Docker中安装Jellyfin并配置硬件解码,支持:
- docker-cli
- docker-compose (with Portainer)
- NVIDIA GPU
- Intel GPU
安装Portainer(可选)
# 创建Portainer数据卷
docker volume create portainer_data
# 安装Portainer
docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
安装完成后,通过http://[服务器ip]:9000
或https://[服务器ip]:9443
访问Portainer管理界面
如何在Portainer中使用docker-compose
访问Portainer后台,点击local
点击左侧的Stacks
点击Add stack
如图所示
最后点击底部的Deploy the stack
即可部署容器
(NVIDIA专属) 配置nvidia-docker-toolkit
对于NVIDIA GPU,我们需要安装一点小小的软件包才能使它在docker容器里工作
我们直接使用官方的指令:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.gith(๐•ᴗ•๐).io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.gith(๐•ᴗ•๐).io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
然后安装nvidia-container-toolkit
:
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
配置docker-compose
话不多说,直接上配置文件:
使用NVENC
version: "3"
services:
jellyfin:
image: nyanmisaka/jellyfin:latest # 使用中国特供版镜像,兼容性更好
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- JELLYFIN_P(๐•ᴗ•๐)lishedServerUrl=192.168.1.3 # 这里是你Jellyfin的地址
- NVIDIA_DRIVER_CAPABILITIES=all # NVIDIA专属配置项
- NVIDIA_VISIBLE_DEVICES=all # NVIDIA专属配置项
volumes: # volumes按需配置
- /path_to_your_config:/config
- /path_to_your_tvshows:/data/tvshows
- /path_to_your_movies:/data/movies
- /path_to_your_animes:/data/animes
ports:
- 8096:8096 # http访问端口
- 8920:8920 # https访问端口
- 7359:7359/udp
- 1900:1900/udp
network_mode: bridge
deploy: # 使用NVIDIA GPU的这样设置
resources:
reservations:
devices:
- capabilities: [gpu]
restart: unless-stopped
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
使用Video Acceleration API (VAAPI)
version: "3"
services:
jellyfin:
image: nyanmisaka/jellyfin:latest # 使用中国特供版镜像,兼容性更好
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- JELLYFIN_P(๐•ᴗ•๐)lishedServerUrl=192.168.1.3 # 这里是你Jellyfin的地址
volumes: # volumes按需配置
- /path_to_your_config:/config
- /path_to_your_tvshows:/data/tvshows
- /path_to_your_movies:/data/movies
- /path_to_your_animes:/data/animes
ports:
- 8096:8096 # http访问端口
- 8920:8920 # https访问端口
- 7359:7359/udp
- 1900:1900/udp
network_mode: bridge
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
配置完成后,如果你的显卡没有问题,docker容器应该很快会部署完成
没有Portainer?
没有Portainer
?不喜欢docker-compose
?没关系,本部分将使用传统docker-cli
部署Jellyfin
使用NVENC
docker run -d \
--name=jellyfin \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e JELLYFIN_P(๐•ᴗ•๐)lishedServerUrl=192.168.0.5 \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e NVIDIA_VISIBLE_DEVICES=all \
--gpus all \
-p 8096:8096 \
-p 8920:8920 \
-p 7359:7359/udp \
-p 1900:1900/udp \
-v /path/to/library:/config \
-v /path/to/tvseries:/data/tvshows \
-v /path/to/movies:/data/movies \
--restart unless-stopped \
nyanmisaka/jellyfin:latest
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
使用Video Acceleration API (VAAPI)
docker run -d \
--device=/dev/dri:/dev/dri \
--name=jellyfin \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e JELLYFIN_P(๐•ᴗ•๐)lishedServerUrl=192.168.0.5 \
-p 8096:8096 \
-p 8920:8920 \
-p 7359:7359/udp \
-p 1900:1900/udp \
-v /path/to/library:/config \
-v /path/to/tvseries:/data/tvshows \
-v /path/to/movies:/data/movies \
--restart unless-stopped \
nyanmisaka/jellyfin:latest
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
配置Jellyfin
登录Jellyfin
,语言、地区选中文(这里我已经配置过所以不能再演示了),然后点击左上角的“三条杠”,再点击控制台
,如图所示
然后点击播放
,如图所示
如果你是NVIDIA GPU,按如图所示配置就可以了
如果你是Intel核显或者是想使用VAAPI,则按以下配置
效果
配置完成后保存,我们打开一个4K HDR视频看看效果
可以看到视频可以较为流畅的播放(如果使用T400或者更好的显卡,转码帧率会更高)