Docker概述:什么Docker如此特别,它是如何构建的

简介: 本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的 【编者的话】在上一系列介绍中,我们大体地介绍了 CoreOS 。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。

Docker是一个开源项目,它以基于Linux操作系统级镜像来提供一个抽象的、自动分发的虚拟化附加层,通过该层使得在容器中更加容易打包应用。

容器本身仅是基于Linux的cgroups的一个抽象实现,cgroups是用于监控和限制进程及其子进程占用资源的底层内核结构。Dokcer一开始是采用 LinuX Contrainers (LXC)的,但是后来切换到runC,前者(LXC)以libcontainer被熟知。runC则是跑在跟宿主相同的操作系统,这使得它可以共享很多宿主的操作系统资源,如RAM、CPU、网络等。

为何Docker如此特别?

Docker在虚拟的容器环境之上增加一个应用部署引擎。它是一个轻量级但十分强大的关于虚拟化技术的开源容器,在容器中还整合了构建并容器化应用的工作流程。

好处:
  • Docker可以使你迅速地根据组件组合出应用,并消除代码分发过程中遇到的障碍。例如你可以在同一个主机上运行两个应用相同但版本不同的Docker容器。
  • Docker使你的代码尽可能快的通过测试并部署到生成环境。
  • Docker难以置信的简单易用。无论是在简易版Linux、OSX,还是Windows主机上都可以开始学习Docker。(Windows需要直接运行兼容Linux内核或者运行Docker镜像的虚拟机),
  • 你可以在几分钟之内容器化你的应用。大多数Docker容器在一秒内即可启动。
  • Docker容器几乎可以在任何地方运行。你可以在台式机、物理服务器、虚拟机上部署容器到数据中心,上传到公有云和私有云均可。这样,你就可以在任何地方运行完全一样的容器。

在我们继续讨论Docker惊艳的容器化特征之前,我们先看一下虚拟机和容器的区别。

虚拟机和容器的区别

容器与虚拟机享有相似的资源隔离和分配,但是容器有一套不同的架构方式使得它本身更加便携和高效。我们看下面两个演示二者差别的两个表。

虚拟机

每一个虚拟机包括应用、必要的二进制文件和库、完整的客户操作系统,大小总计数十GB。
docker-overview-0.png

容器

容器包括应用和应用的所有依赖,每个容器都使用容器自身选择的发行版本,但是与其他容器共享宿主操作系统的内核。

在宿主操作系统的用户空间内,他们以隔离的进程方式运行。另外,他们并不像客户操作系统正常运行那样运行所有的进程。而且容器也不绑定任何特别的硬件基础设施!Docker容器在任何计算机任何硬件基础设施任何云都可以运行。
docker-overview-1.png

重要的是,虚拟机需要耗时几分钟来启动,而且对资源敏感,然后容器只需要几秒甚至更少时间启动,在资源较少负载过大时也能应付的了。所以,你可以在本地计算机运行很少的几个虚拟机用于开发目的,但是你可以运行很多很多的容器。这可以使你在开发环境中高效的运行应用环境的完整备份。而且,在生成环境中,这些资源节约很容易转化为成本节约。

容器组件

Docker容器有一些顶层的组件需要我们先要了解,让我们看一下。

Docker客户端和服务端

Docker是C/S应用。
docker-overview-2.png

Docker客户端跟服务器(守护程序)通信,服务器来做所有的工作。Docker通过包含命令行客户端(供Linux、OS X和Windows使用)和完整RESTful接口的二进制文件来分发。你可以在一台Linux主机上运行Docker守护进程和客户端,或者将你的本地Docker客户端连接到另一台Linux主机的远程Docker守护进程。

Docker镜像

Docker镜像是Docker的构建基石。这些镜像是Docer生命周期中的构建部分。他们是一种分层的形式,根据一系列说明一步一步构建产生的统一文件系统。Dockefile是一个文本文档,它包含用户可以在命令行调用的所有命令从而组成一个镜像。使用一个基本的Docker镜像,可以添加、拷贝文件、执行命令、开放端口。

你可以认为Docker文件是一种源码,而镜像是为产生容器而被编译的代码,而容器则是运行时代码。Docker文件具有高度的便携性,可以随时共享、存储和更新。

注册服务

一旦你构建出一个镜像,你就可以在注册服务中存储它。注册服务有:公共的和私有的。像Docker Hub、Quay.io、Container Registery by Google Cloud的注册服务都有公共和私有的选项。你当然也可以在自己机器上运行一个自己的私有注册服务。

容器

容器是镜像的一个运行版本。

你可以认为镜像是Docker的构建或者编译的一面,而容器是Docker的运行或者执行的一面。

容器的生命周期跟你在容器里执行的命令的生命周期是一致的。一个容器可以只执行一个单个命令后立刻结束,或者可以让容器跟随耗时的命令一直运行。

总结

在本文我们讲述了:
  • 什么使得Docker如此特别
  • 虚拟机和容器的主要区别
  • 组成Docker的主要组件

在我的下一篇博文中,我们将介绍启动容器、构建镜像,并在数据分区中工作的内容

原文链接:Docker Overview, Part One(翻译:姜俊厚)

原文发布时间为:2016-03-25
本文作者:whole 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker概述:什么Docker如此特别,它是如何构建的
目录
相关文章
|
9天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
2月前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
15天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
85 2
|
23天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
75 7
|
22天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
55 6
|
21天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
24 4
|
20天前
|
存储 监控 Linux
Docker技术架构概述
【10月更文挑战第22天】Docker采用CS架构,Client与Daemon交互,Compose管理多容器应用。
|
22天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
30 3
|
27天前
|
jenkins 测试技术 持续交付
Docker最佳实践:构建高效的CI/CD流水线
【10月更文挑战第17天】在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为提高开发效率和软件质量的重要手段。Docker作为一种容器技术,为构建一致且隔离的开发环境提供了强有力的支撑。本文将探讨如何利用Docker来优化CI/CD流程,包括构建环境的标准化、镜像管理以及与CI/CD工具(如Jenkins、GitLab CI)的集成。
48 5
|
26天前
|
JavaScript Docker Python
下个时代的开发工具-Nix:声明式的运行环境构建器、简单场景下的docker替身
Nix 是一个独特的包管理工具和构建系统,采用声明式方法管理软件包和运行环境。它通过精确控制依赖关系和环境配置,确保软件的可重复性、隔离性和可追溯性。Nix 支持多语言开发环境,提供声明式配置、环境隔离、回滚与版本控制等核心功能,适用于复杂开发场景,有效解决依赖冲突和环境不一致问题。