理解Docker——深入引擎室

简介:

点击关注 异步图书,置顶公众号

每天与你分享 IT好书 技术干货 职场知识

本文大概

3301

读完共需

9

分钟

  

本文主要内容


  • Docker的架构

  • 在用户的宿主机上追溯Docker的内部结构

  • 使用Docker Hub查找和下载镜像

  • 设置自己的Docker注册中心(registry)

  • 实现容器间的相互通信


掌握Docker的架构是更全面地理解Docker的关键。在本文中,读者将在自己的主机和网络上对Docker的主要组件进行大致了解,并学习一些有助于增进这种理解的技巧。

在这个过程中,将学习一些有助于更有效地使用Docker(及Linux)的小窍门。后续的更高级的很多技巧都是基于这里所见的部分,因此请特别留意以下内容。

1.1 Docker的架构

图1-1展示了Docker的架构,这将是本文的核心内容。我们将从高层次视角入手,然后聚焦到每个部分,使用设计好的技巧来巩固理解。


宿主机上的Docker(在编写本文时)分成两个部分:一个具有REST风格API的守护进程,以及一个与守护进程通信的客户端。图1-1展示的是运行着Docker客户端和守护进程的宿主机。


REST风格 一个REST风格API是指使用标准HTTP请求类型,如GETPOSTDELETE等,来执行通常符合HTTP设计者预想的功能的API。

调用Docker客户端可以从守护进程获取信息或给它发送指令。守护进程是一个服务器,它使用HTTP协议接收来自客户端的请求并返回响应。相应地,它会向其他服务发起请求来发送和接收镜像,使用的同样是HTTP协议。该服务器将接收来自命令行客户端或被授权连接的任何人的请求。守护进程还负责在幕后处理用户的镜像和容器,而客户端充当的是用户与REST风格API之间的媒介。

图1-1 Docker架构概览

私有Docker注册中心是存储Docker镜像的一项服务,可以从任何有相应权限的Docker守护进程向其发送请求。这个注册中心处于内部网络中,不能公开访问,因此被视为是私有的。

宿主机一般坐落在一个私有网络上。在收到请求时,Docker守护进程将连接互联网来获取镜像。

Docker Hub是由Docker公司运营的一个公共的注册中心。互联网上也存在其他公共的注册中心,且Docker守护进程可与之进行交互。

在前文中我们说可以将Docker容器分发到任何能运行Docker的地方——这并不完全正确。实际上,只有当守护进程可以被安装到机器上时,容器才能在这台机器上运行。最明显的事实是,Docker客户端可以运行在Windows上,但守护进程(还)不行。

理解这张图的关键在于,当用户在自己的机器上运行Docker时,与其进行交互的可能是自己机器上的另一个进程,或者甚至是运行在内部网络或互联网上的服务。

现在,对Docker的结构有了大致的印象,我们来介绍几个与图中不同部分有关的技巧。

1.2 Docker守护进程

Docker守护进程(见图1-2)是用户与Docker交互的枢纽,因而它是理解所有相关部分的最佳切入点。它控制着用户机器上的Docker访问权限,管理着容器与镜像的状态,同时代理着与外界的交互。


图1-2 Docker守护进程

守护进程与服务器 守护进程是运行在后台的一个进程,不在用户的直接控制之下。服务器是负责接受客户端请求,并执行用于满足该请求所需的操作的一个进程。守护进程通常也是服务器,接收来自客户端的请求,为其执行操作。docker命令是一个客户端,而Docker守护进程则作为服务器对Docker容器和镜像进行操作。

我们来看几个技巧,这些技巧用于展示Docker作为守护进程高效运行,同时使用docker命令与其进行的交互被限制为执行操作的简单请求,就像与Web服务器进行交互一样。第一个技巧允许其他人连接你的Docker守护进程,并执行与你在宿主机上所能执行的相同操作,第二个技巧说明的是Docker容器是由守护进程管理的,而不是你的shell会话。

1.3 Docker客户端


Docker客户端(见图1-3)是Docker架构中最简单的部件。在主机上输入docker rundocker pull这类命令时运行的便是它。它的任务是通过HTTP请求与Docker守护进程进行通信。


图1-3 Docker客户端

在本节中,读者将看到如何监听Docker客户端与服务器之间的信息,还将看到一些与端口映射有关的基本技巧,这是向本文后续的编排章节迈进的一小步,也是使用浏览器作为Docker客户端的一种方式。


本文摘自《Docker实践

Docker实践》

艾丹 • 霍布森 • 塞耶斯(Aidan Hobson Sayers), 【美】伊恩 • 米尔(Ian Miell)

点击封面购买纸书


本文由浅入深地讲解了Docker,涵盖从开发环境到DevOps流水线再一路到生产环境的整个落地过程。书中介绍Docker的核心概念和架构,以及将Docker和开发环境有机、高效地结合起来的方法,包括用作轻量级的虚拟机以及与构建和宿主机编排、配置管理、精简镜像等。本文还通过“问题/解决方案/讨论”的形式,将等一系列难题拆解成101个相关的实用技巧,为读者提供解决方案以及一些实践经验。


延伸推荐

2018年2月新书

2018年1月重磅新书

小学生开始学Python,最接近AI的编程语言:安利一波Python书单

政策升温:大家都在学大数据,一大波好书推荐

一本基于Python语言的Selenium自动化测试书

8本新书,送出一本你喜欢的

AI经典书单| 入门人工智能该读哪些书?


点击关键词阅读更多新书:

Python|机器学习|Kotlin|Java|移动开发|机器人|有奖活动|Web前端|书单

长按二维码,可以关注我们哟

每天与你分享IT好文。


在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步图书一本。赶紧来参加哦!


扫一扫上方二维码,回复“关注”参与活动!











点击阅读原文购买《Docker实践》


相关文章
|
6月前
|
安全 持续交付 开发者
Docker 架构解析:多角度解析 Docker 引擎与容器运行时
Docker 架构解析:多角度解析 Docker 引擎与容器运行时
55 0
|
6月前
|
持续交付 虚拟化 Docker
Docker 架构解析:理解 Docker 引擎和容器运行时
Docker 架构解析:理解 Docker 引擎和容器运行时
375 1
|
Linux 开发者 Docker
Docker 引擎启动、停止、重启操作|学习笔记
快速学习 Docker 引擎启动、停止、重启操作
1101 0
|
9月前
|
存储 缓存 前端开发
Docker引擎分层解析
当我们拉取Docker Image时,如果仔细观察的话,你就会发现:它被拉成不同的层。另外,当然,我们创建自己的Docker Image时,也会创建多个层。在本文中,我们将尝试更好地去探究Docker层次的秘密。
77 0
|
10月前
|
存储 Linux 虚拟化
在CentOS上安装Docker引擎
在CentOS上安装Docker引擎
245 0
|
存储 缓存 Docker
Docker 的构建引擎是干什么的?底层原理是什么?
Docker 的构建引擎是干什么的?底层原理是什么?
|
运维 安全 Unix
【云原生 | 01】docker容器引擎
容器技术显然不是什么新概念,最早的容器技术可以追溯到 1979 年诞生的 chroot 技术 ,容器技术又称为容器虚拟化,这是虚拟化技术中的一种 ,目前虚拟化技术主要有硬件虚拟化、半虚拟化和操作系统虚拟化等 。本系列文章讲述的容器虚拟化属于操作系统虚拟化,其相较于其他主流虚拟化技术更为轻量。............
130 0
【云原生 | 01】docker容器引擎
|
Linux API 数据库
十分钟带你入门Docker容器引擎
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker采用 C/S架构 Docker daemon 相当于服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
十分钟带你入门Docker容器引擎
|
弹性计算 Go Docker
冬季实战营第四期:Docker · 一个开源的容器引擎实验报告
Docker 是一个开源的容器引擎,用于创建、管理和编排容器,可以轻松为任何应用创建一个轻量级、可移植、自给自足的容器。本步骤将在ECS上部署一个Docker服务,并配置DockerHub的镜像加速器。
327 0
冬季实战营第四期:Docker  · 一个开源的容器引擎实验报告