如果你还想从头学起 Docker,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1690628.html

备注

这里的概念直接引用官方的,咱们提取关键字信息来熟记即可

学习 Docker 前的必备知识

环境配置的烦恼

  • 软件开发最大的麻烦事之一,就是环境配置
  • 相信每位编程初学者都会在环境配置上倒腾很久,而作为老师也会因为不同机器出现五花八门的环境配置问题而烦恼
  • 想要软件正常运行,那么系统的设置和各种库、组件正确的安装才能如期运行
  • 举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量
  • 当你需要换机器的时候,你之前所配置的环境又要重头来一遍,非常麻烦

很久以前的应用部署方式

介绍

在一个物理服务器上面安装系统,直接部署应用

缺点

  • 部署非常慢
  • 成本非常高
  • 资源浪费:部署的应用并不会占满服务器资源,会有大部分的空闲资源
  • 难于迁移和扩展:像上面说到的,换台服务器,环境又要重新配
  • 可能会被限定硬件厂商:底层系统架构不同

虚拟化技术出现后的应用部署方式

虚拟化介绍

  • 一个主机部署多个虚拟机,每个虚拟机可以部署多个应用
  • 比如在 Windows 系统里面运行 Linux 系统的 VM
  • 对于底层系统(主机)来说,虚拟机就是一个普通文件,不需要就删掉,对主机没有影响

虚拟化优点

  • 资源池:一个物理机的资源分配到了不同的虚拟机
  • 易扩展:添加物理主机或虚拟机
  • 易云化:阿里云、AWS 提供虚拟化技术

虚拟化局限性

  • 资源占用多:每一个虚拟机都是一个完整的操作系统,要给其分配资源,当虚拟机数量增多时,物理主机本身消耗的资源势必增多
  • 冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录
  • 启动慢:启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行

容器的基础知识

容器为什么会出现

  • 上面也讲述了单机部署应用和虚拟机技术的局限性
  • 容器的诞生就是为了解决这些局限性的

什么是容器

  • 对应用软件和其依赖的包进行标准化打包
  • 应用之间相互隔离
  • 共享同一个 OSKernel
  • 可以运行在很多主流操作系统上
  • 可以理解成:标准化软件单元

容器解决了什么问题 

  • 解决了开发和运维之间的矛盾
  • 在开发和运维之间搭建了一个桥梁,是实现 devops 的最佳解决方案

容器和虚拟机的区别

容器和虚拟机都具有相似的资源隔离和分配特点,但是功能不同,因为容器虚拟化了操作系统,而不是硬件,所以更加便携和高效

容器 VM
应用程序层的抽象,将代码和依赖项打包在一起【容器是应用层面的隔离】 将一台服务器转变为多台服务器的物理硬件的抽象【虚拟化是物理资源层面的隔离】

多个容器可以在同一台计算机上运行,并与其他容器共享OS内核

也允许多个VM在单台计算机上运行,但需要启动单独的虚拟机 OS

仅有一个物理机的OS,多个容器共享物理机的资源

多个OS(物理机一个OS,每个 VM 一个 OS),均独享资源
一台物理机可以运行数个容器 一台物理机最多可以运行十来个虚拟机
容器镜像的大小通常为几十 MB 包含操作系统、二进制文件、库,至少也要几个 GB
可以在数秒内完成启动 和物理机启动时间一样慢,可能要几分钟
可以处理更多的应用程序,消耗的资源比 VM 少  
每个容器在用户空间中作为隔离的进程运行  

虚拟化 + 容器

  • 其实就是 一台物理机上部署多个 VM,每个 VM 上又可以有多个容器
  • 容器和 VM 一起结合使用,在部署和管理应用程序时提供了很大的灵活性

Docker 的详细介绍

Docker 简介

  • Docker 是一个开源的应用容器引擎,基于 Go 语言
  • 可以打包应用以及依赖包到一 个轻量级、可移植的容器中
  • Docker 打包好了的容器,可以发布到任何流行的 Linux 机器上,也可以实现虚拟化
  • 容器是完全使用沙箱机制,相互之间不会有任何接口(独立)
  • 容器性能开销极低
  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器
  • Docker 是实现容器技术的一种工具
  • Docker 容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样

工作中的应用场景

  • Web 应用的自动化打包和发布
  • 自动化测试和持续集成、发布(我们的重点)
  • 组建微服务架构,通过多个容器,一台机器可以跑多个服务,因此在本机可以模拟出微服务架构

将软件打包到容器中,以进行开发,运输和部署

  • 容器是打包代码及其所有依赖项的软件的标准单元,所以该软件可以从一个计算机环境快速可靠地在另一个计算机环境进行运行
  • Docker 容器镜像是一个轻量级、独立的、可执行的软件包,它包含运行应用程序所需的一切:运行环境、系统工具、系统库、配置
  • 容器镜像在运行时成为容器
  • 容器化软件都可用于基于 Linux 和 Windows 的应用程序,始终运行相同
  • 容器将软件与其环境隔离开来,即使存在差异,但软件仍然可以运行

在 Docker 镜像上运行的 Docker 容器的优势

  • 标准:Docker 创建了容器的行业标准,因此它们可以在任何地方移植
  • 轻巧:容器共享机器的操作系统内核,因此不需要每个应用程序都用操作系统,从而提高了服务器效率,并降低了服务器资源的消耗
  • 安全:容器中的应用程序更安全,Docker 提供业界最强大的默认隔离功能

Docker 的组成

Docker 架构图

架构图箭头的意思大概是

  • 在 Docker Client 敲 Docker 命令调用 Docker API 来操作 Host 上的 Docker 服务
  • Docker 服务可以从仓库拉镜像到本机,也可以用本机镜像创建一个容器并运行

仓库(Registry)

  • 集中存放镜像文件的场所
  • 每个镜像文件有不同的标签(不同的版本)
  • 最大的开放仓库是Docker Hub: https://hub.docker.com/ 存放了数量庞大的镜像供用户下载
  • 国内的公开仓库包括阿里云,网易云等
  • 仓库分为公开仓库(public)和私有仓库(private)两种形式

镜像(Images)

  • 创建容器的模板
  • 一个镜像可以创建很多容器

容器(Containers)

  • 容器是镜像生成的运行实例
  • Docker 利用容器独立运行一个或一组应用(服务)
  • 每个容器之间是相互隔离的
  • 它可以被启用、开始、停止、删除

主机(HOST)

  • 一个物理机或虚拟机
  • 用于运行 Docker 守护进程和多个容器
  • 可存放多个镜像
  • 也称为宿主机,node节点

Docker 服务端(daemon)

Docker 守护进程,运行 Docker 容器

Docker 客户端(client)

  • 客户端使用 Docker 命令或其他工具调用 Docker API
  • 当然也可以在 HOST 直接敲 Docker 命令

Docker(1)- 什么是 Docker的更多相关文章

  1. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  2. docker使用阿里云Docker镜像库加速

    官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 官方帮助 阿里云Docker镜像库 阿里云容器Hub服务:http://dev.aliyun.com/search.html 来自云端的容器Hub服 ...

  3. Docker - 配置DaoCloud的Docker加速器(国内registry-mirror)

    由于众所周知的原因,从Docker Hub难以高效地下载镜像. 除了使用VPN或代理之外,最为有效的方式就是使用Docker国内镜像. DaoCloud是首个提供国内免费Docker Hub镜像的团体 ...

  4. Docker学习总结之docker安装

    Ubuntu安装指南 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译 Docker 支持多种平台下的安装运行,现在我们选取结合度最高的ubuntu来说明安装过程. 首先需要明确Do ...

  5. Docker学习总结之docker入门

    Understanding Docker 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译. What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发, ...

  6. docker专题(2):docker常用管理命令(上)

    http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...

  7. Docker学习笔记(1) — docker 常用命令

    1. docker version显示 Docker 版本信息.2. docker info显示 Docker 系统信息,包括镜像和容器数.3. docker searchdocker search ...

  8. docker 1.12 版本 docker swarm 集群

    博客已经迁移到 个人博客中 个人博客 更新地址: http://www.xf80.com/2016/10/25/docker-swarm-1.12/ docker 1.12 版本 的新特性 (1)do ...

  9. docker 内部组件结构 -- docker daemon, container,runC

    Docker, Containerd, RunC : 从 Docker 1.11 开始, docker 容器运行已经不是简单地通过 Docker Daemon 来启动, 而是集成了Container, ...

  10. jenkins+docker 持续构建非docker in docker jenkins docker svn maven

    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...

随机推荐

  1. 如何写出优美的 JavaScript 代码?

    一.变量相关 (1)变量数量的定义 NO:滥用变量 let kpi = 4; // 定义好了之后再也没用过 function example() { var a = 1; var b = 2; var ...

  2. Sass 教程

    什么是Sass 什么是css预处理语言 css预处理语言可以理解为: 开发一种特殊的编程语言, 把css文件作为编译否的结果, 我们在这个编程语言三增加了很多程序的特性, 使开发变得的更加简单 当前流 ...

  3. 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包

    090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  4. 005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介

    005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介 Eclipse是一款集成开发工具--IDE. 集成开发环境(IDE,Integrated ...

  5. np.random.multivariate_normal方法浅析

    从多元正态分布中抽取随机样本. 多元正态分布,多正态分布或高斯分布是一维正态分布向更高维度的推广.这种分布由其均值和协方差矩阵来确定.这些参数类似于一维正态分布的平均值(平均值或"中心&qu ...

  6. JS/TS 对数组中的对象按对象的值进行去重

    举个例子:对以下数组按 lastName 的值进行去重 let listData = [ { firstName: "Rick", lastName: "Sanchez& ...

  7. STM32之旅3——时钟数

    STM32之旅3--时钟数 STM32F1是M3内核,它的时钟数很庞大,让一个初学者去看,估计会很吃力,和我们入门的8051单片机的时钟不同,这里又倍频.又分频,而且还分成好多个时钟,不同的外设时钟不 ...

  8. 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类

    5.8多态 上面我们了解了向上转型,即一个对象变量可以引用本类及子类的对象实例,这种现象称为多态(polymorphism).多态究竟有什么用呢?我们先学习一个知识点. 5.8.1方法重写 前面我们学 ...

  9. 虚拟主机和ECS的选择——有的坑你可以不躺,有的钱你可以不花(一)

    一直想做网站,由于最开始虚拟主机有优惠,所以三年前买了虚拟主机,后来一直续费,间歇性使用过,发现很多功能都不行​. 昨天准备买新的,然后想起学生购买有优惠,于是开始了学生认证之旅​. 首先,看一下之前 ...

  10. mysql DISTINCT选取多个字段,获取distinct后的行信息

    背景:      a表保存关联关系,通过ACode 获取该关系中的所有 BCode, 并获取所有Bcode-max(Bvrsn)的信息  Bnm 表a 表b          循序渐进:        ...