Blog/content/learn-docker-1.md
2025-01-21 19:11:02 +08:00

88 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
title = "Docker学习笔记(一)"
date = 2024-03-25
[taxonomies]
tags = ["学习笔记"]
+++
前言 Docker 是一个开源平台,通过将应用程序隔离到轻量级、可移植的容器中,自动执行应用程序的部署、扩展和管理。容器是独立的可执行单元,它封装了应用程序在各种环境中一致运行所需的所有必要依赖项、库和配置文件。
<!-- more -->
## **什么是容器?**
容器是轻量级、可移植和隔离的软件环境,允许开发人员跨不同平台一致地运行和打包应用程序及其依赖项。它们有助于简化应用程序开发、部署和管理流程,同时确保应用程序始终如一地运行,而不管底层基础架构如何。
## **容器是如何工作的?**
与传统的虚拟化不同,传统的虚拟化使用硬件资源模拟完整的操作系统,容器共享主机的操作系统内核,并利用轻量级虚拟化技术来创建隔离的进程。这种方法有几个好处,包括:
- 效率:容器的开销较小,可以共享公共库和可执行文件,与虚拟机 VM 相比,可以在单个主机上运行更多容器。
- 可移植性:容器封装了应用程序及其依赖项,因此可以轻松地在不同的环境和平台上一致地移动和运行它们。
- 快速启动:由于容器不需要启动完整的操作系统,因此它们的启动和关闭速度比 VM 快得多。
- 一致性:容器为应用程序的开发、测试和生产阶段提供了一致的环境,从而减少了“它在我的机器上工作”的问题。
## **容器和 Docker**
Docker 是一个简化创建、部署和管理容器过程的平台。它为开发人员和管理员提供了一组工具和 API 来管理容器化应用程序。使用 Docker您可以将应用程序代码、库和依赖项构建并打包到容器映像中该映像可以在任何支持 Docker 的环境中一致地分发和运行。
## **对容器的需求**
在软件开发和部署领域,一致性和效率至关重要。在容器出现之前,开发人员在跨不同环境部署应用程序时经常面临挑战,包括:
- 不一致的环境:开发人员通常在不同的环境中工作,与生产服务器相比,这些环境可能具有不同的配置和库。这会导致部署应用程序时出现兼容性问题。
- 资源利用效率低下:虚拟机 VM 被广泛用于克服环境不一致的问题。但是VM 需要为每个应用程序运行整个操作系统,从而使资源利用率低效。
- 流程缓慢和可伸缩性问题:传统的部署方法具有较慢的上市时间和扩展困难,这阻碍了软件更新的快速交付。
## **容器如何应对这些挑战:**
- 一致的环境:容器通过将应用程序及其依赖项、配置和库捆绑到单个容器中来解决环境不一致问题。这保证了应用程序在不同环境中平稳运行。
- 高效利用资源:与虚拟机不同,容器共享底层系统资源和操作系统内核,这使得它们轻量级且高效。容器旨在使用更少的资源并更快地启动,从而提高资源利用率。
- 更快的流程和可扩展性:容器可以轻松创建、销毁和替换,从而加快开发和部署周期。由于可以在不消耗大量资源的情况下部署多个容器,因此扩展应用程序变得更加容易。
总体而言,对于希望快速响应市场变化、提高资源效率并确保可靠和一致的软件交付的组织来说,容器已成为必不可少的工具。它们彻底改变了现代软件开发实践,并在部署和应用程序管理领域产生了持久的影响。
## **裸机、虚拟机、容器**
- 裸机
裸机是一个术语,用于描述直接在硬件上运行的计算机,无需任何虚拟化。这是运行应用程序的高性能方式,但也是最不灵活的方式。每台服务器只能运行一个应用程序,并且不能轻松地将应用程序移动到另一台服务器。
- 虚拟机
虚拟机 VM 是一种在单个服务器上运行多个应用程序的方法。每个 VM 都运行在虚拟机监控程序之上,虚拟机监控程序是模拟计算机硬件的软件。虚拟机监控程序允许您在单个服务器上运行多个操作系统,并且它还在不同 VM 上运行的应用程序之间提供隔离。
- 容器
容器是一种在单个服务器上运行多个应用程序的方法,而不会产生虚拟机管理程序的开销。每个容器都运行在容器引擎之上,容器引擎是一种模拟计算机操作系统的软件。容器引擎允许您在单个服务器上运行多个应用程序,它还提供在不同容器上运行的应用程序之间的隔离。
**Docker 与 OCI**
开放容器计划 OCI 是 Linux 基金会的一个项目,旨在为容器格式和运行时创建行业标准。其主要目标是通过定义的技术规范确保容器环境的兼容性和互操作性。
Docker 是 OCI 的创始成员之一在制定容器格式和运行时标准方面发挥了关键作用。Docker 最初开发了容器运行时Docker 引擎和映像格式Docker 映像),作为 OCI 规范的基础。
**OCI 规范**
OCI 有两个主要规范:
- 运行时规范 runtime-spec它定义了通过隔离技术如容器引擎执行容器的规范。Docker 构建的容器运行时称为“containerd”指导了 OCI 运行时规范的开发。
- 镜像规范 image-spec它定义容器镜像格式用于描述容器的内容并可由兼容的运行时运行。Docker 的初始映像格式促成了 OCI 映像规范的创建。
## **Docker 和 OCI 之间的兼容性**
Docker 始终致力于支持 OCI 规范,并且自参与 OCI 以来,不断更新其软件以符合 OCI 标准。Docker 的 containerd 运行时和映像格式与 OCI 规范完全兼容,使 Docker 容器能够由其他符合 OCI 标准的容器运行时运行,反之亦然。
总之Docker 和 Open Container Initiative 共同致力于维护容器行业的标准化和兼容性。Docker 在 OCI 规范的制定中发挥了重要作用,确保容器生态系统保持健康、可互操作,并可供整个行业的广泛用户和平台访问。