面向 Desi(门外汉)语言的 Docker 入门指南 :) 零级:桌面和服务器的区别 一级:在一台服务器内部署多台服务器 二级:想创建自己的虚拟机吗? 三级:容器? 四级:如何使用容器? 五级:解答……如何使用容器?

2025-06-07

面向 Desi(外行)语言极端初学者的 Docker :)

LEVEL ZERO桌面和服务器之间的区别

第一级在一台服务器内安装多台服务器

第二级想要创建自己的虚拟机吗?

第三级容器?

第四级如何使用容器?

第五级答案...如何使用容器?

IMP 请求:
非常欢迎您通过加入表格加入我的团队。
如果您能帮助保护人类免受冠状病毒爆发等各种疾病侵害的开源项目,我们也非常欢迎您加入开源智能系统 (OSINT)
https://github.com/Manishfoodtechs/OSINTHRH/wiki

我曾经用浅显易懂的语言为初学者撰写过许多关于服务器、云和容器的文章。你可以访问我的个人资料找到这些文章。这里又有一篇这样的文章,只是标题不同。

LEVEL ZERO桌面和服务器之间的区别

什么是桌面?桌面包含 CPU、RAM、硬盘等,以及操作系统。操作系统可以是 Windows、Linux、Mac 等。桌面上有一个图形界面 (GUI),但如果移除 GUI,它就变成了服务器。我们称之为“裸机服务器”。

第一级在一台服务器内安装多台服务器

虚拟化

金属服务器成本最高。因此,人们将它们共享,并称之为虚拟专用服务器 (VPS/VM)。但并非所有人都想要像 Windows 那样的操作系统。有些人想要 Linux。20 年前,出现了一款名为“虚拟机管理程序 (Hypervisor)”的软件,它使得在同一台机器上运行 Windows 和 Linux 成为可能,这项技术被称为虚拟化。60 年前,IBM 就开始了虚拟化的研究。
时间线,可选阅读这里

第一级虚拟机管理程序之间的斗争——在操作系统内创建操作系统的软件。

虚拟化有三种类型:完全虚拟化(硬件虚拟化)、半虚拟化和操作系统级虚拟化。

完全虚拟化:基于内核的虚拟机管理程序(例如 KVM)会固定每台机器的内存/核心/硬盘等资源。这会导致虚拟机之间出现资源问题,因为使用率低的机器拥有充足的资源,而负载过重的机器资源却很少。

机器之间的争斗——通过资源池化解决。
这些新的基于操作系统的虚拟机管理程序(OpenVZ 等)并非在内核进行虚拟化,而是创建了一个资源池,例如内存、硬盘等,并在虚拟机需要时与它们共享。这在某种程度上控制了争斗。

虚拟机运行繁琐,需要轻量级解决方案
。基于内核虚拟机管理程序或操作系统的虚拟机管理程序需要安装大型文件 [.iso (1-4 GB)]。这需要时间来配置小型虚拟机。此外,它们占用大量硬盘空间。为了解决这个问题,近年来出现了一种新的轻量级技术,我们称之为“容器”。它们与基于操作系统的可视化工具有些相似,不同之处在于它们在互联网上提供压缩映像,您可以下载并创建您选择的操作系统。

既然有好地可走,为何还需要云?
如今,你可以通过 ISO CD(1 GB 以上)或容器(93 MB)获取最流行的操作系统 Ubuntu。CD 和容器之间获取 Ubuntu 所需的空间和时间的巨大差异,正是云的真正需求所在。

必读:请参阅我之前关于如何创建类似 Digital Ocean 或 Google Cloud 的云服务的文章。第一部分第二部分第三部分
第一层总结:20年前,我们可以从一个操作系统中衍生出多个操作系统,但资源是个问题。后来出现了全硬件虚拟化、半虚拟化,以及容器。LXD 和 Docker 是众所周知的容器技术。了解更多:https://www.unixarena.com/2017/12/para-virtualization-full-virtualization-hardware-assisted-virtualization.html/

第二级想要创建自己的虚拟机吗?

您可以购买带有 KVM 的 Metal 服务器,或者在 Windows 桌面上使用 VirtualBox 或 VMware Play Station。您将使用 .iso 镜像(约 1GB)在 Windows 桌面上运行 Linux 服务器。

第三级容器?

我们不会使用 .iso 映像(约 1GB),而是使用托管在互联网上的小映像(100 MB)来旋转我们的虚拟机(更好的说法是容器)。

两种最流行的容器技术是 LXD 和 Dockers。但它们略有不同。在 LXD 中,你启动一个类似虚拟机的服务器镜像;而在 Docker 中,你可以启动一个服务器镜像(最小化到 LXD)和应用程序镜像。
好吧,我举个例子:

假设你有一个 PHP 网站。要运行这个 PHP 网站,你需要一个 Apache 服务器(例如 xampp)和 MySQL 数据库。

在 LXD 中,你将创建一个 ubuntu 服务器,并在其中安装 apache 服务器和 MySQL 数据库。[1 个容器包含 apache、mysql]

但是在 docker 中,你可以有两个不同的容器:一个用于 Apache,一个用于 MySQL。为什么 Apache 服务器只有一个容器呢?假设有两个 Apache 容器和三个 MySQL 容器……如果其中一个容器失败,其他容器会继续运行……这样我们的应用就永远不会“断网”了。[不同的容器承载不同的应用]

第四级如何使用容器?

容器就是服务器!!!我们假设是这样。
那么,我们应该知道:
(1)如何启动服务器。
(2)如何启动服务器。
(3)如何在服务器内部编写代码:将应用程序/程序放入服务器内部。
(4)如何停止服务器。
(5)如何让我们的服务器通过互联网供全世界访问。
(6)如何创建服务器镜像并以此为基础创建新的服务器。
(7)如何在单个主机上使用单个程序管理多台服务器。
(8)我的服务器托管在世界各地。我可以用单个程序来管理它们吗?

第五级答案...如何使用容器?

安装 lxd:snap install lxd
安装 docker:sudo apt install docker.io -y && sudo systemctl enable --now docker && sudo usermod -aG docker root && docker --version

开始之前:请记住:Ubuntu 是一个“镜像”,我们通过这个镜像创建“容器(比如服务器)”。主机是我们用来创建任意数量的容器的机器,例如 ubuntu、centos、fedora 等等。

以下 SERVER = CONTAINER(例如)

(1) 如何启动服务器。LXD
lxc launch ubuntu:18.04 myfirstcontainer
Docker: docker pull ubuntu:latest以及docker run -it myfirstcontainer ubuntu:latest

(2)如何启动服务器。LXD
lxc start myfirstcontainer
Docker: docker start myfirstcontainer

(3) 如何在服务器内部编写代码:将应用程序/程序放入服务器内部。
让我们进入容器内部并进行一些代码编写,例如安装 Nginx 服务器。LXD
lxc exec my first container bash
Docker: docker ps -a --> 获取容器 ID,然后执行docker exec -it ed58974dd bash

ed58974dd 操作。ed58974dd 是 Docker 提供的容器 ID。与 LXD 不同,您必须使用 Docker 提供的随机 ID。

安装后...输入exit以退出容器。

(4)如何停止服务器。LXD
lxc stop myfirstcontainer
Docker: docker stop ed58974dd

(5) 如何让我们的服务器通过互联网与外界连接
LXD:每当创建一个容器时,你都会获得该容器的一个 IP 地址。ip a它会返回容器的地址,或者执行 lxc list 命令。我们已经使用 nginx 创建了一个 lxd 容器。ngnix 会监听 80 端口
(internalip:80)。但是这个 internaip 无法通过互联网访问。互联网上只有主机 IP 可用。要将这个internalip:80路由到hostip:8945(任何你想要的端口),你需要执行 iptables 命令。

https://dev.to/manishfoodtechs/networking-is-easy-connecting-multiple-vms-servers-containers-devices-on-single-external-ip-in-one-command-139a这里有一篇文章可以帮助你:)

Docker:在 Docker 中,创建容器后设置起来有点困难。所以在创建 Docker 镜像之前,你应该知道需要哪个端口。以这个 Nginx 为例,我们知道它的端口是 80,所以我们的语法可以是docker run -p 8945:80 -t -i Ubuntu。此外,在 Docker 中使用 iptables 的方法有很多。

(6)如何创建服务器镜像,以便从中创建新的服务器?
现在我们已经创建了一个容器,用于存放 Nginx。以后我们可能需要用它来构建一个基于该镜像的新容器。

LXD: lxc stop myfirstcontainer

lxc publish myfirstcontainer --alias ubuntunginx
lxc image list
lxc image export ubuntunginx
lxc image import ubuntunginx.tar.gz --ubuntunginx
lxc launch ubuntunginx mysecondcontainer

导出的图像是 root/ 文件夹中的 tar.gz 文件,只需执行 即可ls。然后,您可以将此 tar.gz 文件导出到您的驱动器或电子邮件:或任何您想要的

Docker: docker commit -m "ubuntu1804" -a "root" ed58974dd manishfoodtechs/ubuntunginx:latest

作为 Tar 球: docker export ed5 > ubuntunginx.tar.xz

推送到 docker hub:在 docker 中,您可以将图像推送到 docker hub。
docker push manishfoodtechs/ubuntunginx:latest
docker list images

(7) 如何用一个程序在单个主机上管理多台服务器?
LXD: LXD 是为“大佬”打造的。它赋予你自由和无限的自由。有一些 lxd 容器管理程序可以安装和管理 lxd 容器:https://lxc-webpanel.github.io/

Docker: https://www.portainer.io/

(8)我的服务器托管在世界各地。我可以用一个程序来管理它们吗?
Kubernetes 和 docker-swarm

我要求您在笔记本电脑/台式机上下载 VMware Workstation。尝试将 Ubuntu 18.04 LTS 服务器作为主机运行。这样您就可以在主机内运行 lxd 和 docker。此外,尝试在 LXC 中运行 docker。但是您不能在 docker 中运行 lxc,但可以在 docker 中运行 docker。

我希望大家喜欢上面的文章并且学到一些东西。

非常欢迎您通过加入表格加入我的团队。

联系邮箱:Manishfoodtechs@gmail.com

如果您有任何问题,我们的团队也提供专业的咨询和交付服务。
下一步是什么?
1. 了解 Podman:Docker 的无守护进程和无根实现。更安全。

. 2.如何安装rootless docker。
文章来源:https://dev.to/manishfoodtechs/docker-for-extreme-beginners-in-desi-layman-language-1e0n
PREV
全球有用的 CSS 列表:开发人员工具
NEXT
让 React 高阶组件 HOC 变得简单