部署emby并了解docker命令

部署emby并了解docker命令

阅读量:
评论数:

部署Emby并了解Docker命令

以Emby部署为例借助ChatGPT详解命令含义,快速了解Docker

概念

宿主机与容器

宿主机是指运行Docker的主机(例如你的计算机),而容器是指在Docker中运行的轻量级独立环境,可以将其视为运行应用程序的一个“沙盒”环境。Docker使用Linux内核的容器功能来提供独立的环境,并为容器提供了一个隔离的文件系统、网络和资源(如CPU、内存和磁盘空间)。通过Docker容器,你可以在同一台机器上运行多个应用程序,并确保它们不会相互干扰。

本次使用docker cli部署,portainer图形化也可以部署,不过命令行部署粘贴进去就完事了,我觉得更方便点。

硬件转码

如果需要服务器转码硬解,请确保部署emby的服务器中的/dev/dri文件夹内可以看到显卡,如果是pve下的lxc套娃docker,需要修改配置使lxc能够调用宿主机的显卡;若不用硬解请删除该行命令。官方emby使用转码需要Premiere,不支持支付宝。

服务器转码的好处:压缩视频减少流量消耗,兼容各种播放设备。

服务器转码的坏处:比直连播放消耗性能,画质相对原视频变低,若显卡性能太低或多人同时硬解导致编码效率达不到视频帧数播放会卡顿。

Emby部署

参数修改

复制下列命令,自行修改-p及-v的参数,,以【/mnt/share:/data】为例,冒号左边是宿主机文件夹路径,冒号右边是容器文件夹路径,端口同理。容器端口和容器文件夹路径千万不要修改。/mnt/share是我的宿主机影视资源所在文件夹,请替换你自己的。宿主机建好一个空的文件夹,复制完整路径替换我的/mnt/emby/config。若需要迁移服务器只需打包宿主机的config文件夹(我的是/mnt/emby/config),容器内媒体路径一致就能无损重建emby。

docker run \
--network=bridge \
-p '8096:8096' \
-p '8920:8920' \
-p '1900:1900/udp' \
-p '7359:7359/udp' \
-v /mnt/emby/config:/config \
-v /mnt/share:/data \
-e TZ="Asia/Shanghai" \
--device /dev/dri:/dev/dri \
-e UID=0 \
-e GID=0 \
-e GIDLIST=0 \
--restart always \
--name emby \
-d lovechen/embyserver:latest

一键部署

ssh登录服务器,将修改好的命令粘贴,回车,完成部署,访问 http://IP:你修改的端口 进入emby🥰

docker命令详解

上述命令输入chatgpt中得到的结果

docker run: 创建并运行一个新的Docker容器
--network=bridge: 使用默认的网络模式
-p '8096:8096': 映射容器内端口8096到主机的端口8096
-p '8920:8920': 映射容器内端口8920到主机的端口8920
-p '1900:1900/udp': 映射容器内的UDP端口1900到主机的端口1900
-p '7359:7359/udp': 映射容器内的UDP端口7359到主机的端口7359
-v /mnt/emby/config:/config: 将主机上的/mnt/emby/config目录映射到容器内的/config目录,以便持久化Emby的配置文件
-v /mnt/share:/data: 将主机上的/mnt/share目录映射到容器内的/data目录,以便Emby可以访问媒体文件
-e TZ="Asia/Shanghai": 设置容器内的时区为亚洲/上海
--device /dev/dri:/dev/dri: 允许容器访问主机上的DRI设备,以便Emby可以进行硬件加速
-e UID=0: 设置容器内的UID为0,即root用户
-e GID=0: 设置容器内的GID为0,即root用户
-e GIDLIST=0: 设置容器内的GID列表为0,即只有root用户可以访问
--restart always: 在容器退出时自动重启
--name emby: 为容器指定一个名称为emby
-d lovechen/embyserver:latest: 在后台运行指定的镜像lovechen/embyserver:latest。Copy

--network

--network是Docker命令中的一个参数,用于指定容器应该连接到哪个Docker网络。具体来说,它允许您为容器指定一个网络别名,使得其他容器可以通过这个别名来访问该容器。当创建一个Docker容器时,如果没有指定--network参数,则默认情况下,该容器将连接到bridge网络。以下是该命令中使用的--network参数的含义:

  • bridge: 连接到默认的bridge网络

  • host: 连接到主机网络,与主机共享网络命名空间和IP地址

  • none: 不连接到任何网络

  • container:<name|id>: 与另一个容器共享网络命名空间

在该命令中,--network=bridge表示将Emby容器连接到默认的bridge网络。

--network host 是 Docker 提供的一种网络模式,它允许容器共享宿主机的网络命名空间。使用此模式的容器将拥有宿主机上的所有网络接口(包括 localhost),可以访问宿主机上的所有服务,也可以直接使用宿主机的 IP 地址进行通信。这种网络模式的优点是容器直接共享宿主机的网络栈,网络性能和访问速度都很快。但是由于容器和宿主机共享网络栈,容器的网络隔离性较差,容器之间可以互相访问和影响。此外,如果宿主机上有多个容器需要使用同一个端口,则会出现端口冲突的问题。

homeassistant如果用docker部署好像就必须用host模式,不然搜不到电器🤨

-p

参数 -p 用于指定端口映射。Docker容器内运行的应用程序可能会监听在一个或多个端口上,但这些端口默认是不可访问的,只有容器内部可以访问。通过 -p 参数将容器内的端口映射到主机上的端口,就可以让外部的应用程序通过主机上的端口访问容器内部的应用程序。

-v

-v参数用于将宿主机的目录(/mnt/emby/config和/mnt/share)挂载到容器的指定目录(/config和/data)。这个参数可以在Docker容器和宿主机之间共享数据,让容器访问宿主机上的目录和文件,也可以将容器中的数据保存在宿主机上的指定目录中。

如果在运行 docker run 命令时映射的宿主机文件夹不存在,Docker 将会自动为你创建这些文件夹。但是,这样做可能会导致权限问题,因为 Docker 创建的文件夹通常会以 root 用户为所有者。因此,在使用映射文件夹时,最好在宿主机上手动创建这些文件夹,并将其所有者和权限设置为适当的用户。chatgpt认为应该先建好宿主机的文件夹✌️

-e

-e 参数允许你设置容器中的环境变量。

在这个命令中,-e TZ="Asia/Shanghai" 设置了一个名为 TZ 的环境变量,并将其值设置为 "Asia/Shanghai",用来指定时区。

UID

在Docker中,UID是用户标识符(User Identifier)的缩写。它代表用户的身份。在这个例子中,-e UID=0将容器的UID设置为0,也就是root用户的UID。这意味着容器内的任何进程都将以root用户的身份运行。

GID

在Docker中,GID指的是“Group ID”(组标识符),它是与用户相关联的标识符。在Docker容器中,GID用于控制访问共享资源(例如文件或目录)的权限,与UID(用户ID)一起使用。

在给定的emby容器中,GID设置为0,这是Linux系统中的root用户的GID。这样做是为了确保emby容器在访问共享资源时具有足够的权限,以便不会受到权限问题的影响。

--restart

--restart 参数用于设置容器在退出后的重启策略。该参数可以取以下值:

  • no:默认值,容器退出时不重启容器;

  • on-failure[:max-retries]:容器退出时重启容器,重试的次数由可选参数 max-retries 指定;

  • always:容器退出时总是重启容器;

  • unless-stopped:容器退出时总是重启容器,但是只要 Docker 引擎未关闭,就会重启容器。

在这个命令中,--restart always 意味着 Docker 引擎启动时会自动启动名为 emby 的容器,如果该容器在任何时间退出,则 Docker 引擎将自动重启该容器。

--device

--device 参数是用来添加一个特定的设备到容器中。在这个命令中,--device /dev/dri:/dev/dri 的意思是将主机上的 /dev/dri 设备映射到容器中的 /dev/dri 设备,这个设备通常是用于处理视频输出的。这样,在容器中运行的 Emby 服务器就可以访问主机上的这个设备了。

/dev/dri是Linux操作系统中的一个设备文件,它提供了对直接渲染基础设施(DRI)的访问。DRI是X Window系统的一个组成部分,它允许应用程序直接访问显卡硬件以进行图形渲染。在Docker容器中使用--device /dev/dri:/dev/dri选项可以将主机上的/dev/dri设备映射到容器内的/dev/dri设备,使得容器内的应用程序可以直接访问宿主机的显卡硬件。这对于需要进行图形渲染的应用程序(如Emby媒体服务器)非常有用。

--name

--name 参数用于为容器指定一个名称。在运行容器时,可以使用该名称引用容器,而不是使用容器的 ID。例如,在上面的 docker run 命令中,--name emby 为容器指定了名称为 "emby",以便在后续操作中使用该名称引用容器,如 docker stop emby 命令用于停止运行名为 "emby" 的容器。

-d

-ddocker run命令中的一个参数,表示容器在后台以“守护进程”方式运行。具体来说,它会使得容器在后台运行,并且将控制台输出打印到标准输出流中。

这意味着当您在控制台中运行该命令时,该命令不会阻塞控制台。相反,它将立即返回,而容器将在后台运行。

镜像

lovechen/embyserver:latest 是运行容器时指定的镜像名称和版本号。其中 lovechen 是该镜像的创建者,embyserver 是镜像的名称,latest 是镜像的标签(tag),表示使用最新版本的镜像,如果不指定标签,则默认使用:latest标签。


Built with Halo
主题 Stack Jimmy 设计 • 由Jiewen移植
📑共水了 93篇文章.
载入天数... 载入时分秒...
RSS Icon RSS订阅