Docker基础教程 - 1 Docker简介

更好的阅读体验:点这里 ( www.doubibiji.com

1 Docker简介

Docker是一个强大的容器化平台,让你能够更轻松地构建、部署和运行应用程序。

下面我们来学习 Docker。


1.1 Docker是什么

1 现在遇到的问题

  • 每次部署一台服务器,需要安装各种依赖,配置各种环境,十分麻烦;
  • 应用程序在我的电脑上运行完全没有问题,你说在你的电脑上不行,环境或配置不同导致的各种问题;
  • 由于开发、测试和生产环境配置不一致,导致在生产环境中出现了在开发环境中未曾出现的bug;
  • 一台服务器,硬件大部分时间处于闲置状态,资源被浪费;
  • 等等…

2 虚拟机技术

使用虚拟机,我们可以使用同一个镜像文件,创建多个虚拟机,多个虚拟机的环境和配置是一模一样的,这样就不会存在多个虚拟机环境不一样的问题了。

3 Docker是怎么解决的

Docker 和虚拟机的思路是类似的,Docker 将应用程序及其依赖项打包成镜像,镜像包含了应用程序所需的所有内容,包括代码、运行时环境、系统工具、库和依赖项。开发者可以在本地构建镜像,并将其部署到任何地方,无需担心环境差异导致的问题。

虚拟机技术将镜像运行为一个个独立的虚拟机,Docker 引擎将镜像运行成一个个的容器,每个容器也是相互隔离,互不影响,确保了应用程序的安全性和稳定性。

总的来说,Docker通过其容器化技术,将应用程序和运行它所需要的环境、依赖等打包成镜像,这样就没有环境问题了。

举个栗子:

我们可以直接下载 Redis 镜像,一条语句将镜像运行起来,就可以直接使用了,不需要复杂的安装。我们的项目需要 Redis、MySql、JDK、RabbitMQ,我们可以直接将项目、Redis、Mysql、JDK、RabbitMQ 所有的这些打包成一个镜像,部署在各个机器上,就不需要一个个服务器安装环境了,听着是多么的顺耳。

4 Docker与虚拟机技术的不同

  1. 虚拟化层次
  • 虚拟机技术: 使用Hypervisor(如VMware、VirtualBox等)在物理服务器上创建多个完整的虚拟机。每个虚拟机都包含了自己的操作系统、内核和用户空间,相互独立。
  • Docker: 利用宿主机的操作系统内核,并在其之上运行容器。容器与宿主机共享同一个操作系统内核,但各自拥有自己的用户空间。这使得容器更为轻量级。
  1. 资源利用方式
  • 虚拟机技术: 每个虚拟机需要独立的操作系统,因此较为笨重,占用更多资源。多个虚拟机在同一物理机上运行时,会占用更多的内存和硬盘空间,随随便便20、30G的占用空间。
  • Docker: 容器共享宿主机的操作系统,不需要额外的操作系统虚拟化,因此更为轻量级。它们利用相同的内核和资源,节省了资源,并允许更多容器在同一台机器上运行。
  1. 启动时间和性能
  • 虚拟机技术: 虚拟机启动需要较长时间,因为需要启动完整的操作系统。
  • Docker: 容器启动速度更快,因为它们不需要启动完整的操作系统,只需启动应用及其依赖项即可。
  1. 环境隔离
  • 虚拟机技术: 虚拟机提供了完全隔离的环境,每个虚拟机都是相对独立的。
  • Docker: 容器也提供了良好的隔离性,但与虚拟机相比,容器之间的隔离度略低。

总体来说,Docker相对于传统虚拟机技术更为轻量级、启动更快、资源利用更高效,因为它利用了宿主机的操作系统内核,并通过容器实现了更好的资源共享和隔离。使得应用程序能够更便捷、高效、一致地部署和运行,解决了环境一致性、快速部署、资源利用率、版本控制、隔离性等多个方面的问题。

1.2 Docker 三要素

在学习操作 Docker 之前,先介绍一下 Docker 中的基础概念。

  • 镜像
  • 容器
  • 仓库

先用一句话解释:我们从仓库中下载镜像,然后运行镜像成为容器,一个镜像可以运行多次形成多个容器实例。


1 镜像(image)

镜像是一个静态的、只读的文件,其中包含了应用程序运行所需的所有内容,如代码、运行时环境、系统工具、库和依赖项。它是一个模板,用来创建容器。

使用一个镜像可以创建多个容器。所以用面向对象的方式来比喻的话,镜像就是类,容器就是使用类创建的一个一个实例。


2 容器(container)

容器是镜像的运行时实例,相当于面向对象中的一个个的对象实例。

当你运行一个镜像时,Docker会创建一个容器。它提供了一个隔离的环境,让应用程序可以在其中运行。

所以容器可以被理解为一个隔离的、独立的运行时环境,其中包含了应用程序及其运行所需的一切。


3 仓库(repository)

仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库。

Docker 公司提供了公共的镜像仓库 https://hub.docker.com,里面提供了大量的镜像可以给我们给我们使用,我们也可以基于别人的镜像来创建我们自己的镜像。但是国内访问 dockerhub 速度比较慢,一般使用阿里云或网易云。


在使用 docker run 运行镜像的时候,docker 会检查本机是否存在镜像,如果存在就使用这个镜像运行为一个容器,而如果不存在,就会去 Docker Hub上下载,下载完成,再运行这个镜像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们一般不会直接运行一个本机不存在的镜像,我们一般会先搜索镜像,找到镜像后,将镜像下载下来,然后再通过镜像创建容器运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/270932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI 大声朗读出来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Kubernetes-3

Kubernetes学习第3天 Kubernetes-31、查看实时的cpu和内存消耗1.1、kubectl top node 2、卷的使用2.1、什么是卷?1. 解决数据持久性问题2. Kubernetes 中的卷抽象概念3. 共享数据示例4. Kubernetes 中的卷使用5. 不同类型的卷6. 灵活、可靠的数据管理 2.2、联想到do…

[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

在 SpringBoot3 中使用 Mybatis-Plus 报错

在 SpringBoot3 中使用 Mybatis-Plus 报错 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required Caused by: java.lang.IllegalArgumentException: Property sqlSessionFactory or sqlSessionTemplate are requiredat org.springframework.util.Assert.no…

Android随手记

activity的生命周期 创建时 onCreate() - onStart() - onResume() - onPause() - onStop() - onDestroy() 切换时 a切换到b a.onCreate() - a.onStart() - a.onResume - a.onPause - b.onCreate() - b.onStart() - b.onResume() - a.onStop() b切换回a b.onPause() - a.onR…

C++ 路径问题

目录 例1 例2 例3 例4 例5 例6 例1 62. 不同路径 1.初始化 2.当前位置的条数,就是上面位置的条数 ,加上其左边位置的条数,dp[i][j] dp[i - 1][j] dp[i][j - 1]; 参考代码 class Solution { public:int uniquePaths(int m, int n) …

蓝桥杯——123

123 二分等差数列求和前缀和数组 题目分析 连续一段的和我们想到了前缀和,但是这里的l和r的范围为1e12,明显不能用O(n)的时间复杂度去求前缀和。那么我们开始观察序列的特点,可以按照等差数列对序列进行分块。如上图,在求前10个…

Python爬虫实战(基础篇)—13获取《人民网》【最新】【国内】【国际】写入Word(附完整代码)

文章目录 专栏导读背景测试代码分析请求网址请求参数代码测试数据分析利用lxml+xpath进一步分析将获取链接再获取文章内容测试代码写入word完整代码总结专栏导读 🔥🔥本文已收录于《Python基础篇爬虫》 🉑🉑本专栏专门针对于有爬虫基础准备的一套基础教学,轻松掌握Py…

idea Gradle 控制台中文乱码

如下图所示,idea 中的 Gradle 控制台中文乱码: 解决方法,如下图所示: 注意:如果你的 idea 使用 crack 等方式破解了,那么你可能需要在文件 crack-2023\jetbra\vmoptions\idea.vmoptions 中进行配置&#xf…

Qt for WebAssembly : Application exit (SharedArrayBuffer is not defined)

用Qt开发 WebAssembly,放到nginx里面,用127.0.0.1访问没问题,用局域网IP访问就提示如下: 总结了以下两种解决办法: ①:配置 nginx http 头 [ 支持:WebAssembly Qt (single-threaded) ] ②&#…

生成商品条码

php生成商品条码,编码格式为:EAN13 下载第三方包:composer require codeitnowin/barcode 生成条码代码: $filename \Str::random(40) . .png;$barcode new BarcodeGenerator();$barcode->setText($barCode);$barcode->s…

Vue3.0 vue.js.devtools无法显示Pinia调试工具

之前的配置方式: app.use(createPinia()) app.mount(#app) 更新配置方式: app.use(createPinia()).mount("#app") 设置之后即可显示调试工具

吴恩达deeplearning.ai:数据增强数据合成迁移学习

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 让我们看看为你的程序添加数据的技巧。在构建神经网络的时候,我们总是想要更多的数据,但是获取更多的数据往往是十分昂贵又缓慢的。相反地,添加数据的另一…

Android耗电分析之Battery Historian工具使用

Battery-Historian是谷歌推出的一款专门分析Bugreport的工具,是谷歌在2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具,是一款对于分析手机状态,历史运行情况很好的可视化分析工具。 …

Flink实时数仓之用户埋点系统(一)

需求分析及框架选型 需求分析数据采集用户行为采集业务数据采集 行为日志分析用户行为日志页面日志启动日志APP在线日志 业务数据分析用户Insert数据用户Update数据 技术选型Nginx配置Flume配置MaxWellHadoopFlink架构图 需求分析 数据采集 用户行为采集 行为数据&#xff1…

IR 召回测试数据集——MS MARCO

如何评估召回系统的好坏?如何评估检索系统是否有提升?在任何人面前,空口无凭。 我们需要一把尺子来衡量。我们需要一个高质量的测试数据集合。每次都在相同的测试数据集上,进行评测。本篇文章介绍一个高质量的应为的测试数据集——…

蓝桥杯集训·每日一题2024 (差分)

前言&#xff1a; 差分笔记以前就做了&#xff0c;在这我就不再写一遍了&#xff0c;直接上例题。 例题&#xff1a; #include<bits/stdc.h> using namespace std; int a[10009],b[100009]; int main(){int n,ans10,ans20;cin>>n;for(int i1;i<n;i){cin>>…

C++复习笔记——泛型编程模板

01 模板 模板就是建立通用的模具&#xff0c;大大提高复用性&#xff1b; 02 函数模板 C另一种编程思想称为 泛型编程 &#xff0c;主要利用的技术就是模板 C 提供两种模板机制:函数模板和类模板 函数模板语法 函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函…

透视和仿射变换的区别

仿射变换矩阵通常是2x3的矩阵。 三个特点&#xff1a; 直线依然是直线平行线依然平行 [ x ′ y ′ 1 ] [ a 11 a 12 b 1 a 21 a 22 b 2 0 0 1 ] [ x y 1 ] x ′ a 11 ∗ x a 12 ∗ y b 1 y ′ a 21 ∗ x a 22 ∗ y b 2 \begin{gathered} \begin{bmatrix}x\\y\\1\end{b…

Linux Ubuntu系统安装MySQL并实现公网连接本地数据库【内网穿透】

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…