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

news2024/11/26 12:14:53

文章目录

  • 前言
  • 一、Docker是什么?
  • 二、Docker和Virtual Machine的区别
  • 三、Docker架构
    • 1. Client
    • 2. Docker Host
    • 3. Registry
  • 四、Docker在实际应用中的好处
    • 配置环境
    • 网络和卷
    • 更新管理
  • 总结


前言

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


一、Docker是什么?

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

二、Docker和Virtual Machine的区别

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

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

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

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

三、Docker架构

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

在这里插入图片描述

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的使用也极大推动了研发效率、降低了维护的难度、且极大弱化了本地操作系统环境的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s如何使用ceph rbd块存储(静态供给、存储类动态供给)

目录 前言安装ceph集群ceph集群创建rbd块存储rbd块存储不支持ReadWriteManyk8s配置rbd块存储(静态供给)创建secret创建pv创建pvck8s节点安装客户端依赖包部署pod查看pod验证是否持久化 k8s配置rbd块存储(动态供给)查看官网ceph集群…

mysql 最常用的一些语句

1 数据库相关操作 CREATE DATABASE IF NOT EXISTS daily-test DEFAULT CHARSET utf8 COLLATE utf8_general_ci; drop database daily_test; use daily_test 具体操作如下图上所示: 2 mysql常用数据类型 MySQL 数据类型 | 菜鸟教程 3 数据库表相关操作…

Stimulsoft Forms.WEB 23.2.6 Crack

Stimulsoft Forms.WEB 发布 创建、编辑、填写、发布和分发交互式表单。 2023 年 6 月 13 日 - 9:34 新产品 特征 您可以为几乎任何目的创建任何类型的文档 - 发票和支票、各种调查问卷和工作表、订单、简历等等。用户收到可编辑的 PDF 格式的完成模板,可以在任何现代…

英伟达开发板学习系列---国产【Jetson Xavier NX】系统安装及基础配置

1. 前言 最近新买了Jetson Xavier NX, 和之前英伟达原厂的NX的区别在于国产Jetson Xavier NX 是核心板使用的是英伟达的,扩展板是国产的。具体详情如下: 官方NX和国产NX详情区别 2. 设置系统从固态硬盘启动 官方NX出厂是直接将SD卡(64/12…

Redis GEO地理位置信息的应用

Redis GEO地理位置信息的应用 Redis GEO概述应用场景Redis GEO命令GEO命令演示 Redis GEO实现附近人的功能基础类API接口接口实现执行测试 Redis GEO 概述 Redis的GEO操作是一种基于地理位置信息进行操作的功能。它使用经度和纬度坐标来表示地理位置,支持存储地理位…

湖南大学CS-2020期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 1.简答题(10 分) 假设一个基于 IEEE 浮点格式的 10 位浮点表示,有 1 个符号位,4 个阶码位(k=4)和 5 个 尾数位(n=5)。 (…

湖南大学CS-2018期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 一、选择题(每题 2 分,共 10 分) 1. 0x12345678 存放在采用小端存储的机器上,地址为 0x100 到

湖南大学CS-2017(另一张)期末考试解析

【特别注意】 答案来源于wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 由于这张试卷没有电子版,我就直接拍我自己的作答了

八大排序算法之归并排序(递归实现+非递归实现)

目录 一.归并排序的基本思想 归并排序算法思想(排升序为例) 二.两个有序子序列(同一个数组中)的归并(排升序) 两个有序序列归并操作代码: 三.归并排序的递归实现 递归归并排序的实现:(后序遍历递归) 递归函数抽象分析: 四.非递归归并排序的实现 1.非递归归并排序算法…

C:\Users\BC>conda -V ‘conda‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

C:\Users\BC>conda -V ‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 注意!:Anaconda安装路径和Scripts路径,两个都添加进去Path 解释:将 Anaconda 安装路径和 Scripts 路径都添加到系统的 PA…

css属性计算过程

CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢? 有的同学可能会讲,CSS属性我倒是知道,例如: p{color : red; }上面的 CSS 代码中,p 是元素选择器,color 就是其中的一个 CSS 属性。 但是要说 CSS 属…

丢失d3dcompiler47.dll怎么办,这个五个修复方法都可以解决

打开游戏或者软件的时候,电脑提示由于找不到d3dcompiler_47.dll,无法继续执行此代码怎么办,其实修复起来不难。首先需要先知道怎么是dll文件,dll文件可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿…

【学习笔记】Spring Cloud

1、Spring Cloud简介: 成熟的微服务框架,定位为开发人员提供工具,以快速构建分布式系统 2、Spring Cloud核心组件 服务注册中心:Spring Cloud Netflix Eureka,会启动一个Eureka Serve,把其他的组件作为E…

Git分布式版本控制系统

Githttps://git-scm.com/ 1. Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone)&#xff…

梳理Retrofit的知识体系

作者:RainyJiang 在学习Retrofit后,由于它本身就是OKHttp的封装,面试中也经常会被一起问到;单纯的解析它的源码学习难免会有点无从下手,往往让人抓不住重点,学习效率并不是很高,本文从提出几个问…

我的创作纪念日 2048 AI 面试 Java GoLang

《突击面试》 《面试1v1》 机缘 提示:可以和大家分享最初成为创作者的初心 例如: 实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流… 收获 提示:在创作的过程中都有哪些收获 例如: 获得了多少粉丝的关注获得…

VMware Workstation 11 安装教程

哈喽,大家好。今天一起学习的是VMware Workstation 11的安装,vm虚拟机是小编非常喜欢的生产力软件,小编之前发布的测试教程钧在vm上进行的实验。 VMware Workstation是一款功能强大的桌面虚拟计算机软件,它能够让用户在宿主机操作…

轻松搞定邮件营销!这些工具可以助你提升转化率

据可靠数据统计,邮件营销得投资回报比达1:44,他高性价比的特性在众多营销方式中脱颖而出。他促使企业能够以较低的成本,和客户建立联系并维持长期联系。邮件营销对企业来讲无疑是极佳的获客渠道和营销方式。 想要做好邮件营销通常…

【Java基础学习打卡04】计算机操作系统

目录 引言一、操作系统基本概念二、Windows操作系统三、进程与线程1.进程2.线程 四、CPU与内存总结 引言 了解操作系统基本概念,熟悉Windows操作系统,理解进程与线程概念,并知晓CPU与内存如何工作。 一、操作系统基本概念 计算机操作系统&a…

使用Scala集成开发环境

一、搭建Scala的IntelliJ IDEA开发环境 (一)启动IDEA (二)安装Scala插件 启动IDEA,在欢迎界面中选择Configure→Plugins命令 在上方的搜索框中搜索scala关键字 单击绿色的【Install】按钮,安装完毕&am…