docker和虚拟机的区别

VPS、ECS

img

  • VPS:虚拟专用服务器,可以理解为物理机上多个 Vmware/VirtualBox 虚拟机,但传统 VPS 不支持资源升降级,资源是固定的。
  • ECS:VPS+自主升降级就变成了 ECS。

docker

这里我以一个实际中可能遇到的例子讲解,比如我们有两台服务器,我需要在两台服务器上分别安装 vim 软件,那么步骤如下:

yum -y intstall vim

apt-get install vim

多个 ECS 之间可能底层操作系统不同,那么部署应用就会有各种环境问题,如果能让软件带着操作系统环境一起部署就可以了。

img

操作系统分为用户空间和内核空间,我们可以阉割操作系统只需要用到操作系统的用户空间部分,就可以构建应用所需的环境。我们将应用程序和操作系统的文件系统、依赖库打包成一个类似压缩包的文件,这其实就是基础镜像(basic image)。

如果选择每台机器安装一个虚拟机可以解决,但是这样未免太重了,我们可以只打包软件和系统依赖库和配置,然后利用 Namespace 能力 让它看起来就像独立操作系统一样,然后通过 Cgroups 来限制它能使用的操作系统资源。

img

总的来说就是物理服务器上跑 ECS,ECS 上跑 Docker 容器,多个 Docker 容器共享一个 ECS,ECS 上跑多个 Docker 容器。

dockfile

img

现在有了容器镜像,但是我们可能还需要安装一些依赖,比如 yum -y install gcc 等,我们通过 dockerfile 脚本来完成。它列清楚了从操作系统到应用服务启动需要哪些事情的清单文件。

现在有了基础镜像和 dockerfile,我们就能一步步构建容器镜像,然后利用 docker build 指令,将环境+程序打包为类似压缩包的东西(容器镜像)。

现在将容器镜像传到任意一台服务器上面执行解压缩,我们就能同时拥有运行环境和程序了。

Registry

现在需要将容器镜像传输到多台服务器,我们可以模仿 Github 代码仓库的做法,就是 Registry。

通过 docker push xxx 将镜像推送到镜像仓库,通过 docker pull xxx 将镜像拉取到本地。

docker 和传统虚拟机的区别

img

  • 传统虚拟机底层拥有一个完整的操作系统;
  • docker 底层并没有单独的操作系,而是添加了目标操作系统的文件系统、依赖库、配置文件。通过 NamespaceCgroup 实现视图隔离和资源限制。使得容器看起来像运行在单独的操作系统上一样。

docker-Compose、docker-Swarm

  • docker-Compose:部署多个容器,且对容器的部署顺序有要求。通过一个统一的 yaml 脚本,执行 dockercompose xxx.yaml up 一键启动;
  • docker-Swarm:docker 解决的是一个容器的部署,dockerCompose 解决的是一套服务的部署,dockerSwarm 解决的是一套服务在多个机器集群上服务部署的问题,如果某一台机器出现故障宕机,服务会自动迁移应用另一台机器,使服务具有高可用性。
posted @ 2024-04-25 13:37  Stitches  阅读(11)  评论(0编辑  收藏  举报