私信  •  关注

mohan08p

mohan08p 最近创建的主题
mohan08p 最近回复了
8 年前
回复了 mohan08p 创建的主题 » VM的Guesto和Docker的Basic Image有什么区别?

有三种不同的设置提供了一个堆栈来运行应用程序(这将帮助我们认识到什么是容器,以及是什么使它比其他解决方案强大):

1) Traditional Servers(bare metal)
2) Virtual machines (VMs)
3) Containers

1) 传统服务器 堆栈由运行操作系统和应用程序的物理服务器组成。

优势:

  • 原材料资源的利用

  • 隔离

缺点:

  • 部署时间非常慢
  • 昂贵的
  • 浪费的资源
  • 难以衡量
  • 难以迁移
  • 复杂配置

2) 那个 虚拟机堆栈 由运行操作系统的物理服务器和管理虚拟机、共享资源和网络接口的虚拟机监控程序组成。每个虚拟机运行一个来宾操作系统、一个应用程序或一组应用程序。

优势:

  • 善用资源
  • 易于扩展
  • 易于备份和迁移
  • 成本效益
  • 灵活性

缺点:

  • 资源分配存在问题
  • 供应商锁定
  • 复杂配置

3) 那个 容器设置 ,与其他堆栈的关键区别在于基于容器的虚拟化使用主机操作系统的内核来管理多个独立的来宾实例。这些来宾实例称为容器。主机可以是物理服务器或虚拟机。

优势:

  • 隔离
  • 轻量的
  • 资源有效
  • 易于迁移
  • 安全
  • 低开销
  • 镜子的生产和发展环境

缺点:

  • 相同的架构
  • 资源密集型应用
  • 网络和安全问题。

通过将容器设置与之前的设置进行比较,我们可以得出结论,容器化是迄今为止我们知道的最快、最有效、最安全的设置。容器是运行应用程序的独立实例。 Docker以某种方式旋转容器,层获得运行时内存,其中包含默认存储驱动程序(覆盖驱动程序),这些驱动程序在几秒钟内运行,并在我们提交到容器后在其上创建的写入层上进行复制,从而为容器的执行提供动力。 如果是虚拟机,则需要大约一分钟才能将所有内容加载到虚拟化环境中。这些轻量级实例可以轻松替换、重建和移动。这使我们能够反映生产和开发环境,对CI/CD流程有很大帮助。容器所能提供的优势是如此引人注目,它们肯定会继续存在。

cgroup和命名空间在容器生态系统中扮演着重要角色。

命名空间提供了一个隔离层。每个容器在一个单独的命名空间中运行,其访问权限仅限于该命名空间。cgroup控制每个容器的资源利用率,而namespace控制进程可以看到和访问相应资源的内容。

以下是您对解决方案方法的基本理解,

使用网络命名空间

当容器从映像中派生时,将定义并创建网络接口。这将为容器提供唯一的IP地址和接口。

$ docker run -it alpine ifconfig

通过将名称空间更改为主机,cotainers网络不会与其接口保持隔离,进程将可以访问主机网络接口。

$ docker run -it --net=host alpine ifconfig

如果进程侦听端口,它们将在主机接口上侦听并映射到容器。

使用PID命名空间 通过更改pid名称空间,容器可以与超出其正常范围的其他进程交互。

此容器将在其自己的命名空间中运行。

$ docker run -it alpine ps aux

通过将命名空间更改为主机,容器还可以看到系统上运行的所有其他进程。

$ docker run -it --pid=host alpine ps aux

共享命名空间

在生产环境中这样做是一种不好的做法,因为您正在打破容器安全模型,这可能会打开漏洞,并且容易访问窃听器。这仅仅是为了调试工具和理解容器安全中的漏洞。

第一个容器是nginx服务器。这将创建一个新的网络和进程命名空间。此容器将自身绑定到新创建的网络接口的端口80。

$ docker run -d --name http nginx:alpine

另一个容器现在可以重用这个名称空间,

$ docker run --net=container:http mohan08p/curl curl -s localhost

此外,此容器可以看到与共享容器中的进程的接口。

$ docker run --pid=container:http alpine ps aux

这将允许您授予容器更多权限,而无需更改或重新启动应用程序。以类似的方式,您可以连接到主机上的mysql,运行并调试您的应用程序。但是,不建议这样走。希望有帮助。