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

第一章 初识Docker

 目录

一、Docker概述

1.1. Docker是什么

1.2. Docker 出现的主要背景

二、Docker与传统虚拟化技术对比

三、Docker的主要组成部分

四、Docker安装

五、Docker命令

六、需充分学习掌握的Docker其他相关知识点


Docker官方地址:

Docker: Accelerated Container Application Development

Docker仓库地址:

https://hub.docker.com

一、Docker概述

1.1. Docker是什么

‌‌        Docker是由 Docker公司于2013年推出的开源项目,其技术基础主要来自于 Linux 容器(LXC)等技术,是一个开源的应用容器引擎,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,并在不同的环境中进行部署和运行。‌ Docker的核心理念是“一次构建,随处运行”,提供了一种轻量级、可移植、可扩展的解决方案,使得应用程序能够在不同的操作系统和云平台上高效运行。

        更通俗地讲,我们可以把Docker理解为一个JavaWeb项目的集装箱,它把我们已安装部署好的Web应用服务程序、关系/非关系型数据库、Tomcat服务器、Nacos配置中心、MQ等等的一个完整的生产/开发/测试环境统一打包构建好后(打包成镜像),随处运行在各个Linux环境下。

1.2. Docker 出现的主要背景

  1. 虚拟化技术的发展:早期服务器虚拟化技术如 KVM、Xen 等用于提供硬件级别的隔离,但在资源管理和隔离方面存在不足。
  2. 容器化技术的发展:容器化技术如 LXC(Linux Container),它提供了轻量级的隔离,能够运行多个隔离的应用,并且共享同一套操作系统。
  3. 自动化部署与分发:Docker 容器可以打包应用及其依赖,实现快速部署和分发。
  4. 资源隔离与利用:Docker 容器之间共享宿主机的内核,减少了资源的使用,提高了效率。
  5. DevOps 流程:Docker 容器使得持续集成和持续部署(CI/CD)流程更为高效和标准化。
  6. Docker 出现的背景是传统虚拟化技术与容器化技术的结合,以及对自动化部署、分发、和操作的需求推动的产物。

二、Docker与传统虚拟化技术对比

Docker 和传统虚拟化技术(如 KVM、VMware、Hyper-V 等)的主要区别在于它们的架构和应用场景。

1. 架构差异

传统虚拟化技术通常在宿主机上安装一个虚拟机管理程序,然后在其上创建完整的虚拟机。每个虚拟机都包含一个完整的操作系统和必要的依赖。

Docker 利用 Linux 内核的特性,如 cgroups 和 namespaces 来隔离进程,并且共享宿主机的操作系统内核。它使用容器引擎(如 Docker 引擎)来管理容器的生命周期。

2. 资源使用

传统虚拟化通常需要更多资源来运行一个虚拟机,包括额外的开销和额外的磁盘空间。

Docker 容器则更加轻量级,它们共享宿主机的操作系统内核,并且只需要几 MB 的额外空间来启动。

3. 快速部署

使用虚拟机,通常需要数分钟时间来准备一个新的虚拟机实例,尤其是在从零开始创建一个新的虚拟机镜像时。

Docker 容器可以在毫秒级启动多个相同的实例,因为它们共享操作系统内核和库文件。

4. 更新迭代

虚拟机通常需要一个完整的系统镜像来进行升级。

Docker 容器可以通过更新其镜像来快速迭代,因为容器镜像可以被拆分成多个层,只有变更的层会被传输或更新。

5. 隔离级别

传统虚拟化提供了更为严格的隔离,一个虚拟机出现问题不会影响其他虚拟机或宿主机。

Docker 容器提供的隔离级别较低,一个容器中的应用可以影响同一宿主机上的其他容器。

6. 兼容性和迁移

虚拟机通常与宿主机的硬件和操作系统无关,因此可以在不同的宿主机之间迁移。

Docker 容器则通常与其宿主机紧密耦合,尽管可以使用 Dockerfile 和容器镜像来跨宿主机迁移应用。

7. 成本

虚拟化通常需要更多的硬件资源和许可证成本。

Docker 对硬件要求较低,且使用开源软件,可以大幅节约成本。

总结:Docker 提供了轻量级的隔离,快速启动,通过使用Docker,开发者可以更加方便地持续构建、部署和管理应用程序,提高开发和运维效率,实现应用程序的快速交付和可移植性,非常适合现代应用的部署和管理。此外,Docker还提供了丰富的网络和存储功能,使得容器可以在不同的网络中进行通信,并持久化存储数据。而传统虚拟化技术提供了更为严格的隔离和更好的兼容性,适合需要更高安全性的关键任务应用。

三、Docker的主要组成部分

  1. ‌镜像(Image)‌:镜像是一个只读的模板,包含了运行应用程序所需的所有文件系统、库和依赖项。镜像可以看作是一个软件包,包含了应用程序的代码、运行环境和配置信息。通过使用Docker镜像,开发者可以快速、可靠地构建和部署应用程序。比如Linux镜像、MySQL镜像、Tomcat镜像。

  2. 容器(Container)‌:容器是镜像的运行实例,是一个独立、可执行的软件包,包含了运行应用程序所需的所有内容,包括代码、运行时环境、系统工具、系统库等。容器可以被快速启动、停止、删除和迁移,提供了一种轻量级、隔离的运行环境。一个被运行的Linux的Docker镜像,进入其内部(即运行的容器),我们可以认为它是一个精简的Linux系统。

  3. ‌仓库(Repository)‌:仓库是用来存储和管理Docker镜像的地方。Docker仓库可以分为公共仓库和私有仓库。公共仓库如Docker Hub提供了大量的官方和社区维护的镜像供用户下载使用。私有仓库则用于存储和分享自己的镜像,适用于企业内部的应用程序部署和管理。

四、Docker安装

翻看往期章节,了解一下内容:

1. 查看Docker的安装

2. 配置镜像仓库地址

3. 拉取/查看本地镜像

4. 启动运行镜像

文章地址如下:

Linux通过yum安装Docker-CSDN博客

五、Docker命令

  • 镜像命令
  • 容器命令
  • 操作命令

Docker常用命令图

具体的Docker命令我会在后续章节一一讲解说明。 

六、需充分学习掌握的Docker其他相关知识点

下面这些内容会在后续章节进行一一讲解,以此来巩固对Docker的全面认知和实操,运用于实际工作中。

1. 容器数据卷

2. DockerFile

3. Docker网络原理

4. Docker Compose

5. Docker Swarm

6. CI\CD Jenkins

Docker底层的结构图

相关文章:

  • QMT如何获取股票基本信息?如上市时间、退市时间、代码、名称、是否是ST等。QMT量化软件支持!
  • 408算法题leetcode--第15天
  • 着色器ShaderMask
  • Python 课程18-SQLAlchemy
  • C++ bitset(位图)的模拟实现
  • RabbitMQ 快速入门
  • 从静态多态、动态多态到虚函数表、虚函数指针
  • 基于JAVA+SpringBoot+Vue的疫苗发布和接种预约系统
  • 认知世界的经济学读书笔记
  • slam典型应用手搓
  • 暴雨讲堂:算力高速互联催化超节点开启AI新篇章
  • Python知识点:如何使用Python进行无人机数据处理
  • Gstreamer中,使用mp4或者flv作为视频源去推流RTP等视频流时,需要先解码在编码才能正常
  • uniapp view设置当前view之外的点击事件
  • 类与对象—python
  • 时间复杂度分析经典问题——最大子序列和
  • 【RocksDB】TransactionDB源码分析
  • C++类的相互关联
  • JavaScript 一些 DOM 的知识点
  • JS实现简单的MVC模式开发小游戏
  • php中curl和soap方式请求服务超时问题
  • quasar-framework cnodejs社区
  • spring security oauth2 password授权模式
  • 计算机常识 - 收藏集 - 掘金
  • 看域名解析域名安全对SEO的影响
  • 离散点最小(凸)包围边界查找
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一份游戏开发学习路线
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在Docker Swarm上部署Apache Storm:第1部分
  • linux 淘宝开源监控工具tsar
  • puppet连载22:define用法
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (~_~)
  • (1)bark-ml
  • (1)SpringCloud 整合Python
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Git) gitignore基础使用
  • (k8s)kubernetes集群基于Containerd部署
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (不用互三)AI绘画工具应该如何选择
  • (第30天)二叉树阶段总结
  • (二)linux使用docker容器运行mysql
  • (附源码)php投票系统 毕业设计 121500
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四)模仿学习-完成后台管理页面查询
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转载)深入super,看Python如何解决钻石继承难题
  • (自用)gtest单元测试
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • *Django中的Ajax 纯js的书写样式1
  • .Mobi域名介绍