当前位置: 首页 > news >正文

【架构】Docker简单认知构建

作为一个之前从来没有接触过Docker的倒霉蛋,想了解学习一下Docker

搜了CSDN和RUNOOB,得到的描述如下:

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

 Docker 的应用场景

  • 微服务架构:每个服务独立容器化,便于管理和扩展。

  • CI/CD流水线:与 Jenkins/GitLab CI 集成,实现自动化构建和测试。

  • 开发环境标准化:新成员一键启动全套依赖服务(如数据库、消息队列)。

  • 云原生基础:Kubernetes 等编排工具基于 Docker 管理容器集群。

Docker是什么
是一个开源的应用容器引擎,基于go语言开发并遵循apache2.0协议开源
是在Linux容器里运行应用的开源工具
是一种轻量级的 “虚拟机”
Docker的容器技术,可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器
市场占有率最高                        
原文链接:https://blog.csdn.net/F12138X/article/details/140344339

但说实话,我读了这些很正式的“全网统一” 的概念性官方描述,关于Docker到底是什么东西,还是没有一个落地的认知,因为我很难理解“引擎”、“虚拟化”、“容器”。这很像是我不懂某个词的含义,我去查,查出来的解释里面有三个我不懂含义的词。

于是我尝试得出一个最简单的结论:Docker是一个管打包的,或者我们暂且用“封装”来理解

比方这样一个场景:

有个项目,有前端angular环境、后端python环境、又依赖数据库,又引用外置的三方库包DLL

这时候新来了一个项目成员,我要给他配置搭建环境

于是我花了一个下午的时间,把什么node.js、python3.7、lib/DLL都拷到他电脑上装好,启动的时候又出了一些状况,修修改改,终于是能启动了,可以让他看代码然后尝试开发。搞得汗流浃背

但如果后面再进新人,每一个我都折腾这么半天,效率实在是低

如果有一种技术可以把我们所需要的所有环境、依赖、配置都统一打包封装好,到时候由机器按照流程去做这个搭建,那就很爽了

哎,这就是docker要干的事

于是我们引入三个Docker中的核心概念:镜像(Image),容器(Container),仓库(Repository)

上面说到,我们可以通过Docker,把app运行需要的所有内容(代码、库文件、环境变量、配置文件)都打包封装好,这个过程生成出来的东西,叫做镜像

我们通过指令来告知docker如何进行打包封装,指令集我们放在Dockerfile当中

到了镜像这里,app就已经是可移植的啦,把镜像拿到其他目标环境当中,再进行实例化,就得到了容器。容器是镜像的运行实例,是一个轻量级、可移植的执行环境。我们的一个镜像可以拿到多个地方,生成多个容器,完成app的移植

那么这个镜像是如何转移的呢,我们自然可以像拷贝代码一样将镜像一份一份拷贝,也可以像git一样通过仓库来完成代码的上传和下载。也就是说,docker也是有仓库的。

我们可以通过注册个人docker仓库,将自己的镜像上传,供以下载使用

同时呢,docker也有很多官方仓库,里面放了一些标准通用的环境,比如说各个版本的操作系统,各个版本的Nginx,各个版本的python等等。我们也可以在这些docker已经准备好的环境基础上再定制自己的镜像

【Rigistry:仓库注册服务器,如Docker Hub】

【Repository:具体的镜像仓库,如nginx、mysql】

至此,关于docker的基本核心概念,就有一个大概准确的了解了,再回头看文章开头的那些描述,也更好理解他们在叽里咕噜表达什么了。

这里还有一个误区,不是只有那一整套环境、代码、依赖才叫容器,他们确实是一个大的容器,但是事实上,比方说数据库MySQL,后端python,前端angular,他们可以是在大容器中包含的几个小容器,容器之间是可以进行数据通信的。不要像我之前一样把容器理解的太狭隘了

关于docker命令,我准备放在后面和linux命令合并在同一篇来写

 

http://www.lryc.cn/news/600693.html

相关文章:

  • JAVA学习-练习试用Java实现“深度优先搜索(DFS):实现八数码问题的解法(最短路径搜索)”
  • LangChain4j低阶+高阶Api+日志配置+监听器+重试机制+超时机制
  • 【LeetCode 热题 100】131. 分割回文串——回溯
  • 算法竞赛阶段二-数据结构(35)数据结构单链表模拟实现
  • Android-广播详解
  • golang实现一个定时引擎,功能包括按照corntab的时间任务实时增加、修改、删除定时任务
  • 常见sql深入优化( 二)
  • 一文学会c++list
  • 激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定
  • 二叉搜索树(Binary Search Tree)详解与java实现
  • Linux 如何统计系统上各个用户登录(或者登出)记录出现的次数?
  • Android-三种持久化方式详解
  • 摘录-打造第二大脑
  • J2EE模式---表现层集成模式
  • C++ TAP(基于任务的异步编程模式)
  • Web后端进阶:springboot原理(面试多问)
  • React入门学习——指北指南(第五节)
  • JavaScript手录06-函数
  • 【RK3568 PWM 子系统(SG90)驱动开发详解】
  • 数据赋能(336)——技术平台——智能化运营
  • Java动态调试技术原理
  • 【RocketMQ】一分钟了解RocketMQ
  • 告别复杂配置!Spring Boot优雅集成百度OCR的终极方案
  • Windows 平台源码部署 Dify教程(不依赖 Docker)
  • 《C++ list 完全指南:从基础到高效使用》
  • Linux——线程同步
  • InvokeRepeating避免嵌套调用
  • C++编程学习(第16天)
  • 7月26日京东秋招第一场第一题
  • 【第二章-数据的表示和运算】