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

【入门|Docker】基础知识扫盲:什么是 Docker?

文章目录

  • 基础知识扫盲:什么是 Docker?
    • Docker 是什么?
    • Docker 核心组件
    • Docker 与虚拟机的区别
    • Docker 在现代开发中的核心角色
    • Docker 的局限性

基础知识扫盲:什么是 Docker?

最近打算开始系统性地学习与云计算相关的技术。提到云计算,我立刻能够想到的两个关键技术是 Docker 和 Kubernetes,目前各个企业在招聘需求中也通常会将「掌握 Docker 与 Kubernetes 等云原生相关技术」作为加分项。

Kubernetes 与我们普通开发者的距离比较远,它是一个自动化的容器编排平台,用于支持容器化应用的自动部署、健康状况检查以及动态扩缩容,从描述上来说它显然是一项用在大型项目中的技术。但是 Docker 与 Kubernetes 不同,在后端开发的学习过程中,我们有大量的机会接触 Docker,比如我们可以通过 Docker 快速拉取一个 MySQL 数据库的 Image,并启动一个 Container 运行 MySQL 服务,只要在命令中配置好数据持久化的文件位置,就可以快速地启动一个 MySQL 服务,而无需关注操作系统以及环境依赖的细节。

尽管对于开发的学习者而言,我们有大量的机会接触 Docker,但我发现我对 Docker 这个概念本身并没有很深入了解,比如什么是 Docker Image,什么是 Docker Container,二者的区别是什么?比如如何编写 Dockerfile,Docker Compose 的作用是什么?比如 Docker 和虚拟机技术有什么关系?二者的主要区别是什么?

因此通过这个专栏,我打算深入学习一下 Docker 这项技术,现在先从最基本的概念解释开始,对 Docker 基础知识进行扫盲,欢迎交流。
在这里插入图片描述

Docker 是什么?

Docker 是开源的「容器化平台」,允许开发者将应用程序及其依赖(代码、运行时、系统工具等)打包到一个轻量级、可移植的「容器」当中。容器共享主机操作系统内核,但通过隔离机制保证「进程独立性」,从而实现“一次构建,处处运行”。

Docker 核心组件

  • Docker Image:只读模版,定义容器的初始化状态(如 Ubuntu + Nginx + 你的业务代码);
  • Docker Container:Docker Image 的运行实例,包含一个可写层,进程结束后容器终止(但 Image 仍然保留)。需要注意的是,一个 Image 可以同时有多个 Container,甚至可以通过组件实现多个 Container 所提供服务的负载均衡;
  • Dockerfile:描述如何构建一个 Docker Image;
  • Docker Hub:公共镜像仓库,提供官方(如 MySQL)和社区镜像,通过 docker pull 命令可以从 Docker Hub 拉取镜像。

Docker 与虚拟机的区别

特性Docker 容器虚拟机
虚拟化层级进程级虚拟化(共享 Host 的 OS 内核)硬件级虚拟化
启动速度秒级分钟级
资源占用极低(MB 级别)高(GB 级别,因为需要完整 OS)
隔离性进程级隔离(Namespace + Cgroups)硬件级隔离(独立 OS 内核,安全性更高,因此 Kubernetes 集群的工作节点也运行在真实的物理主机或虚拟机上)
适用场景微服务、CI/CD、云原生强隔离需求(如多租户、传统应用)

Docker 在现代开发中的核心角色

解决“环境一致性”问题
在开发的学习阶段,Docker 的这一特性的优势就已经非常明显了,比如我希望在本地构建一个 RocketMQ 服务,我可以直接从 Docker 拉取相关的镜像,做好持久化,即可搭建起这一项服务。具体来说:

  • 通过镜像确保环境完全一致;
  • 跨团队协作:新成员只需要docker-compose up即可复现完整开发环境。

微服务架构基石
每个微服务都可以进行容器化,之后通过 Docker 运行:

  • 快速部署:单个服务更新无需重启整个应用;
  • 资源隔离:避免服务间依赖冲突。

DevOps 与 CI/CD 的核心工具

  • 代码提交到 Github Repo 之后自动构建镜像;
  • 镜像推送到 Repo 后,Kubernetes 可以自动拉取并滚动更新。

看起来上述的两项特性确实非常适用于真实的开发与部署环境。

云原生生态的关键
Docker 可与 Kubernetes、Service Mesh、Serveless 等技术结合,构成了现代云原生架构的基石。

Docker 的局限性

  • 安全性:容器内核级共享,隔离性弱于 VM 的硬件级隔离;
  • Windows/macOS:依赖虚拟机层;
  • 持久化存储:需显式配置 Volume 或绑定挂载,才能完成 Docker 服务的持久化。
http://www.lryc.cn/news/2380393.html

相关文章:

  • 如何利用 Java 爬虫获得某书笔记详情:实战指南
  • 【MYSQL】基本查询,表的增删查改
  • 在嵌入式系统中, 一般链路层断开多久,断开TCP为好
  • Android Studio 日志系统详解
  • 基于matlab的D2D 功率控制仿真
  • 互联网大厂Java面试:从基础到复杂场景的技术挑战
  • 使用Redission来实现布隆过滤器
  • 为 Windows 和 Ubuntu 中设定代理服务器的详细方法
  • Feign异步模式丢失上下文问题
  • OpenCV阈值处理完全指南:从基础到高级应用
  • 【AWS入门】Amazon SageMaker简介
  • ArcGIS Pro 3.4 二次开发 - 内容
  • 如何在 MongoDB 中设计文档结构?与关系型数据库的表结构设计有何不同?
  • MYSQL 故障排查与生产环境优化
  • 解决使用@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss“, timezone = “GMT+8“)时区转换无效的问题
  • 计算机网络概要
  • Word压缩解决方案
  • Spring Boot开发—— 整合Lucene构建轻量级毫秒级响应的全文检索引擎
  • TDengine 2025年产品路线图
  • vue3中element-plus修改el-tooltip的宽度
  • Ubuntu服务器部署多语言项目(Node.js/Python)方式实践
  • 计算机网络 - 2.基础协议
  • Kafka消息路由分区机制深度解析:架构设计与实现原理
  • 机器学习中采样哪些事
  • 初识css,css语法怎样学好css以及常见问题与避坑
  • MySQL如何快速删除数据库中所有表数据
  • 计算机视觉与深度学习 | Python实现ARIMA-LSTM时间序列预测(完整源码和数据)
  • Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)
  • vue2.0 组件生命周期
  • 从零开始创建一个 Next.js 项目并实现一个 TodoList 示例