容器技术简述


前言

最近看了容器(Container)的一些相关知识,记录下来,以docker为例讲述容器,主要参考了docker的官方文档(绝大部分是翻译加上一点点自己的理解)。
docker官方文档:https://docs.docker.com

一、Container

1.1 container

容器是机器上与主机上的所有其他进程隔离的沙箱进程,容器的隔离技术利用了Linux 内核的Namespaces 和 Cgroups特性。Docker让容器的以下几个功能易于使用:
(1)容器是 image的可运行实例,可以使用DockerAPI或CLI创建、启动、停止、移动或删除容器。
(2)容器可以运行在本地机器,虚拟机或部署到云上。
(3)容器是可移植的(可以在任何操作系统上运行)。
(4)容器之间彼此隔离,运行各自的软件、二进制文件和配置。

备注:
Docker 是一个开源工具,它可以将你的应用打包成一个标准格式的镜像,并且以容器的方式运行,关于docker后面会详细介绍。
Namespace 和 Cgroups 是Linux内核的两个特性,可以让应用程序在一个资源可控的独立(隔离)环境中运行。

1.2 container image

在运行容器时,它使用一个隔离的文件系统,这个定制文件系统是由container image 提供的,因为 image 包含容器的文件系统,所以它必须包含运行应用程序所需的所有东西——所有依赖项、配置、脚本、二进制文件等等,该 image 还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据。
好处:容器运行的时候就不再依赖宿主机上的文件操作系统类型和配置。帮助开发者跳过设置冗杂的开发环境,不用担心不同环境下的软件运行的环境配置问题(将应用程序的配置和所有依赖打包成一个镜像在容器中)。

1.3 小结

(1)container 是 image 的一个可运行实例,container 可以看作是宿主机上的一个进程。
(2)通过 Docker run 命令将 container image 运行为 container。
(3)image就是一个特殊的文件系统,它提供了container中程序运行所需要的所有文件。

二、Docker

2.1 docker简述

Docker 是一个用于开发、交付和运行应用程序的开放平台,Docker 能够将应用程序与基础设施分离,以便快速交付软件,使用Docker,可以像管理应用程序一样管理基础设施,通过利用 Docker 快速交付、测试和部署代码的方法,可以显着减少编写代码和在生产环境中运行之间的延迟。

Docker 提供了在称为容器的松散隔离环境中打包和运行应用程序的能力,隔离和安全性允许在给定主机上同时运行多个容器,容器是轻量级的,包含运行应用程序所需的所有内容,因此不需要依赖于主机上当前安装的内容,可以在工作时轻松共享容器,并确保与您共享的每个人都获得以相同方式工作的同一个容器。

Docker提供了工具和平台来管理容器的生命周期:
(1)用容器开发您的应用程序及其支持组件。
(2)容器成为分发和测试应用程序的单元。
(3)准备就绪后,将应用程序作为容器或编排好的服务部署到生产环境中,无论您的生产环境是本地数据中心、云提供商还是两者的混合,这都是一样的。

2.2 Docker的特点

2.2.1 Fast, consistent delivery of your applications

Docker简化了开发生命周期,允许开发人员在标准化的环境中使用本地容器来提供应用程序和服务,容器非常适合持续集成和持续交付 (CI/CD) 工作流。比如:
(1)您的开发人员在本地编写代码并使用 Docker 容器与同事分享他们的工作。
(2)他们使用 Docker 将他们的应用程序推送到测试环境中并执行自动化和手动测试。
(3)当开发人员发现错误时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中进行测试和验证。
(4)测试完成后,将修复程序提供给客户就像将 the updated image 推送到生产环境一样简单。

2.2.2 Responsive deployment and scaling

(1)Docker 基于容器的平台允许高度可移植的工作负载,Docker容器可以运行在开发人员的本地笔记本电脑上,也可以运行在数据中心的物理或虚拟机上,可以运行在云提供商上,也可以运行在混合环境中。
(2)Docker的可移植性和轻量级特性也使得它可以很容易地动态管理工作负载,根据业务需求在几乎实时的情况下扩展或删除应用程序和服务。

2.2.3 Running more workloads on the same hardware

Docker是轻量级和快速的。它为基于管理程序的虚拟机提供了一种可行且经济高效的替代方案,因此您可以使用更多的计算能力来实现业务目标。Docker 非常适合高密度环境以及需要用更少资源完成更多工作的中小型部署。

在同一台宿主机上的容器共享系统Kernel,这使得它们可以迅速启动而且占用内存极少(容器是一种软件运行环境的虚拟化技术,省去了启动和维护整个虚拟客户机的开销)。镜像是以分层文件系统构造的,这可以让它们共享相同的文件,使得磁盘使用率和镜像下载速度得到提高。

三、 Docker architecture

Docker 使用客户端-服务器架构,Docker 客户端与 Docker 守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker客户端和守护进程通过UNIX套接字或网络接口使用REST API进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。

架构图如下:
在这里插入图片描述

3.1 The Docker daemon

Docker 守护进程 (dockerd) 监听 Docker API 请求并管理 Docker 对象,例如 images, containers, networks, and volumes。守护进程也可以通过与其他守护进程通信来管理Docker服务。

3.2 The Docker client

Docker客户端(docker)是许多Docker users与Docker交互的主要方式。当你使用 docker run 等命令时,客户端将这些命令发送给 dockerd,dockerd 执行它们,docker命令使用docker API。Docker客户端可以与多个守护进程通信。

3.3 Docker registries

Docker registry 存储 Docker images,Docker Hub是任何人都可以使用的一个 public registry,Docker被默认配置为在Docker Hub上查找 image,您甚至可以运行自己的 private registry。
当你使用docker pull或docker run命令时,你需要的 image 会从你配置的 registry 中 pull 下来。当你使用docker push命令时,你的image会被 push 到你配置的 registry 中。

3.4 Docker objects

当你使用Docker时,你是在创建和使用 images、containers、networks、volumes、plugins、and other objects。下面简要介绍下 images和containers。

3.4.1 images

image是一个 read-only template,其中包含创建 Docker 容器的说明。通常,一个 image基于另一个 image,并带有一些额外的定制。例如,您可以构建一个基于ubuntu映像的映像,但是要安装Apache web服务器和您的应用程序,以及运行应用程序所需的配置细节。

您可以创建自己的images,也可以只使用其他人创建并发布在 registry 中的 images。
要构建自己的image,需要创建一个Dockerfile,Docker 为用户自己定义镜像提供了一个叫做 Dockerfile 的文件,在这个 Dockerfile 文件里,你可以使用简单的语法定义创建和运行自己镜像所需要的步骤。

Dockerfile 中的每条指令都会在 image 中创建 a layer,当您更改 Dockerfile 并重建 image时,仅重建那些已更改的 layers。与其他虚拟化技术相比,这是使 image 如此轻量、小巧和快速的部分原因。

3.4.2 Containers

容器是 image 的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,将存储附加到它,甚至可以根据其当前状态创建新映像。

默认情况下,一个容器与其他容器及其主机的隔离相对较好。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度,提供与主机和其他容器的轻度隔离

容器由其 image 以及在创建或启动它时提供给它的任何配置选项定义。

总结

容器是一种跨本地和云中的不同环境打包和运行 Windows 和 Linux 应用程序的技术。 容器提供一个轻型隔离环境,使应用更易于开发、部署和管理。 容器可以快速启动和停止,因此适用于需要快速适应不断变化的需求的应用。 容器的轻型性质也使得它们成为一种有用的工具,可以提高基础结构的密度和利用率。

其优点:
轻量级,快速启动,易部署,易迁移。

其缺点:
容器无法提供与虚拟机相同的安全性和稳定性。由于它们共享宿主机的内核,因此不能像虚拟机一样完全隔离。容器是进程级的隔离,一个容器可以通过影响宿主机内核的稳定性来影响其他容器。

参考资料

https://docs.docker.com
https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值