首页 > 自考资讯 > 高考百科

新手必读,一文掌握docker核心技巧,轻松成为NAS高手—docker(docker教程)

小条 2024-06-27

本内容来自@WHAT IS WORTH BUYING APP,观点仅代表作者个人观点。

前言

大家好,我是可爱的Cherry。

Cherry 发表了近65 期docker 相关文章,他的大部分项目都是使用docker cli 或docker-compose 进行部署。结果有朋友留言说不知道怎么用,抄作业也有困难。

所以Cherry打算在本期再写一篇关于docker命令行的(非)介绍性文章。欢迎大家留言讨论。

本文包括三个级别:docker cli、docker-compose、dockerfile。

陈述!陈述!

本文的目的是帮助NAS新玩家更轻松地了解和使用Docker。因此,我们不会介绍复杂的知识。它还包含技术错误(首先是不恰当的比喻,其次希望您理解作者不是专业工程师)。

我们的目标:

除了在NAS上运行一些工具之外,我不会介绍没有什么用处的知识或工具,比如k8s,它不如LXCLXD,后者不是很常用。

一、什么是容器

这里的容器樱桃特指父子关系。这种区别是不言而喻的,因此最终调用手机内存的将是人。请解释一下。

请记住,1/3的土地被批准,因为在部署容器之前,您必须先部署容器化,而要部署容器化,您还必须部署虚拟化。一样,但是你可以做一些技巧。

例如,您可以在这里有一个池塘,那里有一座房子,上面有一个海滩,下面有一个森林。

这块土地称为主机。

这些池塘、房屋和海滩被称为容器。

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

请参见照片示例。

灰色框是NAS

白色的大圆圈是docker,不同颜色的方块是docker容器。

小白圈是服务/套件

b3ff1c3ed8214003b34c04d679065166~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=QrMn0E5VYHikU2kwvQsOwsiwipQ%3D 容器是服务器内嵌套的玩偶

呈现的是一个类似俄罗斯套娃的结构,大圆里面有一个大正方形,小正方形里面有一个大陷阱。

它是一种容器化技术,将所有服务封装在一个小圈子内,形成自己的生态系统。它可以在生态系统内部是自洽的,也可以通过某种方式与生态系统外部相连。

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

再比如,在Windows上安装软件时,缓存在C盘,数据在D盘,数据在tmp下,一些垃圾在系统下。

说到docker,它主要关注一件事,大致分为四个主要部分:镜像、容器、卷和网络。

每个部分都是一个独立的实体,只要删除它,它就会被丢弃,而不会以任何方式影响主机,无论安装了什么。我想这就是为什么很多人更喜欢使用容器的原因。

二、哪些NAS能用docker?

答案是原则上任何NAS都可以使用Docker。无论是winnas、macNAS、arm、unraid、Synology、QNAP 还是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推荐Synology和Polar Space,分别代表了海外和国内最强的NAS。

Synology DS224采用J4125的传统技术解决DS223+无核显的问题,并利用Synology独特的快速连接和DDSN分析轻松解决外部网络访问问题。是初学者的首选。

国产NAS崛起以来,子章一直走在前列,尤其是Z423,性价比最高,BUFF充沛,保证价格最优。

2.3 我要怎么下载docker?

非常简单。打开NAS桌面,查看应用商店/套件中心是否有该名称的软件。如果是这样,只需安装它即可。

Docker/Docker管理/Container Station/Container Manager/Container Management/etc.

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

3.1 容器的基本构成

我们首先解释Docker 的四个最基本的元素。还记得吗?

图像、容器、卷、网络

图像

它相当于一个软件安装包,是所有容器的底层镜像。一张图片对应无数个容器。

容器

这通常被称为狭义的docker,它是软件。容器是基于镜像构建的。一旦容器重新启动,容器内发生的一切对主机都不会产生影响。

体积

卷是存储文件夹,容器在重启后初始化。卷的目的是提供数据持久性。通过映射,文件存储在主机卷上的容器中,以便下次重新启动后可以再次读取它们。该卷可以是特定文件夹或虚拟文件夹。

通讯网络

该网络是主机的VLAN。他通过定制生成一组LAN地址,实现hdcp,并为每个容器分配特定的IP以避免冲突。一个NAS 可能有1,000 个Docker IP。

常见的派生属性

3e3214ac25a841eaae9c3f6f881801c3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=wJgf7JVzhMgL5wWqjtZ%2BIVU3438%3D 每个属性都有一些常用的通用值

3.2 通过SSH连接到宿主机

这里推荐国产SSH软件finalssh:FinalShell。除了交互式命令行操作外,文件传输和服务器性能检查也方便快捷。

首先,您需要打开NAS 上的SSH 端口。您可以在大多数NAS 的配置中找到SSH 端口。您可能需要使用百度才能访问。以下是详细信息。

97a4f029e42647c2b168161e97e90576~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=TpSf9Xo80Wk6ajB5G9sGBynxvpw%3D 我以Synology为例,其他NAS也类似。

所有docker 命令都必须以root 权限使用,因此访问它们后,输入sudo -i 即可获得root 权限。

c3918c768eba4299aef4891599c73a2c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=GYg3Equ8ufsOP8BCllR5PYyzwLc%3D

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

本节中的指令可以合并在一行上(各指令之间用空格分隔)。它们以段落形式显示以提供更多详细信息。

码头运行

-itd

--名字狩猎

--重新启动=始终

-p :80

-v pwd/data:/数据

-e TZ=亚洲/上海

--net=主机

不完整/狩猎

#合并后,可以在ssh界面输入以下命令:

docker run -itd --name Huntly --restart=always -p :80 -v pwd/data:/data -e TZ=亚洲/上海lcomplete/huntly

上面是Huntly 之前使用的docker cli 的一部分。我将逐步解释。

docker run [运行容器的命令。代表从镜像创建一个新的容器] -itd [-i -t -d 合并命令] -d: 在后台运行容器并返回容器ID。交互式容器。通常与-t一起使用。 -t: 将伪输入终端重新分配给容器。通常与-i一起使用。 --name Huntly [将容器名称设置为Huntly] --restart=always 将重启策略设置为always] - p 80:80 [设置端口映射。左侧是主机端口,右侧是容器的内部端口。右侧通常保持不变或提供。左侧保持不变。 side是定制的] -v /home/data:/data [使用绑定模式。左边是宿主机路径,右边是容器内部的路径。也就是说,主机上文件夹/home/data 的内容映射到容器内/data 文件夹的内容。其目的是使修改容器文件变得更容易。 ]- v data:/data [音量模式。创建一个名为data 的新卷并映射所有/data 文件夹。将容器添加到数据卷] -e TZ=Asia/Shanghai 【设置环境变量。地区为上海时区] --net=host 【将容器的网络改为主机。如果使用host,-p命令不起作用。默认情况下不使用。该网络包含在网桥中。 lcomplete/huntly 【如果没有标签,则默认使用最新的。搜索标签(如果存在)。一旦找到,就会自动从docker仓库下载镜像。]

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

一旦掌握了以下8条命令行,你在NAS圈子里基本立于不败之地,轻松玩转docker。

Docker 拉AAA/BBB:CCC

#Download 发行商是AAA,名称是BBB,标签是CCC的镜像。

启动/停止/重新启动docker ID/名称

#启动、停止和重新启动容器。容器可以通过容器ID或容器名称来识别。

docker ps -a

#列出所有容器。 -a 表示所有容器,包括停止的容器。如果未指定-a,则仅存在正在运行的容器。

397ee499096246eb968c371ea789354a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=C5EfI%2Fs66SwHF3CROVWkI3rvwWg%3Ddockerrmid/名称

#根据ID或名称删除指定容器

码头工人图像

#列出所有图像

docker rmi ID/名称

#根据ID或名称删除指定图片

docker exec -it id/名称sh

#根据ID或名称进入容器,操作容器内的操作系统。

docker log -f id/nam

#根据ID或名称显示当前容器的实时日志输出

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

docker-compose 称为堆栈或项目。常见名称为docker-compose.yml 或compose.yml。

长期存储Docker执行指令的一种手段。这是一个方便的功能,允许您组合使用多个容器。

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

以下是常见的撰写文件格式。如果你已经了解了docker run 部分,那么下面的内容应该很容易理解。

另外需要说明的是,depends_on代表的是容器之间的链接关系。我们看到容器A只能基于容器B建立。

另外,还有一个代表网络的网络。通常,Compose 会为每个项目创建一个单独的网络,以便网络中的容器可以互相访问,因此除非有特殊情况,否则不需要编写网络。

4d451e81adf84c768ef3dc4915fa3c9a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=PL8H1YjOGSJsjmoF14hYW2VT56Q%3D

4.1 docker-compose是什么?

Cherry 过去不喜欢使用Compose,因为她认为它太复杂、麻烦且不安全。不过用过一段时间后,味道真的很好闻!

docker-compose的好处可以概括为三点。

首先是持续的容器管理。这意味着容器的执行和容器的更改都以文本形式记录,可以通过修改配置文件轻松完成容器管理。

二是加强容器的利用。与在docker run 中使用链接来链接多个容器相比,使用主机名允许容器在同一个项目中使用,而无需暴露访问的端口。底层容器大大提高了安全性。

第三,如果您使用配置文件,即使您的NAS损坏,您也只需保存配置文件即可。配置文件和持久文件目录允许您在任何计算机上重新启动这些容器,从而使您能够安全地迁移数据。

4.2 docker-compose的优势是什么?

通过URL 快速转换docker run 和docker-compose。

https://www.composerize.com/

b3719a0355e546b6a5fce4bf35e60234~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=eneOTj7L8fnWxaX%2FvHfnOzy7s5Y%3D

4.3 怎么写docker-compose?

docker-compose 将指令写入.yml 文件,因此只需执行两个步骤。

#第一步进入docker-compose.yml所在文件夹

cd /volume1/docker/AAA

#第二步,启动容器

docker-compose up -d

创建文件位于/douyin目录下,如下所示。只需在/douyin 目录中输入即可。

77fd1f0e2a79464ca90f9d4e70919655~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=yUnnM0LzqnGK36TF7FVSlgAUIbM%3D

4.4 怎么用docker-compose?

打开容器管理器,选择您的项目,单击新建,选择路径,复制代码进行部署。

1d30bdbfddeb4a6ca8e4d2a809055808~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=8FI7V8qXG9Aqf2R3lo88ttTQe7E%3D

4.5 群晖使用docker-compose

打开容器站,创建应用程序,复制代码,验证后部署

d14198ef16104ada921797b69248c6cc~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=vuELi93IKh8qvBJAY4x9N0YMiQc%3D

4.6 威联通使用docker-compose

打开扩展坞,输入名称,复制并展开右侧的代码。

8a98c500683846bcaf59e038cb7ac60b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=w1xFB%2FEuwPEX%2FjvrjR0KaYtT2LE%3D

4.7 Dockge部署使用docker-compose

五、如何使用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容器。 0716ba5f31804738aa98bc0106f66407~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=FUrXAdhkd7BtXSZfkZtF%2FaUdbps%3D有些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。 最后,希望看完这篇文章的你,点个收藏,点个关注,让我们可以更持续的交流~~ 84d20b8106e346ddacb266378372cc9e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720043459&x-signature=LZE%2FFu5NjJmMlh4jhaEotTgpLlA%3D欢迎朋友们评论区讨论留言。我会定期更新关注NAS使用方法、开源软件与Docker软件、游戏与生活相关内容,喜欢的朋友请关注、点赞、留言支持。 作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~ 版权声明:本文转载于网络,版权归作者所有,如果侵权,请联系本站编辑删除

猜你喜欢