Appearance
什么是Docker
文档 https://docs.docker.com/get-started/
什么是Docker
Docker是一个用于开发、交付和运行应用程序的开放平台。 Docker使您能够将应用程序与基础架构分离,以便您可以快速交付软件。使用Docker,您可以管理您的基础设施 以与管理应用程序相同的方式。通过利用Docker的 发布、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行代码之间的延迟
Docker 平台
Docker提供了在松散隔离的环境,隔离和安全性允许您运行许多容器。容器是轻量级的,并且包含运行应用程序所需的一切,因此您无需依赖安装在主机上。您可以在工作时共享容器,并确保与您共享的每个人都能获得在 同样的方式。
Docker提供了用于管理容器生命周期的工具和平台:
- 使用容器开发应用程序及其支持组件。
- 容器成为分发和测试应用程序的单元。
- 准备就绪后,将应用程序部署到生产环境中。作为容器或编排的服务。无论您的生产环境是本地数据中心、云提供商或混合环境两者。
我可以使用 Docker 做什么?
快速、一致地交付您的应用程序
Docker允许开发人员在使用本地容器的标准化环境,这些容器提供您的应用程序和服务。容器非常适合持续集成和持续投放 (CI/CD)工作流。
请考虑以下示例场景:
- 您的开发人员在本地编写代码并与同事共享他们的工作 使用
Docker容器。 - 他们使用
Docker将应用程序推送到测试环境中并运行 自动和手动测试。 - 当开发人员发现 bug 时,他们可以在开发环境中修复它们 并将它们重新部署到测试环境进行测试和验证。
- 测试完成后,向客户提供修复程序非常简单,只需 将更新的镜像推送到生产环境。
响应式部署和扩展
Docker基于容器的平台支持高度可移植的工作负载。Docker容器可以在开发人员的本地笔记本电脑上运行,也可以在物理或虚拟上运行数据中心、云提供商或混合环境中的计算机。
Docker的可移植性和轻量级特性也使其易于动态管理工作负载,扩展或缩减应用程序和服务 业务需求近乎实时地决定。
在相同的硬件上运行更多工作负载
Docker轻量级且速度快。它提供了一种可行的、具有成本效益的替代方案添加到基于Hypervisor的虚拟机,以便您可以使用更多的服务器实现业务目标的能力。Docker非常适合高密度环境以及需要执行更多操作的中小型部署更少的资源。
Docker 架构
Docker使用客户端-服务器架构。Docker客户端与Docker守护进程,它完成构建、运行和分发Docker容器。Docker客户端和守护程序可以在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护 进程。Docker客户端和守护程序通过UNIX使用REST API进行通信套接字或网络接口。另一个Docker客户端是Docker Compose, 这样,您就可以使用由一组容器组成的应用程序。

Docker 守护程序
Docker守护程序 (dockerd) 侦听Docker API请求并管理Docker映像、容器、网络和卷等对象。守护进程还可以与其他守护程序通信以管理Docker`服务。
Docker 客户端
Docker客户端(docker)是许多Docker用户交互的主要方式与Docker一起使用。当您使用等命令时,比如(docker run),客户端会发送这些命令传递给dockerd ,从而执行它们。该命令使用 Docker API。Docker客户端可以与多个守护进程通信。
Docker 桌面
Docker Desktop是一款易于安装的应用程序,适用于Mac、Windows或Linux环境,使您能够构建和共享容器化应用程序和微服务Docker Desktop包括Docker守护程序 (dockerd)、Docker 客户端 (docker)、Docker Compose、Docker Content Trust、Kubernetes 和Credential Helper。有关更多信息,请参阅 Docker Desktop。
Docker 注册表
Docker注册表存储Docker镜像。Docker Hub是一个公共的任何人都可以使用的注册表,Docker会在默认情况下从Docker Hub中查找镜像。您甚至可以运行自己的私有注册表。
当您使用docker pullordocker run命令时,Docker会从您配置的注册表中提取所需的镜像。当您使用docker push该命令时,Docker推送将映像添加到配置的注册表中。
Docker 对象
当您使用Docker时,您正在创建和使用镜像(image)、容器(containers)、网络(networks)、 卷(volumes)、插件(plugins)和其他对象。本节简要介绍这些对象。
镜像(image)
镜像是一个只读模板,其中包含创建Docker容器的说明。通常,一个镜像基于另一个镜像,并带有一些额外的定制。例如,您可以构建一个基于ubuntu的镜像,但可以安装Apache Web服务器和您的应用程序,以及运行应用程序所需的配置详细信息。
您可以创建自己的镜像,也可以只使用其他人创建的镜像 并在注册表中发布。要构建自己的镜像,您需要创建一个Dockerfile使用简单的语法来定义创建映像并运行它。Dockerfile中的每个指令都会在镜像中创建一个层。当您更改Dockerfile并重新构建镜像,仅那些更改了的层会重新生成。这也是为什么使镜像与其他虚拟化技术相比,如此轻巧、小巧、且速度更快。
容器(container)
容器是镜像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以连接容器添加到一个或多个网络,将存储附加到它上面,甚至基于当前容器创建一个新的镜像。
默认情况下,容器与其他容器、宿主机都是相对隔离的。您可以控制容器的网络、存储、或来自其他容器或者宿主机的底层子系统。
容器由其映像以及您创建或启动它的任何配置选项定义。删除容器后,未持久存储任何更改都将消失。
示例命令(docker run)
以下命令运行一个ubuntu容器,以交互方式附加到local命令行会话,并运行.ubuntu/bin/bash
bash
docker run -i -t ubuntu /bin/bash当您运行此命令时,将发生以下情况(假设您使用的是默认注册表配置):
如果你在本地没有镜像
ubuntu,Docker会从配置的注册表拉取镜像,就像您手动运行docker pull ubuntu一样。Docker会创建一个新容器,就像您手动运行命令docker container create一样。Docker为容器分配一个读写文件系统,作为最终层。这允许正在运行的容器在他的本地文件系统中创建或修改文件或目录。Docker会创建一个网络接口,如果您没有指定任何联网选项的话,将容器连接到默认network。这会为容器分配IP地址。默认情况下,容器可以使用主机的网络连接连接到外部网络。Docker启动容器并执行/bin/bash。因为容器以交互方式运行并附加到您的终端(由-i和-t标识决定),您可以使用键盘将Docker logs输出到您的终端控制台。当您在容器终端
/bin/bash运行终止命令exit时,容器将停止,但未被删除。您可以重新启动它或将其删除。
底层技术
Docker是用Go编程语言编写,并利用Linux内核的几个功能来提供功能。Docker使用一种称为namespaces的技术来提供一种成为容器的隔离的工作空间。当您运行容器时,Docker会为容器创建一组命名空间。
这些命名空间提供了一个隔离层。容器的每个方面都运行在一个分离的命名空间上面,并且只能访问这个命名空间。