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 仓库成为了团队协作的枢纽,极大地提高了开发、测试和部署的效率和一致性。

相关推荐
龙文浩_32 分钟前
Attention Mechanism: From Theory to Code
人工智能·深度学习·神经网络·学习·自然语言处理
守护安静星空1 小时前
esp32开发笔记-工程搭建
笔记·单片机·嵌入式硬件·物联网·visual studio code
ljt27249606611 小时前
Compose笔记(七十七)--视频录制
笔记·android jetpack
爱上好庆祝2 小时前
svg图片
前端·css·学习·html·css3
嵌入式小企鹅3 小时前
蓝牙学习系列(八):BLE L2CAP 协议详解
网络·学习·蓝牙·ble·协议栈·l2cap
handsomestWei3 小时前
Docker引擎API接入配置
运维·http·docker·容器·api
周周不一样3 小时前
Andorid基础笔记2-jar&反射
笔记·pycharm·jar
jiayong234 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
智者知已应修善业4 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
格鸰爱童话4 小时前
向AI学习项目技能(五)
java·学习