认识飞牛NAS的Docker功能:飞牛FnOS使用技巧-7
认识飞牛NAS的Docker功能:飞牛FnOS使用技巧-7
Docker 大家肯定不陌生,它在容器化部署方面的表现堪称惊艳。使用飞牛OS系统前,大家可能自己搭建过Docker,操作系统可能是Windows、Ubuntu,亦或是MACOS。
那么飞牛 OS 使用 Docker 有什么优势呢?飞牛 OS的Docker又有什么不同?怎么用好?
二、飞牛 OS 与 Docker 简介
(一)飞牛 OS 是什么
飞牛 OS 是一款基于 Linux 内核(Debian 发行版)深度定制的 NAS 系统 ,由国内团队开发。它就像是一个得力的私人管家,主要面向家庭用户和小型办公室,能把普通的 x86 架构设备,比如老旧 PC 或者闲置硬件,变成强大的私有云存储系统。你只需要把硬盘连接上设备,安装好飞牛 OS,就能打造属于自己的私有云盘,随时随地存储和访问文件,方便得很。
(二)Docker 是什么?概念&架构&原理
Docker 是一个开源的应用容器引擎,可以将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上,实现虚拟化。它的核心概念有镜像、容器和仓库。
image-202511062010483741、镜像 (Images)
镜像就像是一个只读的模板,包含了容器运行所需的所有基础文件和配置信息,是容器启动的基础,你可以把它想象成一个精心准备好的 “包裹”,里面装着运行一个应用所需的一切。
2、容器(Container)
容器则是镜像的运行实例,是一个轻量级、可随时启动和停止的运行环境,各个容器之间相互隔离,就好比一个个独立的小房间,每个房间里的应用都互不干扰 。
3、镜像仓库(Registry 注册中心)
类似于代码仓库,是用来存储和分发 Docker 镜像的地方,有公共镜像仓库,如 Docker Hub,里面有大量官方和社区维护的镜像供大家下载使用,企业也可以搭建私有镜像仓库,保证数据安全。
比如:Docker 公司提供了公共的镜像仓库 https://hub.docker.com(Docker 称之为 Repository)提供了庞大的镜像集合供使用
一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag)
一个仓库会包含同一个软件不同版本的镜像,而标签对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
4、Volume 数据卷(数据卷)
数据卷是用来将数据持久化到我们宿主机上,与容器间实现数据共享,简单的说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化了,比如我们的数据库容器,就可以把数据存储到我们宿主机上的真实磁盘中。
5、Docker网络
默认情况下,Docker 会创建三种网络:
bridge(默认)hostnone
不指定,默认网络bridge 类型,需要指定容器和主机端口映射;host网络两者合一,即容器直接使用宿主机的 IP 和端口;none用的容器内部网络端口
# 运行一个容器,默认连接到默认的 bridge 网络
docker run -d --name web -p 80:80 nginx
# 创建一个自定义的 bridge 网络(推荐)
docker network create my-bridge-network
# 将容器连接到自定义网络
docker run -d --name app --network my-bridge-network my-app
docker run -d --name db --network my-bridge-network mysql
相关概念:
image-20251106201857621Docker工作原理
Docker 的工作原理基于 Linux Namespace、Cgroups 和联合文件系统。Namespace 提供进程级别的资源隔离,比如 PID Namespace 隔离进程 ID,让容器内看不到主机上的其他进程;例如NET Namespace 实现网络隔离,每个容器有自己独立的 IP、端口等。Cgroups 则用于限制容器的资源使用,像限制 CPU、内存、I/O 读写等,避免单个容器占用过多资源影响其他容器和宿主机。联合文件系统允许多个文件系统分层堆叠,镜像层是只读的,多个层叠加避免重复存储,容器层是可写的,只记录运行时的变更,减少存储占用。
image-20251106202615968与传统虚拟机相比,Docker有什么优势?
特性容器虚拟机启动秒级分钟级硬盘使用一般为 MB一般为 GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个
三、飞牛 OS 使用 Docker ,双剑合璧
好处:大大简化了Docker操作,不用命令行也能玩转Docker应用
image-202511062031043021)简化部署流程
在飞牛 OS 上使用 Docker 部署应用,流程大大简化。就拿部署 MySQL 数据库来说,以往传统方式部署 MySQL,需要先安装 MySQL 官方的安装包,这就涉及到在 Debian 系统中处理各种依赖关系,像安装相关的库文件、配置环境变量等,操作繁琐且容易出错 。要是依赖包版本不匹配,或者缺少某些依赖,安装就会失败,排查问题也相当耗时。
而使用 Docker 部署 MySQL 就轻松多了。在飞牛 OS 自带的 Docker 桌面端,打开镜像仓库搜索栏,输入 “mysql”,官方版镜像通常排在第一位,点击下载,几分钟就能完成。下载好镜像后,在文件管理器的磁盘分区中新建一个 “mysql” 文件夹用于持久化存储数据文件。接着在 Docker 右上角添加容器,资源限制可按默认值,勾选开机自启,再进行端口映射,把容器的 3306 端口暴露到主机同号端口 。切换到存储标签,将新建的 “mysql” 文件夹对应到容器内路径,最后在环境标签添加变量 “MYSQL_ROOT_PASSWORD” 写入数据库 root 密码,一个 MySQL 数据库就部署好了,整个过程简单快捷,新手也能轻松上手。
再比如部署 Nextcloud,这个开源的私有云存储和协作平台功能强大,但传统部署方式需要依次安装 Web 服务器(如 Apache 或 Nginx)、PHP 环境以及各种扩展,还得安装数据库(如 MySQL 或 MariaDB)并进行配置,之后才能安装 Nextcloud,过程复杂,任何一个环节出问题都可能导致部署失败 。
借助 Docker,在飞牛 OS 上部署 Nextcloud 只需几个简单步骤。先创建一个专门存放 Nextcloud 配置的文件夹,然后创建 “docker-compose.yml” 文件,粘贴相关配置内容,这些配置内容定义了 Nextcloud 服务和数据库服务的相关信息,包括使用的镜像、端口映射、数据卷挂载等。完成配置后,执行 “docker-compose up -d” 命令,就能一键启动 Nextcloud 及其相关的数据库服务,轻松完成部署 ,极大地提高了效率,降低了部署难度。
2)自带镜像加速
因为某些原因,大部分Docker镜像下载不方便,飞牛OS自带镜像加速,国内下载速度还挺快。如果遇到某些镜像下载不了,可尝试更换上一个版本标签,最新版本可能未同步过来。
3)远程管理和访问很方便
手机安装最新版本飞牛App,手机远程就能监控和管理Docker,访问Docker应用
四、Docker工具使用
1)Docker准备
首先,确认你的飞牛 OS 系统已经安装了 Docker。飞牛 OS 通常默认预装了 Docker,如果不确定,可以通过 SSH 连接到飞牛 OS 设备,在终端输入 “docker -v” 命令,若显示 Docker 的版本信息,说明已安装 。
接着,在飞牛 OS 的文件管理器中,选择一个磁盘分区(如存储空间较大的分区),创建一个专门用于存放 Docker 配置文件和数据的文件夹,比如命名为 “docker_data”。这个文件夹将用于存储各种容器的数据和配置,方便管理和备份。
2)镜像获取与管理
获取镜像有多种方式。在飞牛 OS 自带的 Docker 桌面端,点击左侧菜单栏中的 “镜像仓库” 选项,进入镜像仓库界面。在搜索框中输入你想要的镜像名称,比如 “ubuntu”,然后点击搜索按钮,系统会列出相关的镜像 。官方镜像一般会标注 “Official Image”,选择合适的镜像后,点击 “下载” 按钮,即可将镜像下载到本地。
image-20251106203615012
image-20251106203711046也可以在 SSH 终端中使用命令行获取镜像。例如,拉取最新版本的 Nginx 镜像,命令为 “docker pull nginx:latest”;如果要拉取特定版本,如 Nginx 的 1.23.3 版本,命令则是 “docker pull nginx:1.23.3” 。在拉取镜像时,如果网络不稳定,可能会导致下载失败,可以尝试更换网络环境或重新拉取。
如果觉得飞牛自带的加速对于某些类型的镜像下载Pull不够理想,可添加其他镜像源,设置-加速源设置
image-20251106204041833
image-20251106204109239对于已经下载到本地的镜像,需要进行有效的管理。在 Docker 桌面端的 “本地镜像” 界面,可以查看已下载镜像的列表,包括镜像名称、标签、大小和创建时间等信息。如果某个镜像不再使用,可以点击镜像右侧的删除按钮将其删除 。在终端中,使用 “docker images” 命令可以查看本地镜像列表,使用 “docker rmi 镜像名称:标签” 命令来删除指定镜像,比如 “docker rmi nginx:1.23.3”。
image-20251106203816553绿色代表已使用,灰色图标的镜像还未使用
同时,还可以使用 “docker image prune” 命令来清理无用的镜像,释放磁盘空间。
3)容器创建与配置
在 Docker 桌面端,点击左侧菜单栏的 “容器” 选项,然后点击右上角的 “添加容器” 按钮 。在弹出的创建容器窗口中,首先在 “本地镜像” 下拉框中选择之前下载好的网心云镜像(一般为 “images-cluster.xycloud.com/wxedge/wxedge:latest”)。接着,勾选 “开机自动启动” 选项,这样每次飞牛 OS 系统启动时,XX容器也会自动启动 。
image-20251106204212519在 “资源限制” 部分,可以根据设备的硬件资源情况进行设置。如果设备配置较高,可以不做限制,让容器根据实际需求使用资源;若设备配置有限,可适当限制 CPU 和内存的使用,比如限制 CPU 使用率为 50%,内存限制为 512MB 。
image-20251106204313110端口设置,绑定主机端口和容器端口,做映射(Bridge网络)
切换到 “存储位置” 标签页,点击 “添加存储” 按钮。在 “本地路径” 栏选择之前创建的 “docker_data” 文件夹下的一个子文件夹,例如 “docker_data/wangxin”,用于存放网心云的数据;在 “容器路径” 栏输入 “/storage”,这是网心云容器内默认的数据存储路径,通过这种映射关系,容器内的数据会持久化存储在飞牛 OS 的磁盘上 。
再切换到 “环境变量” 标签页,添加环境变量。
设置完成后,点击 “确定” 按钮,容器就创建并配置好了。
4)容器的启动、停止与删除
在日常使用中,经常需要对容器进行启动、停止和删除操作。在 Docker 桌面端的 “容器” 界面,对于处于停止状态的容器,点击容器右侧的 “启动” 按钮,即可启动容器;对于正在运行的容器,点击 “停止” 按钮,容器会停止运行 。如果想要删除某个容器,先停止容器,然后点击 “删除” 按钮即可。
image-20251106204634074容器界面:
1、通过点击运行日志,查看Docker应用的日志
2、终端
连接Docker内置系统的Shell
五、可能遇到的问题及解决方法
1)镜像下载失败
镜像下载失败是使用 Docker 时常见的问题之一。首先,网络问题是导致镜像下载失败的主要原因之一。如果你的网络不稳定,或者网络带宽较低,可能会导致下载过程中断或超时。例如,在家庭网络环境中,多人同时使用网络,可能会使下载镜像时的网络速度变得很慢,甚至出现下载失败的情况 。此时,可以尝试切换网络环境,比如从 Wi-Fi 切换到移动数据网络,或者检查网络连接是否正常,重启路由器等。
镜像源问题也不容忽视。飞牛 OS 默认的镜像源可能在某些地区访问不稳定,比如飞牛官方使用的阿里云镜像,在境外访问时容易出现问题 。你可以更换镜像源来解决这个问题。在飞牛 OS 的 Docker 管理页面,找到 “镜像仓库” 选项,进入 “仓库设置”,添加一个新的国内 Docker 镜像源。
(二)容器启动失败
容器启动失败的原因较为复杂,端口冲突是常见原因之一。每个容器都需要占用一定的端口来提供服务,如果宿主机上已经有其他进程占用了容器所需的端口,容器就无法正常启动 。例如,你在飞牛 OS 上已经运行了一个占用 80 端口的 Web 服务器,此时再尝试启动一个同样需要 80 端口的容器,就会出现端口冲突,导致容器启动失败 。解决方法是检查宿主机上的端口占用情况,在 Linux 系统中,可以使用 “netstat -tuln” 命令查看当前所有正在使用的端口,找到占用目标端口的进程,将其停止,或者修改容器的端口映射,将容器内部的端口映射到宿主机上其他未被占用的端口 。
配置错误也是导致容器启动失败的重要因素。比如在创建容器时,存储卷挂载路径设置错误,容器无法正确访问宿主机上的文件或目录,就可能导致启动失败 。以部署 Nextcloud 为例,如果在配置数据卷挂载时,将主机上的路径写错,Nextcloud 容器在启动时就无法找到存储数据的目录,从而启动失败 。所以在创建容器时,一定要仔细检查各项配置,确保存储卷挂载路径存在且权限设置正确,环境变量配置无误等。如果不确定配置是否正确,可以参考官方文档或社区中其他人的成功配置案例。同时,通过 “docker logs < 容器 ID>” 命令查看容器的日志信息,根据日志中的错误提示来定位和解决问题,比如日志中提示 “no such file or directory”,就说明可能存在文件路径错误的问题 。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
