一文读懂Docker:Docker介绍+镜像仓库+环境部署+性能优势,开发者的效率工具箱
本文全面介绍Docker,涵盖其与虚拟机的资源效率差异、核心架构(C/S模式)、镜像仓库(如Docker Hub)功能,以及Ubuntu安装方法。通过对比隔离性、启动速度等,阐明Docker轻量化、高效部署的优势,适合快速构建标准化应用环境。
本篇摘要
本文全面介绍Docker,涵盖其与虚拟机的资源效率差异、核心架构(C/S模式)、镜像仓库(如Docker Hub)功能,以及Ubuntu安装方法。通过对比隔离性、启动速度等,阐明Docker轻量化、高效部署的优势,适合快速构建标准化应用环境。
欢迎拜访: 点击进入博主主页
本篇主题: Docker介绍+镜像仓库+环境部署+性能优势
制作日期: 2025.09.08
隶属专栏: 点击进入所属Docker专栏
Docker介绍
简介
Docker(镜像)是LXC(模版)增强版、容器易用工具,本质是开源Go项目,目标是“一次封装,到处运行
”。早期用LXC做引擎,靠镜像技术简化容器创建,只需简单命令就能操作容器。
早期基于 LXC,成熟后自研 libcontainer,CNCF 介入后开发出工业化标准引擎 runC,新版 Docker 采用 runC。
Docker与虚拟机区别
资源占用与性能
-
磁盘占用
- 传统虚拟机:几个 GB 到几十 GB。
- Docker 容器:几十 MB 到几百 MB。
-
CPU/内存占用
- 传统虚拟机:虚拟操作系统本身占资源,需通过虚拟层调用,占用率高。
- Docker 容器:Docker 引擎轻量,直接利用硬件,资源占用少。
-
启动速度
- 传统虚拟机:从开机到运行项目,需几分钟。
- Docker 容器:从启动容器到运行项目,只需几秒。
使用与管理
-
安装管理
- 传统虚拟机:需专门运维技术。
- Docker 容器:安装、管理更简便。
-
应用部署
- 传统虚拟机:手动部署,速度慢。
- Docker 容器:体系化/自动化部署,速度快。
如:
VM:
Docker:
隔离与封装
-
隔离性
- 传统虚拟机:系统级隔离(每个虚拟机独立 OS)。
- Docker 容器:进程级隔离(共享宿主机 OS,仅隔离应用进程)。
-
封装程度
- 传统虚拟机:封装整个操作系统。
- Docker 容器:仅封装应用代码 + 依赖,更轻量。
也就是,Docker 比虚拟机更轻量、启动快、资源省,核心在于共享宿主机 OS 而非虚拟完整系统,同时通过容器化实现快速部署与隔离。
Docker 为什么比虚拟机资源利用率高,启动快?
- 抽象层与资源虚拟化:Docker 抽象层比虚拟机少,无需 Hypervisor 实现硬件资源虚拟化,运行其上的程序直接使用物理机硬件资源,在 CPU 和内存利用率上效率优势明显。
- 内核与 Guest OS:Docker 利用宿主机内核,无需 Guest OS,节省了 Guest OS 占用的资源。
- 创建速度:Docker 创建容器无需像虚拟机那样重新加载操作系统内核,避免了引导、加载内核的耗时耗资源过程。新建虚拟机需加载 Guest OS,过程以分钟计;新建 Docker 容器只需几秒钟。
Docker 和 JVM 虚拟化的区别?
- 性能:
- JVM:需占用一定CPU和内存。
- Docker容器:基本无性能损失。
- 虚拟层面:
- JVM:基于JVM虚拟机及其上层。
- Docker容器:基于操作系统,通用性强。
- 代码无关性:
- JVM:特定代码执行平台,运行时存在,仅支持特定代码且在JVM进程内。
- Docker容器:模拟整个操作系统,静态存在,支持相同平台各类应用程序。
- 主机隔离性:
- JVM:不隔离主机。
- Docker容器:通过命名空间实现隔离。
Docker版本
Docker主要分为开源免费的社区版(docker - ce,CE即Community Edition,组件源于moby、containerd等项目)和收费的企业版(docker - ee,EE即Enterprise Edition,基础组件与docker - ce相同,但附加了其他组件和功能) 。
官网:Docker官网
Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器;Docker 容器通过 Docker 镜像来创建。
解释下过程:
- Registry:就像个“Docker 镜像商店”,里面有各种现成的“软件模板”(比如 Ubuntu 系统模板、NGINX 网页服务器模板)。
- DOCKER_HOST:是你实际运行 Docker 的地方(比如你的服务器/电脑),里面有俩关键部分:
- Docker daemon:就是后台打工人,专门听你发命令、处理镜像和容器。
- Images:就是从商店拉下来的“模板”,存放在这里。
- Containers:是把模板“启动”后,正在运行的程序环境(比如用 Ubuntu 模板启动一个容器,里面就有个活的 Ubuntu 环境)。
- Client:是你在电脑上敲命令的地方(比如终端/命令行),常用命令:
docker pull
:从商店把“模板”拉到你本地。docker build
:自己做个新“模板”(比如把你写的代码打包成模板)。docker run
:用某个“模板”启动一个“活的环境”(容器)。
你敲命令就是让后台打工人去商店拉模板/自己做模板 ,再用模板启动一个能干活的环境。
Docker为什么会出现以及对应解决方案
随着云计算时代的到来,企业面临着处理海量数据、频繁变更需求、快速分发代码和共享软件、快速安装启动、回滚以及搭建不同开发环境等挑战。为了解决这些问题,Docker应运而生。
- 处理海量数据:购买大量服务器并研发对应软件来处理海量数据。
- 频繁变更需求:通过建立中心仓库(如CentOS的yum仓库和Docker的镜像仓库),让各个服务器可以快速下载和安装软件包,实现代码的快速分发和共享。
- 快速安装启动和回滚:Docker设计了镜像,将所有必要的信息和依赖打包在一起,并打上版本标签,确保在不同服务器上都能一致运行,并且可以方便地回滚到之前的版本。
- 搭建不同开发环境:Docker通过镜像来应对不同的开发环境需求,镜像中包含了运行所需的环境,类似于iPhone内置iOS、华为Mate 50内置鸿蒙,只需一条命令即可完成环境的搭建。
总之,Docker的出现是为了解决云计算时代企业在数据处理、软件开发、部署和运维等方面的诸多挑战,提供了高效、一致和可移植的解决方案。
如何在ubuntu22.04进行Docker安装
可以参考这位优质博主的这篇博客:
常见启动加载指令
1. 配置加载(让系统重新读取 Docker 相关的 systemd 配置)
sudo systemctl daemon-reload
2. 启动 Docker 服务
sudo systemctl start docker
3. 设置 Docker 开机自启
sudo systemctl enable docker
4. 查看 Docker 服务状态(确认是否启动成功、有无报错等)
sudo systemctl status docker
5. 重启 Docker 服务
如果需要对 Docker 服务进行重启(比如修改配置后重新加载、更新镜像等场景),可以使用:
sudo systemctl restart docker
什么是 镜像仓库(Docker Registry)
Docker Registry 是用来存、管、发 Docker 镜像的工具,还能做登录认证。
它下面分成一个个 “仓库(Repository)”,每个仓库用名字区分;一个仓库里可以有多个镜像,这些镜像又靠 “镜像名 + 标签(Tag)” 来区分(比如 nginx:latest
)。
如图:
- 镜像仓库(Registry):确定拉取镜像的仓库,通过 DNS 或 IP 地址标识,一个 Registry 包含多个 Repository,可分为“顶层仓库”和“用户仓库”,用户仓库名称格式为“用户名/仓库名”,每个仓库包含多个对应镜像的 Tag。
- Repository:由某特定 docker 镜像的所有迭代版本组成。
- 镜像名称 + 标签:如 nginx:latest。
- 认证能力:提供用户注册、登录、登出功能。
- 索引:提供镜像索引信息以方便检索。
- 容器镜像组成:包含元数据(由 dockerfile 构建的描述文件,记录层数、每层内容、checksum 等)和存储数据(真正占空间的 blob,包含最终可执行文件)。
这里的认证能力就比如进行登录 Docker:
就拿NGINX来说,进行搜索,然后就能看到对应的关于它的仓库:
然后点击对应的nginx进入到对应的仓库:
下面可以根据tag挑取对应的版本的镜像,然后copy对应的指令,在命令行运行即可。
对应参数分析:
- TAG:
latest
(最新版)。 - Digest:各架构镜像的唯一哈希值(如
70eae922314c
)。 - OS/ARCH:支持的系统架构(如
linux/amd64
、linux/arm/v5
)。 - Vulnerabilities:安全漏洞统计(数字代表不同等级漏洞数)。
- Compressed size:压缩后镜像大小(如
68.95 MB
)。 - 拉取命令:
docker pull nginx:latest
(自动匹配本地架构)。
镜像仓库工作机制剖析
以下是内容的分条概述:
镜像仓库工作机理
- 镜像仓库使用流程
- 通过
docker login
登录仓库。 - 使用
Docker pull
拉取所需镜像。 - 以
dockerfile
或commit
等方式制作镜像后,通过docker push
上传到仓库。
- 通过
- 实际研发中镜像仓库的使用
- Docker Registry 中的镜像一般由开发人员制作,之后推送到“公共”或“私有”Registry 中保存,供其他人员使用(如部署到生产环境)。
- 镜像仓库的拉取机制
- 启动容器时,
docker daemon
先尝试从本地获取相关镜像;若本地不存在,则从 Registry 中下载并保存到本地。
- 启动容器时,
如图:
- 开发者从公有仓库拉取镜像、向私有仓库推送/拉取镜像,各环境从私有仓库拉取镜像完成部署。
常用的镜像仓库之Docker Hub
Docker Hub 是什么
Docker Hub 是 Docker 提供的托管存储库服务,核心用途是让用户查找容器映像并与团队共享。
Docker Hub 主要功能
- 私有仓库与镜像发布:个人用户可注册私有仓库,在其中发布自己构建的容器镜像,方便管理与分享内部镜像资源。
- 镜像检索:提供强大的镜像搜索功能,用户能快速找到满足需求的公开镜像,节省自行构建或寻找合适镜像的时间。
- 海量官方与认证镜像:汇聚了 Docker 官方以及众多经过认证组织提供的丰富镜像,涵盖各类常用软件、开发框架等,开箱即用性强。
- 自动构建镜像并推送:支持与 GitHub、Bitbucket 等代码托管平台集成,当代码仓库有更新时,可自动构建对应的容器镜像,并推送到 Docker Hub 存储库,实现持续集成与交付流程的自动化。
- Webhook 支持:作为一种基于 HTTP 的回调机制,当 Docker Hub 上发生特定事件(如镜像被推送、仓库有更新等)时,服务器能自动将相关有效负载发送到用户预先配置的 webhook URL,便于与其他系统或工具联动,实现自动化通知、触发后续任务等功能。
Docker Hub 功能浏览 - 镜像搜索
在 Docker Hub 平台上,用户可以通过镜像搜索功能,依据关键词、镜像标签、作者等信息,精准定位到想要的容器镜像,快速获取所需资源来构建、部署容器化应用。
对应网址与使用方法,上面已经讲解过了。
本篇小结
本篇系统梳理了Docker的核心知识,从与虚拟机的区别、资源效率优势,到安装步骤、镜像仓库(如Docker Hub)的使用,还对比了JVM和不同版本特性。理解Docker如何通过轻量化容器技术简化部署。
更多推荐
所有评论(0)