作为软件工程师对Docker的认知和看法

这篇具有很好参考价值的文章主要介绍了作为软件工程师对Docker的认知和看法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

两年前我还没有接触过Docker,也不理解Docker在自动化工程应用中有什么帮助,但随着逐渐深入学习体会到了它的优点,这篇文章就从一个软件工程师角度来说说我在使用中哪些场景下发现了哪些易用点。


一、Docker是什么?

Docker是一种开源容器化平台,用于构建、发布和运行应用程序。它允许开发人员将应用程序及其依赖打包成一个轻量级、可移植的容器,并在不同的环境中快速部署和运行。它可以帮助开发人员轻松地创建、部署和运行应用程序,同时提高应用程序的可靠性、安全性和可维护性。Docker的核心是Docker引擎,它是一个轻量级的运行时环境,可以在任何操作系统上运行。

二、Docker和Virtual Machine的区别

作为软件工程师对Docker的认知和看法
上边这张图大家可能在之前也有见过,说明容器和虚拟机的区别,对于这两种方式在使用中有什么区别呢。刚好在这里介绍下之前了解到微内核与宏内核的区别,他们是操作系统设计的两种不同架构方式:

微内核:基于最小化核心设计,将最基本的操作系统服务和功能放在核心中,而其他高级功能则以独立的进程的形式运行在核心之外,这些独立的进程相互之间通过信息传递来实现进程间通信和协调功能。微内核相对较为简单,安全性高,易于扩展和维护,但是因为多个进程之间需要通信,所以性能较差。

宏内核:将操作系统的所有基本服务和功能,包括设备驱动程序、文件系统等全部都集成在内核中,形成一个庞大而复杂的内核结构。它的优点是性能高,运行效率高,但是随着内核不断增大,操作系统的可扩展性和可移植性都大大降低,且容易出现内核故障。

在Docker与Virtual Machine中有类似的情况,Docker可以类比为宏内核,统筹所有通用资源,每个container都可以使用宏内核的资源。而Virtual Machine可以类比为微内核,每个对象都有全部的程序和资源(即操作系统),这样必然导致不同的虚拟机重复运行了很多底层服务,占用过多资源。

三、Docker架构

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

作为软件工程师对Docker的认知和看法

1. Client

Client通过一些接口与其他两部分沟通交互,博主通常会用到的是:

# 推送镜像到registry
docker push ***
# 从registry拉镜像到本地
docker pull ***
# 根据docker file打包镜像
docker build *** ***
# 停止容器
docker stop ***
# 启动容器
docker start ***
# 搜索registry按特定名称
docker search ***
# 使用bash接入容器中
docker exec -it *** bash
# ...更多可以使用man 或 -h查看

这些指令让你和镜像及容器建立联系,后续你可能涉及搭建或使用本地registry但是原理是相同的。

2. Docker Host

Docker Daemon守护进程

它的工作是监听第1部分这些接口的,同时负责管理Docker的具体对象包括images, containers, networks, volumes等
守护进程还可以与其他守护进程通信以管理Docker服务。

通常我们在docker run时配置的镜像、网络、卷等信息就通过守护进程进行管理和执行。

Images本地镜像

除了在registry上有大家push上去的镜像外,我们在本地运行时也需要有镜像对象的存在,我们通常使用docker images来看本地的镜像情况,可以显示本地从registry pull下来的所有对象。

Container容器

这部分与我们平时联系也比较多,Container是镜像运行的实例,image是无法运行的,我们可以根据一个image构建多个Container对象出来,这些对象可以运行和执行程序及指令,通常我们的代码就在这里边运行。

3. Registry

Registry相对比较好理解,它就是镜像的管理服务器,类似github、gitee等存在,我们也可以在本地搭建Registry,之前有写多篇文章讲如何使用harbor搭建镜像服务器,如何配置gitlab registry等。

四、Docker在实际应用中的好处

配置环境

博主是从两年前接触到Docker的,在我们通常情况下入职第一件事是安装软件配置环境等,这就需要至少花费一天的时间,根据你所被安排不同的项目你还得安装和配置更多的软件及环境变量等,可怕的是万一有多个项目同时进行开发,那么你电脑内部的依赖软件和库版本会非常复杂,很容易造成异常。

在切入到Docker后这一块就很难造成困扰了,公司一般会更具情况分层级打包镜像,你在镜像基础上去构建对应的容器对象后进行开发,环境、依赖等都已经配好,大大降低了大家在配置环境上开发的时间和精力。

网络和卷

如果你是做网络开发对于端口管理往往比较多,Docker提供简单映射服务可以将host端口映射到容器中的端口,这意味着你不需要不停修改容器或虚拟机的端口来保证大家独特性,只需要通过映射服务就能将host外部端口与内部端口做绑定。同时支持多ip的绑定,将不同ip端口和特定容器端口绑定。

同时文件的管理也会更加方便:

  1. 可以将编译好的可执行文件映射到容器中
  2. 可以将日志文件很方便的映射到host
  3. 可以快速搭建文件共享等服务,将本地文件通过docker中的vsftp等镜像快速搭建共享服务器

更新管理

通过对镜像的分层管理,我们可以很便捷的进行程序的更新和环境的更新。

例子1:在项目运行过程中发现有一个依赖库或多个依赖库需要添加,按照传统方法大家每个人电脑都需要安装对应的依赖库,这个过程中通常会发生有人下载的版本不对,不知道什么奇怪的原因安装不上等。
如果通过对底层镜像统一管理,就可以由系统架构师更新底层镜像的库依赖,大家pull一下最新镜像重新运行编译程序即可。


总结

以上就是博主想要分享给大家的内容,即使在机器人自动化这类相对比较传统的行业中,Docker的使用也极大推动了研发效率、降低了维护的难度、且极大弱化了本地操作系统环境的影响。文章来源地址https://www.toymoban.com/news/detail-481999.html

到了这里,关于作为软件工程师对Docker的认知和看法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 作为爬虫工程师,自动化和抓包你说不了解的selenium采集内容篇!

    前言 作为爬虫工程师,掌握Selenium采集是非常有用的,因为有些网站采用了动态加载、javascript渲染或AJAX技术,这些技术使得使用传统的静态HTML解析库难以获取到完整的数据。Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的交互行为,包括点击、滚动、输入等操

    2024年02月14日
    浏览(25)
  • 面试(软件实施工程师)

    应聘软件实施工程师时,面试时常会问到的问题。 在面试时面试官常问的几个问题做一个总结。 专业能力,工作思维,软实力,意识,进取心。我们要具有项目进度、优先级别、质量观念和服务意识。 1、具有扎实的计算机专业知识。这是软件开发人员能够从事软件一切工作

    2024年02月16日
    浏览(33)
  • 软件测试工程师

    一、什么是软件测试? 1、定义:使用技术手段验证软件是否满足使用需求 2、目的:减少软件缺陷,保障软件质量。 二、主流技术: 1、功能测试:验证程序的功能是否满足需求 2、自动化测试:使用代码或工具代替手工,对项目进行测试 3、接口测试:有硬件接口、软件接

    2023年04月10日
    浏览(72)
  • 软件开发工程师 - 面试手册

    软件开发工程师是IT行业中最常见的岗位之一,主要负责设计、开发和维护软件应用。他们需要熟悉至少一种编程语言,了解软件开发的基本流程和原理,具备良好的解决问题能力和团队合作精神。 在招聘广告中,公司通常会对软件开发工程师的要求做出如下描述: 熟悉至少

    2024年02月06日
    浏览(48)
  • SaaS软件工程师成长路径

           SaaS软件工程师的成长需要循序渐进,和SaaS业务一样有耐心。SaaS工程师需要在“业务”、“技术”、“管理”三个维度做好知识储备、技能沉淀。本文基于“能力-知识-技能”模型,给出SaaS软件工程师成长路径、学习建议及要求。         “Ability(能力)”更多依

    2024年02月15日
    浏览(42)
  • 软件工程师,全面思考问题很重要

    为什么要全面思考问题         □ 在软件开发中,对一个问题思考得越全面,编写出的代码就会越严谨,出现bug的几率就越低;反之,如果没有对一个问题进行全面而深入的思考,编写出的代码就会漏洞百出,出现各种莫名其妙、无法复现的bug的几率也就急剧增加。   

    2024年02月08日
    浏览(30)
  • 软件UI工程师的职责模板

      软件UI工程师的职责模板1 职责: 1.负责产品的UI视觉设计(手机软件界面 网站界面 图标设计产品广告及 企业文化的创意设计等); 2.负责公司各种客户端软件客户端的UI界面及相关图标制作; 3.设定产品界面的整体视觉风格; 4.为开发工程师创建详细的界面说明文档,保证工程师

    2024年02月13日
    浏览(34)
  • 软件工程师,入门下深度学习吧

    概述         ChatGPT,英文全称为Chat Generative Pre-trained Transformer,是OpenAI研发的聊天机器人程序。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流。除此之外,还能

    2024年02月11日
    浏览(30)
  • 软件工程师,TypeScript值得你拥有

    背景          □ TypeScript起源于使用JavaScript开发的大型项目。由于JavaScript语言本身的局限性,难以胜任和维护大型项目开发,因此微软开发了TypeScript,使得其能够胜任开发大型项目。         □ TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添

    2024年02月16日
    浏览(46)
  • 8年经验的软件工程师建议

    我希望在职业生涯早期就开始做的事情和我希望以不同的方式做的事情。 大家好,我已经做了八年半的软件工程师。这篇文章来源于我最近对自己在职业生涯中希望早点开始做的事情以及希望以不同方式做的事情的自我反思。 我在这里分享的对任何希望提高和进步到高级甚

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包