Docker 使用主机上的 Docker 引擎构建镜像并运行容器。Docker 容器包含在不同环境中运行应用程序所需的所有依赖项和软件。
什么是 Docker 镜像?
镜像和容器的概念就像类和对象一样,对象是类的实例,而类是对象的蓝图。虚拟机和 Docker 中的镜像有所不同。在虚拟机中,镜像只是正在运行的虚拟机在不同时间点的快照,而 Docker 镜像则略有不同。最重要也是最主要的区别是 Docker 镜像是不可变的,也就是说它们无法更改。在现实世界中,由于环境不同,软件在一台计算机上可以运行,但在其他计算机上却无法运行的情况经常发生。Docker 镜像彻底解决了这个问题,使用 Docker 镜像,应用程序将在每个人的电脑上以相同的方式运行。团队中的每个开发人员都将拥有完全相同的开发实例。每个测试实例都与开发实例完全相同。您的生产实例与测试实例完全相同。此外,世界各地的开发人员可以在名为DockerHUB的平台上共享他们的 Docker 镜像。
什么是 Docker 容器?
它们实际上是 Docker虚拟机,但通常称为 Docker 容器。如果 Docker 镜像是房屋地图,那么 Docker 容器就是实际建造的房屋,换句话说,我们可以称其为镜像实例。根据官方网站的说法,容器是镜像的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,将存储连接到它,甚至可以根据其当前状态创建新镜像。应用程序使用彼此之间以及与运行它们的主机之间自我隔离的容器集群运行。
示例:如果后端应用程序在端口 8000 的 Docker 容器上运行,并且您尝试从主机访问它,则您将无法访问它,因为容器是自我隔离的,在这种情况下,您必须在某个端口明确公开您的应用程序并将您的机器端口连接到该端口。
运行 Docker 容器
docker run --publish 8000:8080
--detach --name alias_name application_name:1.0
这里,容器中运行在 8080 端口的应用程序连接到主机的 8000 端口。现在,主机可以使用 URL localhost:8000 访问该应用程序。
Docker 镜像和容器之间的区别
Docker 镜像 | Docker容器 |
---|---|
它是容器的蓝图。 | 它是图像的一个实例。 |
图像是一个逻辑实体。 | 容器是现实世界的实体。 |
图像仅创建一次。 | 使用图像可以创建任意次数的容器。 |
镜像是不可变的。无法附加卷和网络。 | 仅当删除旧镜像并使用新镜像构建容器时,容器才会发生变化。可以附加卷、网络等。 |
图像不需要计算资源即可工作。 | 容器需要计算资源才能运行,因为它们是在 Docker 虚拟机中运行的。 |
要制作 docker 镜像,您必须在 Dockerfile 中编写脚本。 | 要从图像创建容器,您必须运行“docker run \ |
Docker 镜像用于打包应用程序和预配置的服务器环境。 | 容器使用图像提供的服务器信息和文件系统来运行。 |
图像可以在 Docker Hub 上共享。 | 共享正在运行的实体是没有意义的,总是共享 docker 镜像。 |
Docker 镜像不存在运行状态。 | 容器在创建和运行状态下会使用 RAM。 |
图像不得引用任何状态才能删除该图像。 | 容器必须处于运行状态才能将其移除。 |
人们无法连接到这些图像,因为这些图像就像快照一样。 | 在这种情况下,人们无法连接它们并执行命令。 |
可以共享 Docker 镜像。 | 无法直接共享容器。 |
它有多个只读层。 | 它有一个可写层。 |
这些图像模板可以独立存在。 | 如果没有图像,这些容器就无法存在。 |
Docker 容器和 VM 镜像之间的区别
Docker容器 | 虚拟机映像 |
---|---|
Docker 容器可以在几秒钟内启动。 | VM 映像将需要几分钟才能启动。 |
Docker容器资源占用非常少。 | VM 图像非常强烈。 |
隔离是在操作系统级别。 | 隔离是在过程级别。 |
Docker容器管理依赖关系是在应用程序级别进行管理的。 | VM 映像在系统级别管理系统依赖关系。 |