本帖最后由 madrays 于 2024-10-13 10:59 编辑
📢前言
📟️接触Nas时间不长,感谢飞牛的出现带我走进了一个新的领域,对于我一个学土木干环保的人来说,这个世界太精彩了,相信有很多小伙伴们像我一样刚刚接触这个东西,看着大佬们这样那样的应用眼馋不已,确实这个东西对于我们门外汉来说还是有一些门槛的,接下来的日子里希望通过我不断踩坑的经历,为新来的小伙伴们指引一条“捷径”,目的是更快的上手飞牛,感受飞牛的魅力,说到这里,回到我的主题,关于docker,这是一个“玩”飞牛绕不开的东西。
🖥️关于docker
📋我们可能经常听到,也经常用到,网络上也有各种各样的热门项目的“一键”部署教程,之前玩云服务器的时候全靠一键教程来玩docker了,但是随着接触的更深一些,发现稍微深入一点了解docker,对所有docker项目来说,都是一通百通,所谓求人不如求己,了解docker的基础原理,在日后的项目部署过程中才会得心应手,不必处处求人。
当然,我的水平相!当!有!限!故此系列教程仅针对0基础小白,帮助小伙伴们更快上手,讲的都是最基础的东西,如果错误,烦请各位大佬指出!
🧭什么是Docker?
📋比喻:乐高积木 想象一下你在玩乐高积木,每个积木块都有特定的功能,并且可以组合在一起创建出复杂的结构。Docker就像是一套用于构建应用的乐高积木,它允许开发者将应用程序及其依赖打包成一个个标准化的“积木块”,也就是“容器”。
🏕️Docker的基本概念- ✨️镜像(Image):就像乐高的说明书,定义了如何组装一个积木块。Docker镜像是创建容器的基础模板,包含了运行应用程序所需的所有文件和配置。
- ✨️容器(Container):实际运行的应用程序实例。就像是你按照说明书组装好的乐高模型,可以根据需要启动、停止或删除。
- 🪄容器与主机的关系:
隔离性:容器有自己的文件系统、网络空间等,与宿主机隔离,保证了应用的一致性和可移植性。
轻量级:容器共享宿主机的操作系统内核,不需要额外的虚拟化层,因此启动速度快,资源消耗少。
- ✨️端口映射
📋比喻:门牌号
当你在容器里运行了一个Web服务器(比如Nginx),默认情况下这个服务只能在容器内部访问。如果想让外部可以直接访问这个服务,就需要告诉Docker如何把容器内的端口映射到宿主机上。这就像告诉快递员如何找到你的地址一样。 - docker run -p 8080:80 nginx
复制代码 这里 -p 后面跟着两个端口号,前者是宿主机上的端口,后者是容器中的端口。这样当外部设备尝试连接宿主机的8080端口时,流量会被转发到容器内的80端口。
- ✨️路径映射
📋比喻:行李箱有时候你需要在容器中保存数据或者读取宿主机上的文件,这时就需要使用路径映射。可以把容器内的某个目录与宿主机的一个目录关联起来,就像把你的行李箱里的东西拿出来放在酒店的柜子里一样。 - docker run -v /vol1/1000/test:/config
复制代码这里 -v 用来指定路径映射,前面的路径是宿主机上的,后面的路径是容器内的。
重点解释一下路径映射,这是非常容易搞错的概念!!拿上面的映射举例子,左边是宿主机真实路径,也就是你在飞牛系统内可以复制的那个路径,而右边是容器内部路径,容器可以看做是一个飞牛里面的小飞牛系统,/config代表了根目录下的config文件夹,而小飞牛看到了这个config文件夹在真实飞牛系统中的真实路径就是左边的/vol1/1000/test文件夹,这个例子建议新同学反复观看,深刻理解,后续会少踩很多坑。
✨️Docker Compose Docker Compose 是一个工具,它允许你在一个 YAML 文件中定义和配置一个应用(可以有多个服务,这里不多说)。这个文件叫做 docker-compose.yml,它描述了你的应用的服务、网络、卷以及其他基础设施。 🎯为什么使用 Docker Compose?- 一致性:Compose 确保了从开发到测试再到生产的环境一致性,因为所有的服务配置都在同一个文件中定义,你可以很方便的修改。
- 易于部署:使用 Compose 文件,可以方便地将应用部署到不同的环境中,只需一个命令即可启动。
🎮️Docker Compose 文件的基本结构一个简单的 docker版transmission的docker-compose.yml 文件看起来像这样: - version: "3"
- services:
- transmission:
- image: linuxserver/transmission:4.0.5 #tr4.0官方镜像地址
- container_name: transmission #设置自定义的项目名称
- environment:
- - PUID=1000
- - PGID=1001
- - TZ=Asia/Shanghai
- - USER=admin #设置用户名
- - PASS=password #设置密码
- - TRANSMISSION_WEB_HOME=/config/webui/trguing-zh #汉化web的映射路径
- volumes:
- - /vol1/@appshare/tr/config:/config #tr配置文件映射路径
- - /vol1/@appshare/tr/watch:/watch #tr监控种子文件映射路径
- - /vol1/1000/SSDPT/SSDPT:/vol1/1000/SSDPT/SSDPT #自定义的下载路径1
- - /vol2/1000/HDDPT/HDDPT:/vol2/1000/HDDPT/HDDPT #自定义的下载路径2
- - /vol2/1000/9KGPT/9KGPT:/vol2/1000/9KGPT/9KGPT #自定义的下载路径3
- ports:
- - 9091:9091
- - 51416:51416
- - 51416:51416/udp
- network_mode: host #设置网络模式,为保证种子链接顺畅,建议使用host网络模式
- restart: unless-stopped #设置重启模式
复制代码 🎰解释文件中的关键部分- version:指定了使用的 Compose 文件格式的版本。
- services:定义了应用中包含的服务。
- web:代表 Web 应用服务。
- image:指定使用的 Docker 镜像。
- ports:配置端口映射,使外部可以通过宿主机的端口访问容器内的服务。
- volumes:配置路径映射,使得宿主机的文件可以被容器内的应用访问。
- image:指定使用的数据库镜像。
- environment:设置环境变量,如账号密码等。
🀄️使用 Docker Compose 的命令- 后台运行应用:
🛸本期就讲到这里吧,后续我将持续分享我喜欢的各种docker项目。
🫧对于新同学来说,docker就是一个很方便我们新手的项目部署工具,大佬们的项目大多都可以通过这种方式部署到我们的本地飞牛上,希望大家能了解一些基础的docker知识,不要嫌麻烦,磨刀不误砍柴工,项目部署一次次失败的感觉是很难受的哈哈😆😆😆
|