本内容来自@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容器。
小白圈是服务/套件
容器是服务器内嵌套的玩偶
呈现的是一个类似俄罗斯套娃的结构,大圆里面有一个大正方形,小正方形里面有一个大陷阱。
它是一种容器化技术,将所有服务封装在一个小圈子内,形成自己的生态系统。它可以在生态系统内部是自洽的,也可以通过某种方式与生态系统外部相连。
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。
常见的派生属性
每个属性都有一些常用的通用值
3.2 通过SSH连接到宿主机
这里推荐国产SSH软件finalssh:FinalShell。除了交互式命令行操作外,文件传输和服务器性能检查也方便快捷。
首先,您需要打开NAS 上的SSH 端口。您可以在大多数NAS 的配置中找到SSH 端口。您可能需要使用百度才能访问。以下是详细信息。
我以Synology为例,其他NAS也类似。
所有docker 命令都必须以root 权限使用,因此访问它们后,输入sudo -i 即可获得root 权限。
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,则仅存在正在运行的容器。
dockerrmid/名称
#根据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 会为每个项目创建一个单独的网络,以便网络中的容器可以互相访问,因此除非有特殊情况,否则不需要编写网络。
4.1 docker-compose是什么?
Cherry 过去不喜欢使用Compose,因为她认为它太复杂、麻烦且不安全。不过用过一段时间后,味道真的很好闻!
docker-compose的好处可以概括为三点。
首先是持续的容器管理。这意味着容器的执行和容器的更改都以文本形式记录,可以通过修改配置文件轻松完成容器管理。
二是加强容器的利用。与在docker run 中使用链接来链接多个容器相比,使用主机名允许容器在同一个项目中使用,而无需暴露访问的端口。底层容器大大提高了安全性。
第三,如果您使用配置文件,即使您的NAS损坏,您也只需保存配置文件即可。配置文件和持久文件目录允许您在任何计算机上重新启动这些容器,从而使您能够安全地迁移数据。
4.2 docker-compose的优势是什么?
通过URL 快速转换docker run 和docker-compose。
https://www.composerize.com/
4.3 怎么写docker-compose?
docker-compose 将指令写入.yml 文件,因此只需执行两个步骤。
#第一步进入docker-compose.yml所在文件夹
cd /volume1/docker/AAA
#第二步,启动容器
docker-compose up -d
创建文件位于/douyin目录下,如下所示。只需在/douyin 目录中输入即可。
4.4 怎么用docker-compose?
打开容器管理器,选择您的项目,单击新建,选择路径,复制代码进行部署。
4.5 群晖使用docker-compose
打开容器站,创建应用程序,复制代码,验证后部署
4.6 威联通使用docker-compose
打开扩展坞,输入名称,复制并展开右侧的代码。
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"]