【Docker】进阶之路:(二)Docker简介

【Docker】进阶之路:(二)Docker简介

  • 什么是 Docker
  • Docker 由来与发展历程
  • Docker的架构与组成
  • Docker容器生态
    • 容器核心技术
      • 容器规范
      • 容器平台技术
  • 为什么使用Docker
    • Docker的应用场景

什么是 Docker

简单地讲,Docker就是一个应用容器引擎,通过Docker,管理员可以非常方便地对容器进行管理。Docker基于Go语言开发,并且遵从Apache 2.0开源协议。
Docker提供了对容器镜像的打包封装功能。利用Docker,开发者可以将他们开发的应用系统以及依赖打包起来,放到一个轻量级的、可移植的容器中,然后发布到任何的Linux或者Windows上面。这样的话,Docker就统一了整个开发、测试和部署的环境和流程,极大地减少运维成本。
Docker完全使用沙箱机制,容器之间不会有任何的接口。

Docker 由来与发展历程

2010年,几个大胡子年轻人在美国旧金山成立了一家做PaaS(Platform-as-a-Service,平台即服务)平台的公司,并且起名为dotCloud。虽然dotCloud公司曾经获得过一些融资,但随着大厂商,包括微软、谷歌以及亚马逊等杀入云计算领域,dotCloud公司举步维艰。
幸运的是,上帝每关上一扇门,就会打开一扇窗。2013年初,dotCloud公司的工程师们决定将他们的核心技术Docker开源,这项技术能够将Linux容器中的应用代码打包,轻松地在服务器之间迁移。
令所有人意想不到的是,开源之后Docker技术风靡全球,于是,dotCloud公司决定改名为Docker,全身心投入到Docker的开发中。2014年8月,Docker公司宣布把PaaS业务dotCloud出售给位于德国柏林的PaaS服务提供商cloudControl,自此,dotCloud和Docker分道扬镳。

Docker的架构与组成

Docker采用C/S架构,即客户端/服务器架构。管理员通过Docker客户端与Docker服务器进行交互。Docker服务器端负责构建、运行和分发Docker镜像。用户可以把Docker的客户端和服务器部署在同一台机器上面,也可以分别部署在不同的机器上面,两者之间通过各种接口进行通信。
Docker的典型体系架构如图所示。
在这里插入图片描述

Docker容器生态

容器核心技术

容器核心技术是指能够让 container 在 host 上运行起来的那些技术。 这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry以及容器OS,下面分别介绍。

容器规范

容器不仅有 Docker,还有如 CoreOS 的 rkt等其他容器。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包括Docker、CoreOS、Google等在内的若干公司共同成立了 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。OCI已发布了两个规范:runtime spec 和 image format spec。 有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行,保证了容器的可移植性和互操作性。

容器平台技术

容器核心技术使得容器能够在单个 host 上运行,而容器平台技术能够让容器作为集群在分布式环境中运行。容器平台技术包括容器编排引擎、容器管理平台和基于容器的 PaaS。下面将介绍这几块内容。

容器编排引擎

基于容器的应用一般会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过 API 对外提供服务。为了保证应用的高可用,每个组件都可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。
这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群,这就是容器编排引擎要负责的工作。
所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机地组合成微服务应用,以实现业务需求。

为什么使用Docker

Docker的应用场景

Docker提供轻量级的虚拟化服务。每个Docker容器都可以运行一个独立的应用。例如,用户可以将Java应用服务器Apache Tomcat运行在一个容器中,而MySQL数据库服务器运行在另外一个容器中。
目前,Docker的应用场景非常广泛,主要有以下几种。

  1. 简化配置
    这是Docker的初始目的。Docker将应用程序代码、运行环境以及配置进行打包。用户在部署时,只要以该镜像为模板创建容器即可。实际上,这实现了应用环境和底层环境的解耦。
  2. 简化部署过程
    Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,即可实现虚拟化。
    Docker改变了传统的虚拟化方式,使得开发者可以直接将自己开发的应用放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数分钟就能完成。
  3. 节省开支
    另一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云计算机的结合,不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker的广泛应用极大地降低了IT设施的运维成本。具体来说,主要体现在以下方面。

  • 轻量级的虚拟化。与传统的服务器或者主机虚拟化相比,Docker实现了更加轻量级的虚拟化。这对于应用部署来说,可以减少部署的时间成本和人力成本。
  • 标准化应用发布。Docker容器包含了运行环境和可执行程序,可以跨平台和主机使用。
  • 节约启动时间。传统的虚拟主机的启动一般是分钟级,而Docker容器启动是秒级。
  • 节约存储成本。以前一个虚拟机至少需要几个GB的磁盘空间,而Docker容器可以减少到MB级。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向对象类的设计和实现

实验目标 本实验任务是实现 Java 类的设计和实现,实验任务是根据每年新生的报到流程, 设计一 个学生管理系统,实现学生的注册和报到功能。设置类的基本属性,实现 getter 和 setter 方 法,通过 set 方法设置…

C++新经典模板与泛型编程:SFINAE特性的信息萃取

用成员函数重载实现is_default_constructible 首先介绍一个C标准库提供的可变参类模板std::is_default_constructible。这个类模板的主要功能是判断一个类的对象是否能被默认构造(所谓默认构造,就是构造一个类对象时,不需要给该类的构造函数…

三层交换原理

三层交换机出现的背景 早期的网络中一般使用二层交换机来搭建局域网,而不同局域网之间的网络互通由路由器来完成。那时的网络流量,局域网内部的流量占了绝大部分,而网络间的通信访问量比较少,使用少量路由器已经足够应付了。 但…

六级高频词汇3

目录 单词 参考链接 单词 400. nonsense n. 胡说,冒失的行动 401. nuclear a. 核子的,核能的 402. nucleus n. 核 403. retail n. /v. /ad. 零售 404. retain vt. 保留,保持 405. restrict vt. 限制,约束 406. sponsor n. …

GRE与顺丰圆通快递盒子

1. DNS污染 随想: 在输入一串网址后,会发生如下变化如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件如果 Hosts 里面没有这个别名,就通过域名服务器查询域名服务器回应了,那么你的电脑就可以根据域名服…

使用阿里巴巴同步工具DataX实现Mysql与ElasticSearch数据同步

一、Linux环境要求 二、准备工作 2.1 Linux安装jdk 2.2 linux安装python 2.3 下载DataX: 三、DataX压缩包导入,解压缩 四、编写同步Job 五、执行Job 六、定时更新 6.1 创建定时任务 6.2 提交定时任务 6.3 查看定时任务 七、增量更新思路 一、Linux环境要…

KubeSphere应用【二】Docker安装

一、Docker安装 1.下载Docker安装包 【地址】Index of linux/static/stable/x86_64/ 2.上传至服务器 # 解压文件 tar -xvf docker-20.10.10.tgz# 将docker 目录中的所有文件复制至/usr/bin/目录下 cp docker/* /usr/bin 3.配置docker.service文件 vim /usr/lib/systemd/sy…

WPF仿网易云搭建笔记(2):组件化开发

文章目录 前言专栏和Gitee仓库依赖属性实战:缩小,全屏,关闭按钮依赖属性操作封装主窗口传递this本身给TitleView标题控件主要代码MainWindow.xmalMainWindow.cs依赖属性方法封装TitleView.csTitleViewModelTitleViewModel实现效果 前言 这次…

【JavaWeb学习专栏 | CSS篇】css简单介绍 css常用选择器集锦

个人主页:[兜里有颗棉花糖(https://xiaofeizhu.blog.csdn.net/) 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaWeb学习专栏】【Java系列】 希望本文内容可以帮助到大家,一起加油吧!…

安全访问服务边缘(SASE):解决第三方风险的全方位解决方案

随着数字化时代的到来,企业和组织对于网络安全的需求越来越迫切。传统的安全解决方案已经无法满足复杂多变的网络环境,因此新兴的安全访问服务边缘(SASE)应运而生。本文将介绍SASE的概念和工作原理,并重点阐述它作为第…

第二百回 如何获取App自身的信息

文章目录 1. 概念介绍2. 使用方法2.1 ClipOval2.2 ClipRRect 3. 示例代码 我们在上一章回中介绍了AspectRatio Widget相关的内容,本章回中将介绍剪裁类组件(Clip).闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的剪裁类组件主要是指对…

Koa2从零搭建restful API

Koa2从零搭建restful API: 创建项目文件夹并进入 mkdir koa-projectcd koa-project 初始化项目 npm init 安装 Koa npm install koa koa-router --save 编写示例代码,在 app.js 文件中编写以下代码: // koa项目的入口文件 const Koa require("koa…

018 OpenCV 人脸检测

目录 一、环境 二、分类器原理 2.1、概述 2.2、工作原理 三、人脸检测代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、分类器原理 CascadeClassifier是OpenCV(开源计算机视觉库)中的一个强大的类…

想进阶JAVA高级程序员吗?多线程必学

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…

Truffle的基础语法与js测试语法

truffle编译 truffle compiletruffle部署 truffle migratetruffle测试 使用test文件夹下的所有文件测试 truffle test使用单个文件 测试 truffle test 文件所在位置assert断言 assert.equal 是一种常见的断言函数,用于测试两个值是否相等。它接受两个参数&…

代码随想录算法训练营第四十六天 _ 动态规划_背包问题总结。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 本文大多数内容引用自代码随想录 60天训练营打卡计划! 学习内容: …

银行插件导致的Outlook客户端无法连接服务器问题

问题现象 最近遇到好些同事出现outlook客户端无法连接服务器的情况,具体现象就是右下角一直显示【正在尝试连接…】或者【需要密码】,点击【需要密码】按钮,输密码的弹窗是一个完全空白的页面。 此时打开word,右上角那里去登录o…

Postman获取token

问题描述 登录接口中带有token参数,其他接口需要带上token才能正确访问,利用接口查询用户信息时手动在headers中更新token信息并不方便。 解决方案 在登录接口中设置一个名为“token”的环境变量,value为登录接口跑通之后responseBody中返回…

科技提升安全,基于YOLOv4开发构建商超扶梯场景下行人安全行为姿态检测识别系统

在商超等人流量较为密集的场景下经常会报道出现一些行人在扶梯上摔倒、受伤等问题,随着AI技术的快速发展与不断普及,越来越多的商超、地铁等场景开始加装专用的安全检测预警系统,核心工作原理即使AI模型与摄像头图像视频流的实时计算&#xf…

⭐Unity 搭建UDP客户端(01) 配合网络调试助手测试

1.接收来自服务器的消息 using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine;public class UDPManager:MonoBehaviour {public string recvStr; //服务器返回值public string UDPClientAddRess "192.168.2.39&q…