建站第三篇 使用Docker安装Jellyfin媒体服务器
原文传送门
随手浏览时,翻到一篇文章《 服务器指北 - 有了服务器之后可以做点什么 》,我平时就喜欢在家里搞东搞西,这标题正对胃口。毫不犹豫的点进去看看有什么新东西能用在家里的山寨服务器上。果然没让我失望,里面提到一个影音管理系统叫做jellyfin,从之前的 emby fork 而来,由于 emby 闭源了,大家就在这基础上分支出了 Jellyfin。
特性嘛?
话不多说,让我们直奔主题吧。
我的家庭nas服务器系统的版本是ubuntu1604,是用一个acer旧笔记本改的,原来的硬盘容量已经很小了,只能用来跑系统,存储全部使用外挂方式,用来存储自己的本地资料以及搭建云盘和云笔记的数据资料,影音文件也在其中。
我选择搭建docker版jellyfin,影音库直接挂到外存中的影音文件夹,不需要对原有资料路径做任何变动。
当看到这段文字时,说明docker安装成功了。
至此,Docker安装最简版,完成。没有像其他文章提到的配置镜像站,也没有分配用户权限。没分配用户权限不是好的示范,不提倡学习,但是我这边自家内网使用,一切从简。
下面开始使用docker来搭建本文的主角——Jellyfin服务。
然而我并不是这样做的。因为懒,直接docker安装了。
上面的参数中需要说明的是:
docker会自动拉取镜像完成安装
如果能看到上面的画面,说明jellyfin安装完成,就是这么便捷!!!!docker越来越成功果然是有道理的。
现在就可以通过http://本地ip:8096来访问jellyfin服务了。
后面该怎么选怎么选,**路径、电视剧路径,语言神马的。最后注意一下远程访问的两个勾,默认是打上的。
这样,我们的jellyfin服务就安装好了。
虽然是内网服务,还是会禁不住得瑟的心,弄个公网地址给朋友看看,所以就有了内网穿透。
内网穿透工具采用Frp,轻与简单是我选择工具的个人偏好。
服务端扔阿里云上,内网安装客户端,配上端口
我把ecs中的web服务端口都配成9,方便管理。
启动frpc
现在,访问ecs的公网ip:9096就能访问自己的Jellyfin了。
来张整体图,能看到不同的媒体库以及各自的更新进度。
可以在首页直接打开视频
也可以点击进入影片介绍页,是的,jellyfin居然还有影片介绍页,我们只需要提供合规格命名的片源,其他的都交给jellyfin吧。
截图时是在公网,网速不佳,不然是可以看到演员的照片,还会推荐本地存储的相关影片,这个有点逆天了,查了一下这是从emby带出来的功能,强大的搜刮能力。
补一张卡司图
还可以进入演员详情页
Ok,不管从哪个路径进来,最终还是要播放影片。播放效果是这样滴
内网使用,还是非常流畅的。
参考文章
《Ubuntu 1604 安装 Docker 和 Docker Compose
》, https://wwwrabbitwflycom/articles/2019/05/14/1557827886665html
《在群晖Docker中安装Jellyfin媒体服务器
》, https://wwwsmbinncom/jellyfinhtml
正面回答这个问题之前,先看看虚拟机和Dcoker的区别。
总结一下虚拟机和Docker的区别:
再正面回答一下“Docker可以代替虚拟机运行生产服务器么”?
应用部署到服务器上的过程: 因为我是做java开发的,就拿一个正常的java项目举例。首先需要在服务器上搭建基础环境:
这只是一个简单的项目的部署前的配置,之后把您的项目打包发送的tomcat,运行即可。那如果有十几个服务器需要部署呢?是不是就要配置环境十多次,那人不是崩溃了。而且还会出现开发那边运行没问题,部署上去有问题的事情。所以这个时候docker出来了。
应用部署到docker上的过程:
两步搞定,不需要配置复杂的环境。如果有十多个容器需要部署怎么办?直接远程下载镜像即可,是不是很简单。
docker适合平台统一在linux的大单位用,服务越多越好,比如几百、几千、几万。配合k8s调度和微服务改造、加上自动化运维,能够实现弹性扩容和缩容,达到on demand的效果,典型的用例是互联网内容提供商。
对于一般中小企业,只有几十台服务器的,平台不统一的,投资docker不如虚拟机。
除了不能跨os平台,docker的另一个缺陷是隔离度不够。
先说答案:可以,但是没有必要。
容器技术是虚拟化技术的应用,使用容器代替虚拟机运行程序自然是可以的,容器在持续集成方面相对虚拟机还有一定的优势,但是如果仅仅是为了用容器而用容器,则没有必要。
容器技术最大的优势是容器编排,可以实现线上服务的无缝扩容,缩容,降级,熔断等自动化操作,极大的降低运维成本。所以,如果不用容器编排,则无须急着迁移。
理论上完全可以的,但目前我所接触到的生产方案基本上都是docker在虚机集群上跑。
看系统的要求了。docker不可能完全替代全部,windows服务器不可以,软件系统没有使用docker重新加载的,也是很难的。
用docker需要配合自动化,否则那是给自己找麻烦
什么是docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 20 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 07 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 111 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
下面的比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

传统虚拟化

Docker
为什么要用docker
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
特性容器虚拟机 启动秒级分钟级 硬盘使用一般为MB一般为GB 性能接近原生弱于 系统支持量单机支持上千个容器一般几十个
基本概念
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:1804 就包含了完整的一套 Ubuntu 1804 最小系统的 root 文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Centos安装docker18
常用的docker命令
常用的docker镜像
redis
mysql
Docker视频免费下载
1r9g
Docker视频|走进Docker|从Docker到CaaS(一)Docker集群管理介绍|从Docker到CaaS(三)Kubernetes|从Docker到CaaS(六)微服务与CaaS|从Docker到CaaS(二)Docker 容器管理工具|从 Docker 到 CaaS(五)灵雀云部署 Docker 容器|
1、 centos7 环境下,安装docker后服务器断开ssh连接
原因及处理方法1 : 通过ip addr 命令查看 docker0 的ip段是否同当前主机的网络内外网段是否相同
如果相同,修改/etc/docker目录下daemonjson文件里面添加如下内容:
{
"bip": "1921682001/24"
}
然后进行重启:
sudo systemctl daemon-reload
sudo systemctl restart dockerservice
原因及处理方法2: 内核和版本不匹配
a) 通过uname -r 查看内核版本,从docker官网上查看对应的日志信息,对比安装相应版本docker
b) 或者通过升级系统内核,重新安装docker处理 服务器-centos7 内核升级 -
Docker 是一个开源的 应用容器引擎 ,让 开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 。容器是完全使用沙箱机制,相互之间不会有任何接口。
由于本地开发好的程序往往都需要部署到服务器上进行运行,这就导致了程序需要运行在不同的环境上,这通常是一个令人头痛的事情。在过去,开发团队需要清楚的告诉运维部署团队,其所使用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。
于是乎, 虚拟化 技术应运而生。开发团队将开发好的程序在虚拟机上运行,这样就能解决运维的问题。但是由于虚拟机技术过重的特性导致了其 资源占用多、冗余步骤多以及启动慢的缺陷 。而这个时候 一种新的虚拟化技术搭配上容器化的思想 的产品便出现了,而它就是Docker。
下图是虚拟机技术和容器化技术架构的对比。我们可以得出以下总结:
[上传失败(image-efadd2-1643314980201)]
]( https://upload-imagesjianshuio/upload_images/646931-4b1431b77887632fjpgimageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
于是乎相比于虚拟机技术,容器化技术具有以下 优势:
相关网站
如下图所示,Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。服务器端分为Docker daemon, Image和Container三个部分。此外还有Docker Registry。
下面首先来介绍一下Docker中的主要概念
Docker的运行原理如下:客户端可以将docker命令发送到服务器端的Docker daemon上,再由Docker damon根据指令创建、选择或者从Docker仓库中拉取(pull)镜像。接着客户端可以通过镜像创建容器。当我们需要使用程序时,运行相应的容器即可。
小结
需要正确的理解仓储/镜像/容器这几个概念 :
在外面使用容器的时候,我们不希望容器中的数据在容器被删除后也一并删除了,这时候我们就可以 通过使用容器数据卷,将数据储存在本地并用Docker将其挂载到容器中,这样我们即使删除了容器,数据也依旧存在服务器中,也就实现了数据持久化。
特点
容器数据卷挂载命令(-v)
Dockerfile 挂载容器数据卷
我们除了可以从仓库中拉取镜像以外,我们也可以 自己创建镜像 ,这就要用到Docerfile。
dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 。
构建步骤:
基础知识:
流程:
说明:
在实际场景中,我们会遇到 多个Container之间通讯 的问题。而Docker网络就是用于解决此问题的技术。docker会给每个容器都分配一个ip,且容器和容器之间是可以互相访问的。
Docker网络原理
每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。这是个桥接网卡,使用了 veth-pair 技术 。Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据 Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网 关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并 让他们彼此联通(这样一对接口叫veth pair);
Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中 进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容 器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。
[上传中(image-41d42a-1642627027452-2)]
Docker Compose是一个用于定义并运行多容器应用的工具 。
Docker Compose的 步骤如下 :
NOTE: Compose :重要的概念。
docker-composeyml编写
Note: docker-compose会自动为多容器之间创建网络,保证通讯。
Docker Swarm 是Docker 的集群管理工具。 它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
Docker 是一个开源的 应用容器引擎 ,它的出现大大简化了运维的难度,提高了运维效率。过去我们需要在服务器上安装程序所需要的所有依赖,而如今我们只需要编写好docker-compose和Dockefile的脚本,就可以使程序一键跑通。在企业级的应用中,我们必然会惊颤使用到Docker和容器化技术。
狂神说
1、 service docker start // 启动docker
2、 docker images // 查看docker所安装的镜像
3、 docker search [name] 查询某个镜像 例如查询mysql docker search mysql
4、 docker pull [name] 拉取某个镜像 例如mysql docker pull mysql
5、 docker pull [name] [:tag] tag版本号 如果不写默认拉取最新的版本
例如: docker pull mysql:57
6、 docker rmi [imgaeId] 删除命令,imageId是镜像id
21 新建一个新的容器 docker pull centos
22 docker run [可选参数] image名字
参数说明
--name="Name" 给容器命名
-d 后台方式运行
-p [主机端口]:[容器端口] 指定容器的端口 例如启动tomcat 命令: docker run -p 8081:8080 tomcat 解释:8081是对外访问(服务器)的端口。8080是docker里面的tomcat端口 tomcat是镜像拉取下来后的名字 例:若别人访问。IP+8081端口才能访问到tomcat启动的项目
-P 大写P是随机指定端口
-it 与容器交互,就是进入到容器里面
命令: docker run -it [镜像名称] /bin/bash 例子: docker run -it centos /bin/bash
docker ps 查看运行中的容器
docker ps -q 只查询运行容器的编号,一般与下面-a合并使用, docker ps -aq
docker ps -a 查看曾经运行过的容器
docker ps -a -n=1 加上-n可以指定查询最近几个运行的容器、
Ctrl+p+q 这样退出就不会停止容器
docker rm -f [容器id] 指定删除某个运行的容器
docker rm -f $(docker ps -aq) 删除全部运行的容器
docker start [容器id] 启动容器
docker restart [容器id] 重启容器
docker stop [容器id] 停止容器
docker kill [容器id] 强制停止容器
docker run -d [镜像名] 例如: docker run -d centos
但是有问题, docker ps 查询不到运行的容器
原因:docker容器用后台运行,就必须要有一个前台进程,docker发现没有应用,所以就自动停止
docker logs -tf --tail 10 [容器id]
t的意思是时间戳,f保留日志打印窗口,tail持续打印,10打印最后10条
docker top [容器id]
docker inspect [容器id]
方式一: docker exec -it [containt_id] /bin/bash // 进入该镜像内部
docker cp [容器id]:[容器路径] [主机路径]
0条评论