当前位置: 首页 > 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.xdnf.cn/news/1193185.html

相关文章:

  • 【科研绘图系列】R语言绘制误差连线散点图
  • 秋招Day19 - 分布式 - 分布式事务
  • 生产环境使用云服务器(centOS)部署和使用MongoDB
  • Java操作Excel文档
  • opencv学习(图像金字塔)
  • 背包问题及 LIS 优化
  • 告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践
  • C#编程基础:运算符与结构详解
  • 【Android】相对布局应用-登录界面
  • 2025.7.26字节掀桌子了,把coze开源了!!!
  • window下MySQL安装(三)卸载mysql
  • Fast_Lio 修改激光雷达话题
  • VLAN的划分(基于华为eNSP)
  • MySQL 8.0 OCP 1Z0-908 题目解析(37)
  • 尝试几道算法题,提升python编程思维
  • Linux内核设计与实现 - 课程大纲
  • LeetCode 1074:元素和为目标值的子矩阵数量
  • 使用Spring Boot创建Web项目
  • 学习嵌入式的第三十二天-数据结构-(2025.7.24)IO多路复用
  • 开发者说|RoboTransfer:几何一致视频世界模型,突破机器人操作泛化边界
  • 1. Qt多线程开发
  • SpringMVC——建立连接
  • OpenFeign-远程调用
  • 计算机中的数据表示
  • Windows Server系统安装JDK,一直卡在“应用程序正在为首次使用作准备,请稍候”
  • Java程序员学从0学AI(六)
  • 框架式3D打印机结构设计cad【9张】三维图+设计说明书
  • openmv特征点检测
  • 如何使用Anaconda(miniconda)和Pycharm
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶(365)