从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

  • Linux

    • Linux 命令学习

    • 文本处理三剑客

    • Linux安全

    • Docker

      • 尚硅谷Docker实战教程

        • 教程简介
        • Docker 简介
          • 在 Docker 出现之前
          • Docker 是什么
          • 容器与虚拟机比较
          • 使用 Docker 的好处
          • 哪些企业在用
          • 最后
        • Docker 安装
        • Docker 配置国内镜像源
        • Docker 常用命令
        • 镜像的分层概念
        • 发布镜像
        • Docker 私有库
        • 容器数据卷
        • Docker 常用软件安装
        • MySQL 主从复制
        • 分布式存储之哈希取余算法
        • 3 主 3 从Redis集群搭建与扩缩容
        • Dockerfile
        • 虚悬镜像
        • Docker 微服务实战
        • Docker 网络
        • Docker-compose 容器编排
        • Portainer
        • Docker 重量级监控
        • Docker 系列完结
        • 记一次启动容器失败
  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • Linux
  • Docker
  • 尚硅谷Docker实战教程
2023-09-18
目录

Docker 简介

# 10.Docker 简介

学习 Docker 之前,先了解 Docker 为什么出现,解决了什么痛点;然后简单介绍 Docker 是什么。

‍‍

# 在 Docker 出现之前

假如你在自己的笔记本上,开发一个商城项目,那么开发环境就是你自己的笔记本,并且该开发环境具有特定的配置;而其他同事也有自己的本地开发环境,并且配置一般是互不相同的(比如使用的 IDE 不同,项目位置不同,端口号和数据库连接信息不同... 等等)

除此之外,在测试环境和生产环境中,配置也是不同的,那么在部署过程中,经常会出现版本和配置问题(俗称环境问题)。

为了解决环境问题,容器技术出现了(例如 Docker)。Docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。

环境配置是相当麻烦的,例如安装 Java,Tomcat、Nginx 等;换一台机器,又要重新安装一遍,费力费时。那能不能从根本上解决问题:软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作,在其他机器上不行”的问题。

除此之外,还能解决扩容和缩容的问题:想要增加一台服务器,那么只需在上面用 Docker 复制一份开发环境即可,非常方便。

Docker 还能解决跨平台的问题,比如一个项目是在 Windows 下开发的,那么使用 Docker,项目也能在 Linux 和 Mac OS 下运行。

Docker 的出现使得过去「程序即应用」的观念被打破。透过镜像(images)将项目,运行项目所需要的系统环境等信息,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

镜像就好比一个打包好的环境,里面包含了源代码 + 配置 + 环境 + 版本。

比如,使用虚拟机安装 Centos 的时候,就用到了 Centos 镜像,直接安装该镜像,安装好后就可以获得一个 Centos 服务器。 ‍ 注意,容器技术的出现,使得开发也要慢慢的兼顾运维的一些工作。 ‍

# Docker 是什么

Docker 是基于 Go 语言实现的云开源项目。

Docker 的主要目标是“Build, Ship and Run Any App, Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的 APP(可以是一个 WEB 应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

​​

​​

​

Docker 是在 Linux 容器技术基础上发展过来的。将应用打成镜像,通过镜像成为运行在 Docker 容器上面的实例,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

一句话:Docker 是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

Docker 的图标是一个鲸鱼,上面有很多的集装箱。Docker 借鉴了标准集装箱的概念,标准集装箱将货物运往世界各地,Docker 将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而 Docker 运输软件

​​

# 容器与虚拟机比较

‍

# 传统虚拟机技术

虚拟机(virtual machine)也是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如在 Windows10 系统里面运行 Linux 系统 CentOS。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。

传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox 和 VMWare 等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。示意图:

​​ ‍

由于模拟出了硬件以及操作系统,传统虚拟机技术有如下缺点:

  1. 资源占用多
  2. 冗余步骤多
  3. 启动慢

对于开发人员来说,重点是复制应用,而不是模拟各种硬件和操作系统。

# 容器虚拟化技术

由于前面虚拟机存在某些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量,并保证部署在任何环境中的软件都能始终如一地运行。示意图:

​​

# 对比

  • 传统虚拟机技术在硬件层面实现虚拟化。虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
  • 容器虚拟化技术:在操作系统层面上实现虚拟化,直接复用本地主机的操作系统。容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便,启动速度快,占用体积小。
  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。 ‍ 总结下为什么 Docker 会比 VM 虚拟机快:

(1)Docker 有着比虚拟机更少的抽象层:Docker 不需要 Hypervisor(虚拟机)实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU、内存利用率上 Docker 将会在效率上有明显优势。

(2)Docker 利用的是宿主机的内核,而不需要加载操作系统 OS 内核

当新建一个容器时,Docker 不需要和虚拟机一样重新加载一个操作系统内核,进而避免引寻、加载操作系统内核返回等比较费时费资源的过程。当新建一个虚拟机时,虚拟机软件需要加载 OS,过程是分钟级别的。而 Docker 由于直接利用宿主机的操作系统,省略了加载 OS 过程,因此新建一个 Docker 容器只需要几秒钟。

​​ ‍

​

Docker 容器 虚拟机(VM)
操作系统 与宿主机共享 OS 宿主机 OS 上运行虚拟机 OS
存储大小 镜像小,便于存储与传输 镜像庞大(vmdk,vdi 等)
运行性能 几乎无额外性能损失 操作系统额外的 CPU、内存消耗
移植性 轻便,灵活,适应于 Linux 笨重,与虚拟化技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者
部署速度 快速,秒级 较慢,分钟级

‍

# 使用 Docker 的好处

这里做个小结:

  • 更快速的应用交付和部署:传统的应用开发完成后,需提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker 化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间
  • 更便捷的升级和扩缩容:随着微服务架构和 Docker 的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个 Docker 容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。
  • 更简单的系统运维:应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的 BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复
  • 更高效的计算资源利用:Docker 是内核级虚拟化,不像传统的虚拟化技术一样需要额外的 Hypervisor 支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的 CPU 和内存的利用率(也变相节约了服务器,省钱)。 ‍

# 哪些企业在用

Docker 是世界级流行的,国内也有很多大厂在用。

新浪微博:

​​

美团:

​​

# 最后

讲了不少基本理论,可能稍微有点枯燥;对于理论,读者们理解为主,不要求死记硬背。

下一篇就开始讲实战了,先从安装开始。 ‍

上次更新: 2025/6/3 17:50:46
教程简介
Docker 安装

← 教程简介 Docker 安装→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式