Docker 概述
图文转载至https://docs.docker.com/get-started/overview/
一、Docker概述
Docker是一个用于开发、发布和运行应用程序的开发平台。Docker使您能够将应用程序与基础设施分离,以便可以快速交付软件。借助Docker,可以像管理应用程序一样管理基础设施。通过利用Docker的方法来传送、测试和部署代码,可以显着减少编写代码和在生产中运行代码之间的延迟。
1.1 Docker平台
Docker提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。其隔离和安全性可以在给定主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此不需要依赖主机上安装的内容。可以在工作时共享容器,并确保共享的每个人都获得以相同方式工作的相同容器。
Docker提供了工具和平台来管理容器的生命周期:
- 使用容器开发应用程序及其支持组件。
- 容器成为分发和测试应用程序的单元。
- 准备就绪后,将应用程序作为容器或编排服务部署到生产环境中。无论生产环境是本机数据中心、云提供商还是两者的混合,都是一样的。
1.2 可以使用Docker做什么?
1.2.1 快速、一致地交付需求
Docker允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,简化了开发生命周期。容器非常适合持续集成和持续交付(CI/CD)工作流程。
考虑一下示例场景:
- 开发人员在本机编写代码并使用Docker容器与同事共享工作。
- 使用Docker将应用程序推送到测试环境中并运行自动和手动测试。
- 发现错误时,可以在开发环境中修复它们,并将其重新部署到测试环境中进行测试和验证。
- 测试完成后,向客户提供修复就像将更新的映像推送到生产环境一样简单。
1.2.2 响应式部署和扩展
Docker基于容器的平台支持高度可移植的工作负载。Docker容器可以在开发人员的本地笔记本电脑、数据中心的物理机或虚拟机、云提供商或混合环境中运行。
Docker的可移植性和轻量级特性还使得动态管理工作负载、根据业务需求几乎实时的扩展或拆除应用程序和服务变得很容易。
1.2.3 在相同硬件上运行更多工作负载
Docker轻量且快速。为基于虚拟机管理程序的虚拟机提供了可行且经济高效的替代方案,因此可以利用更多服务器容量来实现业务目标。Docker非常适合高密度环境以及需要用更少的资源做更多事情的中小型部署。
1.3 Docker架构
Docker使用客户端-服务器架构。Docker客户端与Docker守护进程通信,后者负责构建、运行和分发Docker容器的繁复工作。Docker客户端和守护进程可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。另一个Docker客户端是Docker Compose,允许使用由一组容器组成的应用程序。
1.3.1 Docker守护进程
Docker守护进程(dockerd)侦听Docker API请求并管理Docker对象,例如映像、容器、网络和卷。守护进程还可以与其他守护进程通信来管理Docker服务。
1.3.2 Docker客户端
Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当使用诸如“docker run”之类的命令时,客户端会将这些命令发送到dockerd,由后者执行这些命令,该docker命令使用Docker API。Docker用户端可以与多个守护进程通信。
1.3.3 Docker桌面
Docker desktop是一款适用于Mac、Windows或Linux环境的易于安装的应用程序,是您能够构建和共享容器化应用程序和微服务。Docker desktop包括Docker守护进程(dockerd)、Docker客户端(docker)、Docker Compose、Docker Content Trust、Kubernetes和Credential Helper。更多可参阅Docker桌面;
1.3.4 Docker仓库
Docker仓库存储Docker镜像。Docker Hub是一个任何人都可以使用的公共镜像仓库,Docker默认在Docker Hub上查找镜像。甚至可以运行自己的私人仓库。
当使用docker pull或docker run命令时,Docker从您配置的仓库中提取所需的映像。当使用docker push命令时,Docker会将您的映像推送到您配置的仓库。
1.3.4 Docker对象
使用Docker是,需要创建和使用镜像、容器、网络、卷、插件和其他对象。
镜像
镜像是一个只读模板,包含创建Docker容器的说明。通常一个镜像基于另一个镜像,并进行一些额外的自定义操作。例如,构建一个基于Ubuntu的镜像,但会安装Apache Web服务器和您的应用程序,以及运行应用程序所需的配置详细信息。
可以创建自己的镜像,也可以使用其他人创建并在注册表中发布的镜像。构建自己的镜像,可以使用简单的语法创建一个Dockerfile,用于定义创建镜像并运行它所需的步骤。Dockerfile中的每条指令都会在镜像中创建一个层。当更改Dockerfile并重建镜像时,只会重建那些已更改的层。与其他虚拟化技术相比,这就是镜像如此轻量、小型且快速的部分原因。
容器
容器是镜像的可运行实例。可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据当前状态创建一个新镜像。
默认情况下,容器与其他容器机器主机相对较好的隔离。可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程序。
容器由其镜像以及在创建或启动时提供给它的任何配置选项来定义。当容器被删除时,任何未存储在持久存储中的状态更改都会消失。
docker run 命令示例
以下命令运行一个Ubuntu容器,以交互方式附加到本地命令行会话,然后运行/bin/bash.
1 $ docker run -i -t ubuntu /bin/bash
当运行此命令时,挥发生以下情况(假设使用默认仓库配置):
- 如果本地没有ubuntu镜像,Docker会从您配置的注册表中提取该镜像,就像docker pull ubuntu手动运行一样。
- Docker创建一个新容器,就像手动运行命令docker container create一样。
- Docker为容器分配一个读写文件系统,做为其最后一层。这允许正在运行的容器在其本地文件系统中创建或修改文件和目录。
- Docker创建一个网络接口来将容器连接到默认网络,因为没有指定任何网络选项(包括为容器分配IP地址)。默认情况下,容器可以使用主机的网络连接来连接到外部网络。
- Docker启动容器并执行/bin/bash.由于容器以交互式方式运行并附加到终端(-i -t 标签),因此可以使用键盘提供输入,同时Docker将输出记录到终端。
- 当运行exit终止/bin/bash命令时,容器会停止,但不会被删除。可以重新启动或将其删除。
1.4 底层技术
Docker使用Go编程语言编写,并利用Linux内核的多个特性来提供其功能。docker使用一直称为namespaces容器的技术来提供隔离的工作空间。当运行容器时,Docker会为该容器创建一组命名空间。
这些namespace提供了一层隔离。容器的每个方向都在单独的namespace中运行,并且访问仅限该namespace。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?