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

Docker学习笔记:基础知识

本文是自己的学习笔记


  • 1、什么是Docker
  • 2、Docker的架构设计
    • 2.1、镜像(Image)
    • 2.2、容器(Container)
    • 2.3、仓库(Repository)
    • 2.4、Docker使用场景案例

1、什么是Docker

Docker是基于Go语言实现的云开源项目。它的角色是作为应用和环境的中间层,对应用屏蔽环境的变化,使应用的部署步骤,变量等不会随着环境的变化而变化。让App做到build anywhere and anytime。

所以Docker类似于Java虚拟机,让开发者不用操心操作系统的细节,只需要生产.class文件交给虚拟机就可以在任何操作系统上运行Java。

不过Docker比虚拟机更方便和轻巧。

虚拟机本质上是虚拟出一套硬件,然后在其之上运行一个完整的操作系统,并在系统上再运行所需应用进程。

而Docker则不虚拟硬件,直接使用操作系统的内核,不需要花时间虚拟硬件和要求操作系统划出运行空间。那不同的应用只需要持有App本身的代码和相关的依赖,然后放入Docker容器中。多个应用就对应着多个Docker容器,这些容器共享OS的内核。整个过程更轻便占用更少的资源。

比如下图就是四个App放到四个Docker容器中,共同运行在一个机器上。他们共享内核资源但是又各自拥有自己的文件系统,所以容器之间互不打扰。
在这里插入图片描述

2、Docker的架构设计

在这里插入图片描述

从上图可以看出,Docker主要分成三个部分,客户端,服务器和注册中心。

Host中有容器(Container),和镜像(Images)。

2.1、镜像(Image)

镜像是一个非常核心的概念。它可以看成是一个打包好的软件应用模具,我们可以利用它快速创建多个应用实例运行到容器中,如同模具一般一按即成型。

它包含着一个应用启动所需要的一起,比如应用程序代码,所需要的依赖,环境变量和配置等。

镜像就是Docker移植性高的关键。它被设计成平台无关,这意味着我们可以在任何安装了Docker的机器上通过同一个镜像快速启动多个应用实例,而不用担心在我机器上能运行在你机器上就不能的问题。

需要注意镜像是只读类型的文件,一旦创建就不可修改。必须修改就只能创建一个新的镜像。

2.2、容器(Container)

容器容的是应用实例。每个容器只能运行一个应用实例。

它可以被启动,开始,停止等。每个容器都相互隔离。

容器都是由镜像创建的,一个镜像可以创建多个容器。

2.3、仓库(Repository)

仓库是集中存放镜像文件的场所。

仓库和仓库注册服务器(Registry)是有区别的。仓库注册服务骑上存放着多个仓库,而每个仓库有包含了多个镜像,每个镜像有不同的标签做区分。通常标签就是版本号。

仓库也分为公开查看和私有仓库。

最大的公开库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云,网易云等。

公司或者团队内部可以创建一个内部公开的Docker仓库。然后先创建一个基础镜像(例如,一个包含特定操作系统、运行时和常用工具的基础镜像),并将其推送到公有仓库。其他团队成员可以基于这个基础镜像进一步构建自己的应用镜像,从而确保开发、测试和生产环境的一致性。

2.4、Docker使用场景案例

  1. 开发人员 A 编写应用程序代码,并创建一个 Dockerfile 来定义如何构建该应用程序的 Docker 镜像。
  2. 开发人员 A 使用 docker build 命令构建镜像,并通过 docker tag 命令给镜像打上版本标签(例如 myorg/myapp:1.0.0)。
  3. 开发人员 A 使用 docker push 命令将镜像推送到团队的公有 Docker 仓库(私有仓库)。
  4. CI/CD 系统 检测到代码更新,自动触发镜像的构建和推送流程,确保仓库中的镜像始终是最新且符合规范的。
  5. 开发人员 B 需要在本地运行或测试应用程序,他只需使用 docker pull myorg/myapp:1.0.0 命令从仓库中拉取镜像。
  6. 测试人员 可以拉取特定版本的镜像,并在测试环境中进行验证。
  7. 运维人员 可以从仓库中拉取通过测试的稳定版镜像,并将其部署到生产服务器上。
  8. 如果应用程序需要更新,开发人员会重复上述过程,将新版本的镜像推送到仓库,并更新版本标签。

通过这种方式,公有 Docker 仓库成为了团队协作的枢纽,极大地提高了开发、测试和部署的效率和一致性。

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

相关文章:

  • 5.2 初识Spark Streaming
  • uv:一个现代化的 Python 依赖管理工具
  • Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等)
  • 理解解释器架构:原理、组成与运行机制全解析
  • 2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
  • Python应用for循环临时变量作用域
  • 设计模式——桥接设计模式(结构型)
  • LLaDa——基于 Diffusion 的大语言模型 打平 LLama 3
  • Apache SeaTunnel部署技术详解:模式选择、技巧与最佳实践
  • 2. 数据结构基本概念 (2)
  • 鸿蒙5.0+ 多协议设备发现与分布式软总线技术实践
  • STM32F407寄存器操作(多通道单ADC+DMA)
  • 基于React和TypeScript的金融市场模拟器开发与模式分析
  • 剑指offer13_剪绳子
  • reverse_ssh 建立反向 SSH 连接指南 混淆AV [好东西哟]
  • vue+elementUi+axios实现分页(MyBatis、Servlet)
  • WebBuilder数据库:企业数据管理的能力引擎
  • QtWidgets,QtCore,QtGui
  • lvs-keepalived高可用群集
  • 【Elasticsearch】suggest
  • 高速收发器
  • webpack的安装及其后序部分
  • 如何利用自动生成文档工具打造出色的技术文档
  • 读《Go语言圣经记录》(二):深入理解Go语言的程序结构
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.7 R语言解题
  • nacos Sentinel zipkin docker运行
  • OpenCv高阶(二十)——dlib脸部轮廓绘制
  • pikachu靶场通关笔记08 XSS关卡04-DOM型XSS
  • python集成inotify-rsync实现跨服务器文件同步
  • 005 ElasticSearch 许可证过期问题