【docker】了解什么是Docker

devtools/2024/10/18 15:02:49/

一、前言

   最近,在学习如何部署项目的时候,老是出错误,然后朋友推荐了去学一下docker,然后自己就去学了【尚硅谷】的关于docker的教程视频,学完之后,感觉docker真的强,可以把我们做好的app的进行跨平台、快速的运行、构建以及分享出去。学会了docker在掌握一项新的容器虚拟化技术的同时又方便了我们项目的一次分装,跨平台运行。所以我准备将自己学习的内容以博客的形式记录,方便后期的学习与回顾,当然大家也在小破站可以去看【尚硅谷】相应的视频讲解!

二、什么是Docker

这里借用docker官网(Docker: Accelerated Container Application Development)的一句话来解释:Docker就是用来加速我们应用的构建、分享以及运行的容器虚拟化技术!

PS:现在的docker官网已经不能直接访问了,作为一个IT人员,要懂得自己施加一些“魔法”哦

三、Docker的工作原理

这里就借用【尚硅谷】视频里的一个插图来记录一下Docker的工作原理。

在这幅图中,有Client、Docker Host、Registry(应用市场)这三个部分,其中Docker Host(Docker 主机)表示我们的一台机器下载了我们的Docker那么这台机器就是我们的Docker主机,Docker的后台进程Daemon就会一直运行为我们服务;而Client表示一个命令行程序,可以通过命令(docker pull 、docker run等)来操作我们的Daemon;而Registry(应用市场)是Docker自己的应用市场,里面有很多的应用软件,这些应用软件被称为镜像。

Docker_hub应用市场:

1、如何Run

如上图所示,以运行redis为例,我们现在Client端执行docker pull redis命令(步骤①),此时我们的Daemon就回去应用市场找到我们的redis镜像(步骤②),将redis镜像下载到本机(步骤③),Client再执行docker run redis命令(步骤④),此时我们的Daemon就会找本地的redis镜像,如果找不到它也会自动下载(步骤⑤),找到这个镜像后就会启动它(步骤⑥),此时这个redis镜像就被启动了,我们把它叫做容器,当然我们可以启动多个容器!这就是我们如何Run的一个过程!

2、如何Build

如上图所示,我们有个构建好的软件OpenJDK,我们首先在Client端执行docker build xxx(软件名称)(步骤①),Daemon就会帮我们制造一个镜像(步骤②),然后就会生成一个OpenJDK镜像(步骤③),再在Client端执行docker push xxx(软件名称)(步骤④),此时Daemon就会将我们的OpenJDK镜像推送到我们的应用市场(步骤⑤),当OpenJDK镜像在应用市场时,其他人也就可以下载和访问我们的镜像了。

3、如何Share

其实,当我们讲解了Run、Build后,Share我们的软件,只需要熟悉docker pull xxx、docker push xxx,懂得如何在应用市场推送和下拉我们的镜像即可!

四、Docker容器化的特点

在上面的Docker的原理图中,我们会有两个比较新的词,分别是镜像容器,至于镜像其实就是软件包,将我们的软件打成了包,至于容器的话,大家可能比较陌生,为什么会有容器化这种思想呢?

1、背景

要回答这个问题,首先我们要从虚拟机(Virtual Machine,简称VM)的发展说起,VM将一台物理设备虚拟为多个逻辑设备,每个逻辑设备可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高设备的工作效率。这表明我们在虚拟化部署的时候,每部署一个虚拟机就需要配一个操作系统,才能运行应用,如果此时我们用户只是做一些简单的操作话,采用VM技术本身比较负载而且会造成资源的浪费,迁移应用程序的话,也需要迁移整个VM。所以此时急需一种轻量级的能实现应用程序之间相互独立运行的虚拟化技术!

2、Docker容器

基于以上的背景,我们的容器虚拟化技术就孕育而生,它同时兼顾了我们的轻量级隔离环境的存在,它之所以能这样是因为,它不像VM采用操作系统级的资源隔离,容器采用的是进程级的系统隔离。

它具体有以下特点:

容器属于轻量级的VM、

容器共享操作系统内核、

容器拥有自己的文件系统、CPU、内存、进程空间等

容器互相隔离

容器安全可靠、高密度、跨平台等

五、总结

   总的来说,这篇博客的内容只是让大家对Docker概念和原理有个基本的认识,关于Docker指令的实际操作会在后面的博客中继续记录的,大家感兴趣的可以持续关注哦~


http://www.ppmy.cn/devtools/109979.html

相关文章

零信任安全:重新思考数字世界的访问

目录 ​编辑 网络安全形势的演变 数字安全的变化 引入零信任安全 零信任的当今意义 了解零信任原则 零信任架构的核心概念 实施微分段 持续验证:积极主动的立场 与传统安全模型的对比 在现代企业中实施零信任 零信任实施基础知识 多重身份验证 (MFA) 的…

编程珠玑3-6

问题描述 6.编写一个“格式信函发生器”,使之可以通过数据库中的每条记录来生成定制的文档(这常常称为“邮件归并”特性)。设计简短的模板和输入文件来测试程序的正确性。 分析 信函格式发生器,就是将参数和模板分离,用不同的参数和模板组…

【C++】vector的简单模拟实现

目录 一、vector的基本实现机制: 二、vector的部分接口模拟实现: 1、构造与析构: 1、普通构造: 2、拷贝构造: 3、析构函数: 2、关于扩容: 1、reserve: 2、resize 3、增删查…

网络通信的加密协议TSL

网络(HTTP)通信的安全协议HTTPS HTTPS(超文本传输安全协议) 通过在HTTP基础上加入了SSL/TLS协议来确保数据传输的加密。 HTTPS使用的加密协议是TLS(传输层安全协议,1.2或1.3版本),它…

【鸿蒙蓝牙连接】

鸿蒙蓝牙连接 ble.startBLEScan startBLEScan(filters: Array, options?: ScanOptions): void 发起BLE扫描流程。 需要权限&#xff1a;ohos.permission.ACCESS_BLUETOOTH import { BusinessError } from ohos.base; function onReceiveEvent(data: Array<ble.ScanResu…

【Linux详解】命令行参数|环境变量

目录 一、命令行参数 二、环境变量 1.环境变量的基本概念 2.查看环境变量的方法 3.环境变量相关命令 4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一、命令行参数 【示例1】main函数也是函数&#xff0c;main函数可以带参吗&#xff1f; 没…

指针(下)

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. ⼆级指针 5.指针数组 6. 指针数组模拟⼆维数组 1. 字符指针变量 2. 数组指针变量 2.1 数组指针变量是什么&#xff1f; 2.2 数组指针变量怎么初始化 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 8.1…

软考中级攻略站】-软件设计师(6)- 项目管理

系统测试的原则和目的 尽早、不断的进行测试。 程序员避免测试自己设计的程序。 既要选择有效、合理的数据,也要选择无效、不合理的数据。 修改后应进行回归测试。 尚未发现的错误数量与该程序已发现错误数成正比。 测试方法 白盒测试 什么是白盒测试&#xff1f; 白盒…