热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2、Docker的核心架构及常用命令简介

一、核心架构Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及OverlayFS类的UnionFS等技术,对进程

一、核心架构

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

官网上给出的Docker的核心架构图,如下所示:


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

二、Docker客户端

Docker客户端(也叫Docker,或The Docker client)是许多Docker用户与Docker交互的主要方式。当使用像docker run这样的命令时,客户端将这些命令发送给dockerd(即Docker daemon),由dockerd执行它们,docker命令使用docker APIDocker客户端可以与多个守护进程通信。

三、守护进程

Docker守护进程(也叫dockerd,或The Docker daemon)监听Docker API请求,并管理Docker对象,如镜像images、容器containers、数据卷volume。守护进程也可以与其他守护进程通信来管理Docker服务。

四、Docker仓库

Docker仓库用于存储Docker镜像。Docker Hub是一个任何人都可以使用的公有仓库,默认情况下,Docker被配置为在Docker Hub上查找镜像。也可以运行自己的私有仓库。当使用docker pulldocker run命令时,所需的镜像会从你配置的仓库中提取出来,当使用docker push命令时,你的镜像会被推送到你配置的仓库中。

五、Docker对象


1、镜像(images

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。

你可以使用远程仓库中别人发布的镜像,也可以定制自己的镜像,要构建自己的镜像,需要创建一个Dockerfile文件,其中包含一个简单的语法,用于定义创建和运行镜像所需的步骤,Dockerfile中的每条指令都在镜像中创建一个层,当改变Dockerfile并重建镜像时,只有那些已经改变的层才会被重建,与其他虚拟化技术相比,镜像之所以如此轻巧、小巧和快速,部分原因就在于此。

2、容器(containers

容器是镜像的运行时实例,使用Docker API或CLI创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,通过数据卷volume为其附加存储,甚至根据其当前状态创建一个新镜像。默认情况下,容器与其他容器及其主机是相对隔离的。容器由其镜像以及在创建或启动时提供给它的任何配置选项定义,当容器被移除时,没有存储在持久存储中的任何对其状态的更改都将消失。

六、Docker API

Docker API中最重要的就是操作镜像,容器的相关命令,也是学习和使用Docker必需熟练使用的,Docker API的官网参考:https://docs.docker.com/engine/api/ 。

这里还有张思维导图,很形象,值得参考学习:

总结

Docker是一个用于开发、发布和运行应用程序的开放平台,利用Docker可以快速发布、测试和部署代码,显著减少编写代码和在生产环境中运行代码之间的延迟。它提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力,容器是轻量级的,包含运行应用程序所需的所有内容,因此不需要依赖当前安装在主机上的内容。另外,容器可以随时随地的创建和销毁,使用起来可谓是随心所欲啊。因此,Docker能为我们做到以下方面:


  1. 快速、一致地交付应用程序;

  2. 响应式部署和扩展;

  3. 在同一硬件上运行更多的工作负载。

个人最大的感受是入门简单,使用便利。比如,以前需要在Linux系统中安装jdk,tomcat,mysql等软件环境需要费半天的工夫,而且一不小心还会出现软件环境的版本不兼容问题,现在通过Docker将软件环境和应用程序打包在一起,保持环境的一致性外,还可以轻松的迁移到其他机器执行。又比如,公司的一台服务器不可能只有你一个人去使用吧,而是很多同事都会在上面部署或者测试程序,这样很容易造成自己部署的东西受到其他同事部署的影响,而Docker通过容器很好的解决了环境隔离问题,这样自己的程序就不会受到他人程序的影响了。


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 在日常的项目开发中,测试环境和生产环境通常采用HTTP协议访问服务。然而,从浏览器的角度来看,这种访问方式会被标记为不安全。为了提升安全性,当前大多数生产环境已经转向了HTTPS协议。本文将详细介绍如何在Spring Boot应用中配置SSL证书,以实现HTTPS安全访问。通过这一过程,不仅可以增强数据传输的安全性,还能提高用户对系统的信任度。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 本文详细探讨了JavaScript中数组去重的各种方法,并通过实际代码示例进行了深入解析。文章首先介绍了几种常见的去重技术,包括使用Set对象、过滤方法和双重循环等。每种方法都附有具体的实现代码,帮助读者更好地理解和应用这些技术。此外,文中还讨论了不同方法在性能上的优劣,为开发者提供了实用的参考。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 基于Java和SSM框架的志愿者管理平台源代码分析与实现
    本研究针对基于Java和SSM框架的志愿者管理平台进行了详细的源代码分析与实现。该平台属于Java Web项目,采用Java EE技术栈,并结合了Spring、Spring MVC和MyBatis三大核心框架(非开源)。项目名称为“基于SSM的志愿者管理系统”,旨在提升志愿者管理的效率和规范性。通过对系统架构、模块设计及关键代码的深入解析,本文为开发者提供了全面的技术参考和实践指导。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
author-avatar
书友56183408
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有