目录
概述
Docker平台
Docker可以做什么
快速、一致地交付应用程序
响应式部署和扩展
在同一硬件上运行更多工作负载
Docker架构
Docker守护程序(The Docker daemon)
Docker客户端(The Docker client)
Docker桌面(Docker Desktop)
Docker仓库(Docker registries)
Docker对象(Docker objects)
镜像(Images)
容器(Containers)
docker run命令示例
底层技术
概述
Docker是一个用于开发、交付和运行应用程序的开放平台。Docker使我们能够将应用程序与基础设施分离,以便快速交付软件。使用Docker,可以像管理应用程序一样管理基础设施。通过利用Docker的方法快速发送、测试和部署代码,可以显著减少编写代码和在生产中运行代码之间的延迟。
Docker平台
Docker提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许您在给定的主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此不需要依赖于主机上当前安装的内容。就可以在工作时轻松地共享容器,并确保与您共享的每个人都能获得以相同方式工作的相同容器。
Docker提供工具和平台来管理容器的生命周期:
- 使用容器开发应用程序及其支持组件。
- 容器成为分发和测试应用程序的单元。
- 准备就绪后,将应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。
Docker可以做什么
快速、一致地交付应用程序
Docker允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合连续集成和连续交付(CI/CD)工作流。
考虑以下示例场景:
- 开发人员在本地编写代码,并使用Docker容器与同事共享他们的工作。
- 他们使用Docker将应用程序推入测试环境,并执行自动化和手动测试。当开发人员发现错误时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中进行测试和验证。
- 测试完成后,将修复程序发送给客户就像将更新后的映像推送到生产环境中一样简单。
响应式部署和扩展
Docker基于容器的平台允许高度可移植的工作负载。Docker容器可以在开发人员的本地笔记本电脑上、数据中心的物理或虚拟机上、云提供商上或混合环境中运行。
Docker的可移植性和轻量级也使其能够轻松地动态管理工作负载,根据业务需求几乎实时地扩展或拆除应用程序和服务。
在同一硬件上运行更多工作负载
Docker重量轻、速度快。它为基于虚拟机管理程序的虚拟机提供了一种可行、经济高效的替代方案,因此可以使用更多的服务器容量来实现业务目标。Docker非常适合高密度环境和需要用更少资源做更多事情的中小型部署。
Docker架构
Docker使用客户端-服务器体系结构。Docker客户端与Docker守护进程进行对话,后者负责构建、运行和分发Docker容器。Docker客户端和守护进程可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程通过UNIX套接字或网络接口使用RESTAPI进行通信。另一个Docker客户端是Docker Compose,它允许您使用由一组容器组成的应用程序。
Docker守护程序(The Docker daemon)
Docker守护进程(dockerd)监听Docker API请求并管理Docker对象,如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信,以管理Docker服务。
Docker客户端(The Docker client)
Docker客户端(Docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如docker run之类的命令时,客户端会将这些命令发送给dockerd,后者会执行这些命令。docker命令使用docker API。Docker客户端可以与多个守护进程进行通信。
Docker桌面(Docker Desktop)
Docker Desktop是一款适用于Mac、Windows或Linux环境的易于安装的应用程序,使您能够构建和共享容器化的应用程序和微服务。Docker Desktop包括Docker守护进程(dockerd)、Docker客户端(Docker)、Docker-Compose、Docker Content Trust、Kubernetes和Credential Helper。
Docker仓库(Docker registries)
Docker仓库存储Docker镜像。Docker Hub是一个任何人都可以使用的公共仓库,默认情况下,Docker被配置为在Docker Hub上查找镜像。您甚至可以运行自己的专用仓库。当使用docker pull或docker run命令时,所需的镜像将从配置的仓库中提取。当使用docker push命令时,镜像将被推送到配置的仓库中。
Docker对象(Docker objects)
当使用Docker时,正在创建和使用镜像、容器、网络、卷、插件和其他对象。本节简要概述了其中一些对象。
镜像(Images)
镜像是一个只读模板,带有创建Docker容器的说明。通常,一个镜像是基于另一个镜像,并进行一些额外的自定义。例如,可以构建一个基于ubuntu镜像的镜像,但安装Apache web服务器和应用程序,以及运行应用程序所需的配置详细信息。可以创建自己的镜像,也可以只使用他人创建并在仓库中发布的镜像。要构建自己的镜像,可以创建一个Dockerfile,该文件使用简单的语法来定义创建镜像和运行镜像所需的步骤。Dockerfile中的每个指令都会在镜像中创建一个层。当更改Dockerfile并重建镜像时,只会重建那些已更改的层。与其他虚拟化技术相比,这是使镜像如此轻便、小巧和快速的部分原因。
容器(Containers)
容器是镜像的可运行实例。可以使用Docker API或CLI创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,将存储连接到容器,甚至可以根据容器的当前状态创建新镜像。默认情况下,容器与其他容器及其主机的隔离相对较好。可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。容器由其镜像以及创建或启动时提供给它的任何配置选项定义。删除容器后,未存储在永久存储中的对其状态的任何更改都将消失。
docker run命令示例
以下命令运行一个ubuntu容器,以交互方式连接到本地命令行会话,并运行/bin/bash。
docker run -i -t ubuntu /bin/bash
当您运行此命令时,会发生以下情况(假设使用的是默认仓库配置):
- 如果在本地没有ubuntu映像,Docker会从配置的仓库中提取它,就像手动运行docker pull ubuntu一样。
- Docker创建了一个新的容器,就像手动运行了一个Docker容器创建命令一样。
- Docker为容器分配一个读写文件系统,作为容器的最后一层。这允许运行中的容器在其本地文件系统中创建或修改文件和目录。
- Docker创建了一个网络接口,将容器连接到默认网络,因为没有指定任何网络选项。这包括为容器分配一个IP地址。默认情况下,容器可以使用主机的网络连接连接到外部网络。
- Docker启动容器并执行/bin/bash。因为容器以交互方式运行并连接到您的终端(由于-i和-t标志),所以可以在输出记录到终端时使用键盘提供输入。
- 当键入exit以终止/bin/bash命令时,容器会停止,但不会被删除。可以重新启动或删除它。
底层技术
Docker是用Go编程语言编写的,并利用Linux内核的几个特性来提供其功能。Docker使用一种名为名称空间的技术来提供称为容器的隔离工作空间。当你运行一个容器时,Docker会为这个容器创建一组名称空间。
这些名称空间提供了一层隔离。容器的每个方面都在一个单独的命名空间中运行,其访问权限仅限于该命名空间。