『和Cherry玩转NAS』 篇一:干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

2024-03-12 11:15:16 112点赞 770收藏 64评论

前言

大家好,这里是可爱的Cherry。

Cherry共发布了近65期的docker相关文章,大部分项目都是使用docker cli 或者 docker-compose来部署的。于是就有朋友留言反馈说抄作业难度太大是不知道如何操作等等。

因此Cherry本期就单独水(不是)一篇docker命令行入门文章,欢迎大家留言讨论。

本文包含:docker cli,docker-compose,dockerfile三大层级。

声明!声明!

本文的目的是为了让新入门的NAS玩家能更通俗易懂的理解docker,使用docker。因此不介绍复杂的知识,甚至一定会出现一切专业性的错误(一是如不恰当的比喻,二是作者也不是专业技术人员),希望大家谅解。

我们的目的:

仅仅是在NAS上跑一些工具,有些用不上的知识和工具,就不介绍了,比如k8s,不如不常用的LXCLXD等等。


一、什么是容器

这里的容器Cherry特指docker了,不纠结父子关系了,分那么清楚也是一眼就忘,毕竟你管叫手机内存的人解释,人家🙄你。

介绍容器前,得先介绍容器化,而介绍容器化又得介绍虚拟化,那就不介绍了,记住一亩三分地批了证,土地性质还是这个性质,但允许你玩点花样。

比如现在可以这里做个池塘,那边做个房子,上面做个沙滩,下面做个树林。

这块地呢,我们叫宿主机。

这些池塘、房子、沙滩呢,我们叫容器(container)。

1.1 容器就是“单层的俄罗斯套娃”

请看图片,举个例子:

灰色框是我们的NAS

白色大圈是docker,不同颜色的方块则是docker容器(container)

白色小圈是服务/套件

容器就是服务器内部的套娃容器就是服务器内部的套娃

呈现的就是一个大方块套大圈,大圈套小方块的套娃式结构。

这就是容器化技术,将所有的服务封装在一个小小的圈子里自成生态,生态内可以自洽,生态外也可以通过一定方式衔接。

1.2 容器就是“打包好的垃圾桶”

再举个例子,在windows上装个软件,缓存在c盘,数据在d盘,资料在tmp下,有些还放点垃圾到system下。

而docker呢,主打一个在一起,大致分为:镜像(image)、容器(container)、卷(volume)、网络(network)4大块。

每一块都是一个独立个体,只要一删除,不管装了啥全都给你丢垃圾粉碎机里,一点不影响宿主机。我想,这也是很多人喜欢用容器的原因。


二、哪些NAS能用docker?

答案就是原则上所有NAS都可以使用docker。不管你是winnas,macNAS,arm派,还是unraid,还是群晖威联通极空间balabala。

因为docker不管是在linux还是windows、ARM架构、macos系统上,都支持并且很成熟。而centos更是单独推出了podman系列。

2.1 为什么我的NAS不能用docker?

两种情况,第一种就是nas的操作系统没有做docker的工具,第二种是你没办法获取的机器的SSH权限。

遇到任意一种问题,都可以通过另一种思路解决。例如没有UI的可以通过SSH部署docker,没有SSH的一般开发商都给你提供了dockerUI。

如果两种情况都遇到了,Cherry在这里建议换一个NAS,你那东西甚至不如一台手机。

2.2 推荐的NAS有哪些?

新手入门,Cherry推荐的还是群晖和极空间,分别代表国际和国内最强NAS。

群晖DS224是最新的2盘位NAS,采用J4125传统手艺,修复了DS223+无核显的问题(误),加上群晖自带的quickconnect和DDSN解析,轻松解决外网访问问题。属于是新手入门的第一选择。

国内NAS兴起以后,极空间可谓是独占前茅,尤其是Z423,可谓是性价比之最了,叠满BUFF的同时,能保障价格最能打。

2.3 我要怎么下载docker?

很简单,打开NAS桌面,看看应用商城/套件中心里有没有这类名字的软件,有的话,安装就行了。

docker/docker管理/container station/container manager/容器管理/等等


三、如何使用docker命令行(初级)

3.1 容器的基本构成

首先我们来认识一下docker最基本的4元素,前文提过,还记得吗?他们分别是:

镜像(image)、容器(container)、卷(volume)、网络(network)

🟡镜像(image)

相当于软件的安装包,是一切容器的基础,镜像提供了一个开盒即用的初始化容器,一个镜像可以对应无数个容器。

🟡容器(container)

就是我们通常所指的狭义上的docker,也就是一个软件。容器建立在镜像的基础上,一旦容器重启后,就会恢复到镜像初始化的状态,所有容器内发生的事情,都不会影响到宿主机。

🟡卷(volume)

卷就是存储文件夹,前面说到容器重启后会初始化,而卷的目的就是实现数据持久化。将容器内的文件通过映射的方式存储在宿主机的卷上,保证下次重启后能重新读取。这个卷可以是具体的文件夹,也可以是虚拟文件夹。

🟡网络(network)

网络就是宿主机内的vlan。他通过自定义生成一系列lan地址,实现hdcp,为每一个容器分配一个特定的ip,并保证不会冲突。一台NAS可能有1000个docker ip。

🔻常见衍生属性

每一个属性都有一些常见和常用的值每一个属性都有一些常见和常用的值

3.2 通过SSH连接到宿主机

这里推荐国产SSH软件finalssh:FinalShell。既可以实现命令行交互式操作,又可以方便快捷的传输文件,查看服务器性能。

首先我们得打开NAS的SSH端口,大部分NAS都可以在设置里找到SSH端口,部分NAS藏着掖着的,可能需要百度一下获取SSH密钥访问,这里就不多赘述了。

群晖为例,其他NAS差不多群晖为例,其他NAS差不多

访问以后,先输入sudo -i获取root权限,因为所有的docker指令都必须在root权限下才可以使用。

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

3.3 部署容器(docker run)命令行拆解

🔻示例命令行,这一段指令可以合并为一行(每个指令间用空格间隔),这里为了介绍详细,分段落展示。

docker run

-itd

--name huntly

--restart=always

-p :80

-v pwd/data:/data

-e TZ=Asia/Shanghai

--net=host

lcomplete/huntly

#合并后,下面的指令就是我们可以在ssh界面输入的指令

docker run -itd --name huntly --restart=always -p :80 -v pwd/data:/data -e TZ=Asia/Shanghai lcomplete/huntly

以上是之前介绍huntly用的一段docker cli,我们逐句解释

  • docker run

    • 【运行容器的指令,代表从一个镜像上建立一个新的容器】

  • -itd

    • 【-i -t -d 的合并指令】

      • -d: 后台运行容器,并返回容器ID;

      • -i: 以交互模式运行容器,通常与 -t 同时使用;

      • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name huntly

    • 【设置容器名字为huntly】

  • --restart=always

    • 【设置重启策略为always】

  • -p 80:80

    • 【设置端口映射,左边是宿主机端口,右边是容器内部端口,一般右侧不变,或者会提供给你,左侧是自定义的】

  • -v /home/data:/data

    • 【采用bind模式,左侧是宿主机路径,右侧是容器内路径,表示将宿主机/home/data的文件夹内容和容器内/data的文件夹内容做映射,目的是为了让修改容器文件更方便】

  • -v data:/data

    • 【卷模式,新生成一个名字为data的卷,并将容器内的/data文件夹全部映射到data卷内】

  • -e TZ=Asia/Shanghai

    • 【设置环境变量,区域为上海时区】

  • --net=host

    • 【将容器的网络更改为host,用了host,则-p指令失效。默认不使用,将网络纳入bridge中】

  • lcomplete/huntly

    • 【生成容器所使用的镜像,没有标签的默认使用latest,有标签的则寻找标签,找不到的会自动从docker仓库下载镜像】

3.4 容器常用命令行(docker cli)介绍

掌握下面这8条命令行,你基本已经无敌于NAS圈了,玩玩docker不在话下。

docker pull AAA/BBB:CCC

#下载发布者是AAA,名字是BBB,标签是CCC的镜像。

docker start/stop/restart id/name

#启动、停止、重启某容器,可以用容器id或容器名称来识别

docker ps -a

#列出所有的容器,-a则表示所有容器,包括停止的。没有-a则只有运行中的容器。

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

docker rm id/name

#根据id或名字删除指定容器

docker images

#列出所有的镜像

docker rmi id/name

#根据id或名字删除指定镜像

docker exec -it id/name sh

#根据id或名字进入容器内部,对容器内部的操作系统进行操作

docker logs -f id/nam

#根据id或名字查看当前容器的实时日志输出


四、如何使用docker-compose(中级)

4.1 docker-compose是什么?

docker-compose可以称为堆栈、项目,是一个.yml文件,常见名字有docker-compose.yml或compose.yml

将docker run指令长期存储化的手段。是一种将多个容器结合一起使用的方便能力。

使用docker-compose,可以方便、轻松的修改容器启动的各种参数,可以定义不同容器间如何互相访问,为大型项目提供了高效的部署方法。

🔻以下是一个常见的compose文件格式,如果对docker run的部分已经很清楚了,那应该有可以很简单的看清楚下列的内容。

需要单独讲解的是depends_on代表容器间的一个链接关系,可以理解为容器A要依托容器B才可以建立。

此外还有networks表示网络,一般来说没有特殊情况可以不写,因为compose会为每一个项目新建一个单独的网络,确保网络内的容器可以互相访问。

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

4.2 docker-compose的优势是什么?

曾经Cherry不喜欢用compose,因为我觉得compose太复杂,太麻烦,不安全。但是用了一段时间以后,emm,真香!!

docker-compose的优势大概总结有三点。

一是将容器管理持续化,即容器运行、容器修改都成为了文本记录在册,可以通过修改配置文件轻松完成容器管理。

二是将容器使用丰富化,相比较docker run中使用link来链接多个容器,compose默认容器间的访问是互联互通的,通过hostname的使用,可以让容器不暴露端口的情况下被同个项目下的容器所访问,大大提高了安全性。

三是容器安全度提升,使用compose文件,我只需要保存相应的compose文件即可,所有的配置、存储、网络都在文件里,即便我的NAS坏了,只要我还保留了compose文件和持久化文件目录,我可以在任何机器上重启这些容器,使得数据安全迁移。

4.3 怎么写docker-compose?

🔻我们可以通过网址将docker run 和 docker-compose进行快速转换。

https://www.composerize.com/

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

4.4 怎么用docker-compose?

因为docker-compose将指令写在了.yml文件中,因此我们做的只有两步。

#第一步,来到docker-compose.yml所在的文件夹

cd /volume1/docker/AAA

#第二步,启动容器

docker-compose up -d

🔻如下图,compose文件在/douyin目录下,只需要进入/douyin目录即可。

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

4.5 群晖使用docker-compose

🔻打开container manager,选择项目,点击新建,选择路径后复制代码部署即可

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

4.6 威联通使用docker-compose

🔻打开container station,创建应用程序,复制代码验证后部署即可

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

4.7 Dockge部署使用docker-compose

🔻打开dockge,填上名字,将代码复制到右侧部署即可。

干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

五、如何使用Dockerfile(高级)

5.1 什么是Dockerfile?

Dockerfile是镜像生成文本,新建一个文件名字叫Dockerfile,然后编辑该文件,写上一条条指令,运行后将从一个基础镜像生成另外一个镜像。

🔻这里是Cherry写一个Dockerfile文本

#FROM 代表基础镜像是node:16.18.1

FROM node:16.18.1 AS builder

#RUN 就是该层级的具体操作指令,每使用一次RUN会加一层层级,层级越多,容器体积越大

RUN npm config set registry https://registry.npmmirror.com

RUN apt-get update && apt-get -y dist-upgrade

#WORDIR就是设置系统的默认操作空间

WORKDIR /app

#COPY复制宿主机文件到容器内部

COPY ./poster-design /app

RUN node -v && npm install && npm i ts-node-dev -D && npm i --save puppeteer && npm i --save images

#EXPOSE 暴露端口,以后在docker run 的时候用-p

EXPOSE 3000

#CMD 容器内运行指令

CMD ["npm", "run", "prepared"]

CMD ["npx", "vite", "serve","--host", "0.0.0.0"]

5.2 为什么要使用Dockerfile?

很简单,有些项目作者更新勤快,懒得将项目打包成一个容器镜像,那是不是意味着我们无法使用docker容器化该项目了?

但是好在有Dockerfile文件,我们可以通过docker build指令,将Dockerfile文件内的指令生成一个本地镜像,以便生成docker容器。

有些github项目只有Dockerfile文件有些github项目只有Dockerfile文件

5.3 如何使用Dockerfile?

#来到Dockerfile文件所在目录

cd /path

docker build -t homebox:local .

使用docker build指令,将Dcokerfile的文件生成为一个名叫homebox:local的镜像,然后就和普通镜像一样可以使用了。

5.4 Dockerfile的坑

虽然Dockerfile很方便,但是Cherry这里也不建议使用。

为什么呢?因为网络和体积的问题,前面提到Dockerfile中RUN的使用会增加容器镜像体积,动则2、3G。

因此为了获取最小体积的镜像,往往会使用alpine版本作为基础镜像,而alpine小时因为内置包少,有大量的工具需要我们手动安装。

而安装则需要网络,国内环境下,及时你使用proxy代理,在Dockerfile生成的过程中,也是无效的。

你需要频繁的替换node、php、debian等等各类平台、工具的国内源才有可能让Dockerfile文件继续执行下去,操作繁琐且复杂。


最后

这里是Cherry,欢迎大家留言讨论docker相关的内容。

之前写文章的时候,考虑到很多朋友一直跟着看,于是变将项目部署这块写的很简单了,基本上就是一个compose文件就行了,却没有考虑到依旧有很多docker新人在尝试摸索。

这也是Cherry最近发现自己做的不够好的地方,也是这篇文章的初衷——在发现更多好玩好用的项目同时,帮助更多的NAS玩家用好NAS,用好docker。

最后,希望看完这篇文章的你,点个收藏,点个关注,让我们可以更持续的交流~~


干货满满,新手必读,一文掌握docker核心技巧,轻松成为NAS高手——docker(篇一)

欢迎朋友们评论区讨论留言。我会定期更新关注NAS使用方法、开源软件与Docker软件、游戏与生活相关内容,喜欢的朋友请关注、点赞、留言支持。

本文收录在值得买 「优质内容激励计划·每周精选」,点击了解计划详情>>>

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

1849元起

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

2485.01元起

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

3499元起

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

1749元起

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

2849元起

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

2783.51元起

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

5899元起

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

1999元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

2190.84元起

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

1341.01元起

ZSpace 极空间 私有云Z2Pro 四核2盘位NAS家庭个人云网络存储服务器手机平板扩容适用iPhone15 水

ZSpace 极空间 私有云Z2Pro 四核2盘位NAS家庭个人云网络存储服务器手机平板扩容适用iPhone15 水

1299元起

ZSpace 极空间 私有云 T2 2盘位NAS存储(RK 3568、4GB)

ZSpace 极空间 私有云 T2 2盘位NAS存储(RK 3568、4GB)

1799元起

Synology 群晖 DS423+ 4盘位 NAS网络存储 (Intel四核 、无内置硬盘)

Synology 群晖 DS423+ 4盘位 NAS网络存储 (Intel四核 、无内置硬盘)

4099元起

ZSpace 极空间 私有云Q2C四核Nas网络存储服务器 家庭个人云网盘水墨黑

ZSpace 极空间 私有云Q2C四核Nas网络存储服务器 家庭个人云网盘水墨黑

899元起

ZSpace 极空间 私有云Z4Pro 性能版 8核16G内存 四盘位Nas网络存储服务器家庭个人云珍

ZSpace 极空间 私有云Z4Pro 性能版 8核16G内存 四盘位Nas网络存储服务器家庭个人云珍

3499元起

文中相关商品

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)
ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)
UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)
APC 施耐德 BK650M2-CH UPS电源 650VA/390W
64评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章

生活家,数码领域作者,电脑外设领域作者

发文累计获赞6642,内容被5.1万人收藏

关注 打赏
作者其他文章
最新文章 热门文章
770
扫一下,分享更方便,购买更轻松