# 什么是容器？

想象一下，你正在开发一个现象级的 Web 应用程序，它由三个主要组件组成：一个 React 前端、一个 Python API 和一个 PostgreSQL 数据库。如果你想在这个项目上工作，你需要安装 Node.js、Python 和 PostgreSQL。

### **问题来了**

1. **如何确保你使用的版本与团队其他开发者一致？**\
   或者与你的 CI/CD 系统以及生产环境一致？
2. **如何确保你的应用所需的 Python（或 Node.js、数据库）版本不会受到你电脑上已有版本的影响？**\
   如何避免版本冲突？

### **这时候容器就登场了！**

简单来说，容器就是为你的应用程序的每个组件提供的独立隔离的运行环境。例如：

* 前端 React 应用运行在一个容器中。
* Python API 引擎运行在另一个容器中。
* 数据库运行在第三个容器中。

这些容器相互独立，且与主机系统隔离。

### **容器的优势**

1. **自包含（Self-contained）**\
   每个容器都包含了其正常运行所需的一切，不依赖主机上预装的任何依赖。
2. **隔离性（Isolated）**\
   容器之间相互隔离，与主机系统的交互也非常有限，从而提升了应用的安全性。
3. **独立性（Independent）**\
   每个容器都可以独立管理。删除一个容器不会影响其他容器。
4. **可移植性（Portable）**\
   容器可以运行在任何地方！开发机上运行的容器可以在数据中心、云端或其他地方完全一样地运行。

***

### **容器与虚拟机（VM）的区别**

不深入细讲的话，虚拟机包含一个完整的操作系统，包括内核、硬件驱动程序、程序和应用。\
启动一个虚拟机来隔离一个应用，资源开销很大。

而容器只是一种隔离的进程，拥有其运行所需的所有文件。多个容器共享同一个内核，因此可以在更少的硬件资源上运行更多应用。

![](https://877359518-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LtduzpXD-eRCqVxsG11%2F-Ltdv0iMmgBQuJNw-4eT%2F-Ltdv85Nx2urpLO0aNZs%2Fdocker%E4%B8%8E%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%8C%BA%E5%88%AB.png?generation=1573735146710479\&alt=media)

***

### **容器与虚拟机结合使用**

在很多场景下，容器和虚拟机会一起使用。\
例如：在云环境中，通常会先创建虚拟机（VM）作为基础设施，但不会每个虚拟机只运行一个应用。\
通过在虚拟机中运行容器，你可以运行多个容器化的应用程序，从而提高资源利用率并降低成本。

***

简而言之，容器为开发者和运维人员提供了一个更轻量、更高效的解决方案，可以更方便地管理和部署应用程序。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tuonioooo-notebook.gitbook.io/docker/concepts/what-is-a-container.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
