微服务实战系列之玩转Docker(一)

前言

话说计算机的“小型化”发展,历经了大型机、中型机直至微型机,贯穿了整个20世纪的下半叶。同样,伴随着计算机的各个发展阶段,如何做到“资源共享、资源节约”,也一直是一代又一代计算机人的不懈追求和历史使命。今日的IT人应该感谢前辈们的付出和努力,没有他/她们,我想难以收获如今“信息爆炸”的繁荣景象。

其中,资源的虚拟化之路,妥妥是一个百折不挠、值得大书特书的伟大篇章。正因如此,云计算终于可以站在信息时代发展之巅,顺应历史发展潮流,成为与大数据、人工智能、工业互联网、物联网、车联网等并驾齐驱的信息化名片之一。

那么,博主撇开“云计算”,暂时不表。今天咱们来聊聊Docker吧,一个时代的“宠儿”

在这里插入图片描述


揭秘Docker

一个新事物的诞生,往往会经历一段甚至长期的“蛰伏期”。在这个期间,新事物通常会围绕“提出问题——>分析问题——>讨论——>提出方案——>实施方案”——这个思路发展。

那么,docker也不例外。它的形象是一艘“满载的大船”。为什么会这样设计或定位它呢?请允许博主慢慢道来。
在这里插入图片描述先来看看它是哪来的。从来新鲜的、有个性的、有价值的东西,都讲究个“师出有名”

Q1:从哪来

Docker的历史可以追溯到2013年,那时的移动互联网也逐步迈进了“新时代”,方兴未艾。当年,Docker正如当今的LLM(Large Language Model)一样,炙手可热,一经问世便注定不凡。只是在开源化历程中,它也经历了很多曲折和困难。谈到这里,博主不禁有感而发:“商业化总是要有的,开源精神也同样可贵。开源不意味着没有商机。比如私有云与公有云之间的分化,同样走出了各自的精彩。”

Docker,一个基于LXC(Linux容器,Google的杰作之一)的容器,能够从dotCloud公司的一个私有项目,借机完成华丽转身,可以说,“命运掌握在了自己手里”

那么,博主总结一句话:Docker是一个有史以来Container技术的集大成者,同样是站在了巨人的肩膀上,完成它的历史使命。

Q2:干什么

知道了它的来历后,接下来,博主继续带着大家看看,Docker是干什么的。通过它的背景资料,可以理解它的使命和目标是什么。即“Build——>Ship——>Run”。翻译成一句话就是“build once, run anywhere”(一次构建,遍地运行)。

1. Build(构建)

一句话,基于Docker的构建原则和规则,建立一套可行的服务(包括所需的各种资源、文件、应用程序等)。

2. Ship(运输)

一句话,快乐的搬运,快乐的“装卸”,大家都说搬家累,可是Docker却乐此不疲。这个理念是精髓哦。

3. Run(运行)

一句话,选择了新“家”后,Docker立即开锅掌勺,愉快的干活了。不用关注天气,不用查看导航,更不用花钱。可谓一举多得,所以人见人爱。

在这里插入图片描述

且看上图,这是Docker的核心运行机制。基于OS构建自己的Docker内循环,从镜像到容器,再到各种应用,各行其是。总而言之,有章可循不犯错。

这里看几个关键术语:

术语解释
镜像(Image)可理解为一个root文件系统,比如一个操作系统、一个nginx等。
容器(Container)镜像启动后就是一个容器,一个镜像可启动多次,意味着可创建多个容器。
仓库(Repository)镜像管理中心,可以是公共的,也可以私有化。
Docker 客户端用于和Docker主机进程交互的客户端工具。比如docker命令行或sdk工具。
Docker 主机用于执行Docker守护进程或容器的资源。

Q3:如何做

掌握了基本的概念后,可以通过下图进行更进一步的理解。简单讲是这么一个步骤:

1. 创建Docker主机

实现对镜像的Pull,Run、Stop、Delete等操作。建立守护进程,与外部交互。

2. 创建和使用镜像

简单打个比喻,镜像是Docker的“水源”。离开了镜像,Docker就会枯竭,无用武之地。我们可以创建镜像(生产过程),也可以获取镜像(消费过程)。
这里的操作,均指向一个仓库,即Docker仓库,当然可以是public,也可以是private。

3. 与Docker主机交互

我们可以借助docker命令行或sdk工具,与Docker主机建立联系。当然是通过守护进程(Docker daemon)完成一系列动作和指令。比如build、pull、run等命令。

在这里插入图片描述


结语

虚拟化没有终点,Docker遂应时而生,因时而变。为什么它会引人注目,当然离不开它的“轻”“灵”。试想,一艘大船,如何使用才能高效?标准化打包是核心思路,快速的装卸也是胜利之钥。那么,Docker正是依靠此思想茁壮成长。它带来了云计算的蓬勃发展,也促进了互联网向更深、更广、更高的舞台前进。

最后一句话分享:
云原生,从来不是一个口号,更多是一个使命、一种发展的必由之路。


精彩回顾

  • 微服务实战系列之云原生

  • 微服务实战系列之Filter

  • 微服务实战系列之API加密

  • 微服务实战系列之Dubbo(下)

  • 微服务实战系列之Dubbo(上)

  • 微服务实战系列之ZooKeeper(实践篇)

  • 微服务实战系列之ZooKeeper(下)

  • 微服务实战系列之ZooKeeper(中)

  • 微服务实战系列之ZooKeeper(上)

  • 微服务实战系列之MQ

  • 微服务实战系列之通信

  • 微服务实战系列之J2Cache

  • 微服务实战系列之Cache(技巧篇)

  • 微服务实战系列之MemCache

  • 微服务实战系列之EhCache

  • 微服务实战系列之Redis

  • 微服务实战系列之Cache

  • 微服务实战系列之Nginx(技巧篇)

  • 微服务实战系列之Nginx

  • 微服务实战系列之Feign

  • 微服务实战系列之Sentinel

  • 微服务实战系列之Token

  • 微服务实战系列之Nacos

  • 微服务实战系列之Gateway

  • 微服务实战系列之加密RSA

  • 微服务实战系列之签名Sign


在这里插入图片描述

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

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

相关文章

bash: ip: command not found

输入: ip addr 报错: bash: ip: command not found 报错解释: 这个错误表明在Docker容器中尝试执行ip addr命令时,找不到ip命令。这通常意味着iproute2包没有在容器的Linux发行版中安装或者没有正确地设置在容器的环境变量PA…

Git 的基本命令和使用方式

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。以下是 Git 的一些基本命令和使用方式的详细说明: 1. 配置 Git 设置用户名和邮箱:git config --global user.name "你的名字" git config --global u…

Spring Boot请求参数映射:@RequestBody、@RequestParam和@RequestPart的应用

文章目录 引言I @RequestBody(接收请求体中的数据)II @RequestParam(接收任意类型的参数)3.1 接收文件类型参数和普通查询参数3.1 只接收文件参数III @RequestPart(接收文件类型参数)3.1 普通文件上传3.2 上传多个属性名相同的文件3.3 上传一个图片和一个文本域引言 @Reque…

vscode运行命令是报错:标记“”不是此版本中的有效语句分隔符。

vscode运行命令是报错:标记“&&”不是此版本中的有效语句分隔符。 问题解决办法如何高效地使用搜索引擎? 问题 今天试了一下,在vscode的命令行中,执行mkdir test && cd test会报错. 解决办法 在Window中,执行多条命令行,可以: mkdir test ; cd…

C++迈向精通:再看C数组与指针

再看C数组与指针 下面这段代码是合法的&#xff1a; srand(time(0));int arr[10] {0};for (int i 0; i < 10; i) {arr[i] rand() % 100;}for (int i 0; i < 10; i) {cout << i[arr] << endl;}你能明白是为什么嘛&#xff1f;如果不明白&#xff0c;那么…

HTTP背后的故事:理解现代网络如何工作的关键(二)

一.认识请求方法(method) 1.GET方法 请求体中的首行包括&#xff1a;方法&#xff0c;URL&#xff0c;版本号 方法描述的是这次请求&#xff0c;是具体去做什么 GET方法&#xff1a; 1.GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源。 2.在浏览器中直接输入 UR…

算法 —— 快速幂

目录 P1045 [NOIP2003 普及组] 麦森数 P1226 【模板】快速幂 原理I 原理II P1226 代码解析 P1045 代码解析 P1045 [NOIP2003 普及组] 麦森数 本题来自洛谷&#xff1a;P1045 [NOIP2003 普及组] 麦森数&#xff0c;根据题意&#xff0c;我们可以看到本题需要计算最少2的1…

C语言程序设计实验8实验报告

1&#xff0e;实验目的 &#xff08;1&#xff09;掌握循环语句 &#xff08;2&#xff09;学习使用递归 &#xff08;3&#xff09;学习使用程序调试 2&#xff0e;实验内容、算法、流程图及主要符号说明 &#xff08;1&#xff09;用辗转相减求最大公约数的递归定义是&a…

ArkTS学习笔记_自定义组件

自定义组件学习笔记 (一)、自定义组件的基本结构 1、struct:自定义组件基于struct实现 格式: struct + 自定义组件名 + {...}简单示例: @Entry @Component struct Index {// 组件的状态 @State message: string = Hello World// 组件的UI构造方法 build() {Row() {C…

python 读取矢量图svg

在Python中读取矢量图&#xff0c;通常指的是读取如SVG&#xff08;可缩放矢量图形&#xff09;或PDF等格式的文件。对于这些格式的处理&#xff0c;Python有几个库可以做到&#xff0c;如matplotlib、cairo、inkscape的Python接口等。以下是使用matplotlib库读取SVG文件的一个…

基于JAVA的智慧社区信息管理系统设计

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【Android高级UI】PorterDuffMode颜色混合公式

效果展示 色彩混合公式 参数说明 S&#xff0c;源图形D&#xff0c;目标图形A&#xff0c;透明度C&#xff0c;RGB色Saturate&#xff0c;饱和度

js的多线程示例

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>普通worker</title></head><body…

PingRAT:一款基于ICMP的隐蔽型C2流量转发工具

关于PingRAT PingRAT是一款基于ICMP的隐蔽型C2流量转发工具&#xff0c;该工具专为红队成员和攻防演练任务而设计&#xff0c;主要利用了ICMP Payload来实现其功能&#xff0c;该工具不仅能转发C2流量&#xff0c;而且还可以帮助广大研究人员增强C2网络通信流量传输的隐蔽性。…

基于Cpp的OpenCV4.8入门学习笔记(二)

文章目录 前言一、OpenCV图像的一些基本操作&#xff08;day 02&#xff09;16. OpenCV中提供的随机数生成17. 绘制和填充多边形&#xff0c;以五边形为例18. 鼠标事件控制绘画&#xff0c;截取ROI区域19. 图像的像素类型转换与归一化操作20. 图像的放缩与插值21. 图像的翻转&a…

(leecode学习)14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&#xff1a; 输入…

day02.08.成员运算符•二

# 成员运算符&#xff08;掌握&#xff09; # in, not in print(3 in [3,4,5]) # print("name" in "abcnamehaha") # print(name not in {"name": "ikun", "age": 30}) # 身份运算符&#xff08;了解&#xff09; # is…

SWDIO管脚作为GPIO

下面是使用FRDM-K32L2B3开发板和SDK中的frdmk32l2b_gpio_led_output程序做了一些测试&#xff0c;configure SWDIO pin as GPIO pin的流程。 查看手册&#xff0c;找到SWDIO对应的管脚&#xff0c;可以看到PTA3对应的SWDIO管脚。 2.修改Demo程序&#xff0c;在程序中设置SWDIO…

npm和yarn清理缓存命令

yarn清除缓存 1、查看yarn全局缓存目录 yarn cache dir2、清除缓存 yarn cache cleannpm 清除缓存 1、将node-modules文件夹先删除 2、清理缓存命令&#xff1a; npm cache clean --force3、重新安装一次即可 npm install /cnpm install

【杰理蓝牙开发】AC632 开发板烧录实例

AC632 开发板烧录实例 0. 个人简介 && 授权须知1. 硬件板卡介绍2. 代码烧录2.1 使用USB接口烧录2.2 使用串口烧录 3. 为什么要用烧录器供电&#xff1f; 0. 个人简介 && 授权须知 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c…