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

相关推荐
眼镜哥(with glasses)27 分钟前
0527漏洞原理:XSS笔记
运维·笔记·自动化
杏仁海棠花饼30 分钟前
杏仁海棠花饼的学习日记第十四天CSS
前端·css·学习
Yurko131 小时前
【C语言】函数指针及其应用
c语言·开发语言·学习
明月清了个风1 小时前
数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP
笔记·学习·动态规划
萌新小码农‍1 小时前
Spring框架学习day3--Spring数据访问层管理(IOC)
java·学习·spring
qq_336411752 小时前
【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用
android·笔记·kotlin
woho7788992 小时前
伊吖学C笔记(4、循环、自定义函数、二级菜单)
c语言·开发语言·笔记
mqiqe3 小时前
vue发版html 生成打包到docker镜像进行发版
vue.js·docker·html
foundbug9994 小时前
docker运行centos提示Operation not permitted
docker·容器·centos
hu55667984 小时前
Astra学习之-如何修改Header-logo和favicon图标
学习·astra