本文目录

  • 写在前面
  • 一、什么是Docker
    • 虚拟机和容器
  • 二、Docker用途
  • 三、Docker优势
  • 四、Docker的三大核心概念
    • Image (镜像)
      • 创建镜像
    • Container (容器)
      • 创建并启动
    • Repository (仓库)

写在前面

由于假期在做服务外包的竞赛,用到了docker,所以写一篇blog,加深自己的理解。
本文参考了诸多文章,是本人对网络上已有内容的总结与体会
为了方便以后查看,现将学习相关笔记记录在这里
本文仅为本人学习记录,如有侵权,请联系删除
感谢各位大佬的分析、总结、分享
本文参考:
菜鸟入门Docker
这可能是最为详细的Docker入门吐血总结
linux上安装Docker(非常简单的安装方法)
docker三大核心概念

一、什么是Docker

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

虚拟机和容器

理解 docker 之前,首先我们得先区分清楚两个概念,虚拟机容器

  • 虚拟机可以实现在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统等,而且不会对实际的电脑产生影响,不想用时将虚拟机相关文件删掉即可,用户可以通过虚拟机还原软件的原始环境,实际上就是解决了配置环境的问题。尽管它有资源占用多,启动慢等缺点。

  • 而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

  • Linux容器是为了解决虚拟机的确缺点而生的,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。由于容器是进程级别的,相比虚拟机有很多优势。像启动快、资源占用少等。

  • 而Docker 就是属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。就像一开始说的,Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

二、Docker用途

Docker 的主要用途,目前有三大类。

  1. 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

  2. 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

  3. 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

三、Docker优势

  • docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动

  • docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化

  • docker 更轻量, docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境, Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高

  • 与虚拟机相比, docker 隔离性更弱, docker 属于进程之间的隔离,虚拟机可实现系统级别隔离

  • 安全性: docker 的安全性也更弱。 Docker 的租户 root 和宿主机 root 等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户 root 权限和宿主机的 root 虚拟机权限是分离的,并且虚拟机利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

  • 可管理性: docker 的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter 提供完备的虚拟机管理能力

  • 高可用和可恢复性: docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性

  • 快速创建、删除:虚拟化创建是分钟级别的, Docker 容器创建是秒级别的, Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间

  • 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 Docker 在 Dockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署

我们可以从下面这张表格很清楚地看到容器相比于传统虚拟机的特性的优势所在:

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般是几十个

四、Docker的三大核心概念

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

Image (镜像)

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。

镜像是创建docker容器的基础,docker镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模块,看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

创建镜像

  • 基于已有镜像的容器创建。主要是利用docker commit命令。
  • 基于dockerfile创建。

Container (容器)

容器是从镜像创建的应用运行实例,容器之间是相互隔离、互不可见的。可以把容器看做一个简易版的linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在这个环境上的应用打包而成的应用盒子。

镜像自身是自读的,容器从镜像启动的时候,docker会在镜像的最上层创建一个可写文件层,镜像本身保持不变。

可以利用docker create命令创建一个容器,创建后的的容器处于停止状态,可以使用docker start命令来启动它。也可以运行docker run命令来直接从镜像启动运行一个容器。docker run = docker creat + docker start。

创建并启动

当利用docker run创建并启动一个容器时,docker在后台的标准操作包括:

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载。

  2. 利用镜像创建并启动一个容器。

  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。

  4. 从宿主机配置的网桥接口中桥接一个虚拟的接口到容器中。

  5. 从地址池中配置一个IP地址给容器。

  6. 执行用户指定的应用程序。

  7. 执行完毕后容器终止。

Repository (仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

仓库又可以分为两种形式:

public(公有仓库)
private(私有仓库)
Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

我们主要把 Docker 的一些常见概念如 Image , Container , Repository 做了详细的阐述,也从传统虚拟化方式的角度阐述了 docker 的优势,我们从下图可以直观地看到 Docker 的架构:

framework

Docker 使用 C/S 结构,即客户端/服务器体系结构。 Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。 Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 stock 或网络接口与远程 Docker 服务端进行通信。

docker-framework

这张图展示了 Docker 客户端、服务端和 Docker 仓库(即 Docker Hub 和 Docker Cloud ),默认情况下Docker 会在 Docker 中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

关于Docker以及安装方法相关推荐

  1. docker containerd.io、docker-ce、docker-ce-cli的区别(docker版本安装docker安装方法)(Docker CE和Docker EE,docker.io)

    文章目录 20230207 docker两种版本以及apt安装方法 docker社区版 docker-ce docker-ce-cli containerd.io(docker 官方维护) docke ...

  2. 史上最全docker安装方法!

    2017年2月8日,docker更新到1.13.1(更新日志),此后又分为了docker CE(社区版)和docker EE(商业版). 此处只分享docker CE安装方法,商业版多了容器资源监控和 ...

  3. 史上最全(全平台)docker安装方法!

    2017年2月8日,docker更新到1.13.1(更新日志),此后又分为了docker CE(社区版)和docker EE(商业版). 此处只分享docker CE安装方法,商业版多了容器资源监控和 ...

  4. docker下安装Nginx的方法

    这篇文章主要介绍了docker下安装Nginx的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 一. 环境说明 docker: 18.03.1-ce nginx: 1.15.1 二. 拉 ...

  5. docker安装启动mysql5.6_mysql5.6在ubuntu下的docker中安装的方法详解

    这篇文章主要介绍了ubuntu下在docker中安装mysql5.6 的方法,需要的朋友可以参考下 1.安装mysql5.6docker run mysql:5.6 等所有项目都是Download c ...

  6. arm架构服务器安装系统教程,docker服务在arm平台上部署安装方法

    docker服务在arm平台上部署安装方法 本教程使用的硬件平台是全志A40I,操作系统采用的是ubuntu18.04,内核是3.10.108(内核很老导致docker兼容性不好) 1.获取最新版本的 ...

  7. Docker安装包安装方法

    Docker安装包安装方法 1.下载安装包 containerd.io-1.2.6-3.3.el7.x86_64.rpm container-selinux-2.119.2-1.911c772.el7 ...

  8. docker安装方法

    懒人方法: 如果是你是懒人,在服务器版本直接执行官方出品的一键安装脚本(脚本会区分不同的操作系统且脚本会安装体验版(edge版)而不是稳定版(stable版)且最好不要用于生产环境,脚本Github地 ...

  9. Docker的安装和使用及其Docker容器间通信,云计算技术与应用实验报告

    实验环境:Windows操作系统,阿里云资源,Docker 实验内容和要求:安装Docker并进行相关实验,熟悉Docker的相关操作.实验包括Docker的安装.镜像和容器的使用.容器的连接.容器间 ...

最新文章

  1. LTE中基本通信过程的理解——上行调度
  2. poj3565(最大权完美匹配)
  3. 测试MindMotion 的 ISP功能 - 无法进入ISP功能
  4. java process 重定向_java – 没有重定向StdOut的Processbuilder
  5. DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测
  6. 轴承新旧型号对照表_精密机床主轴轴承,高端轴承进口清关报关流程
  7. docker rabbitmq php扩展,Docker开启RabbitMQ延时消息队列
  8. vue怎么通过if跳出方法_vue多种弹框的弹出形式
  9. 怎么用python画圆柱_python-如何绘制具有非恒定半径的圆柱
  10. 单例模式——饿汉式和懒汉式
  11. java持久层用文件_JAVA中用三种方法将字符串持久化到文件中
  12. 二级c语言笔试57,二级C语言笔试真题与答案.doc
  13. 方舟同账号一个服务器能建小号吗,你玩明日方舟开小号吗?游戏虽好但请莫贪多,多号同玩会让人疲劳...
  14. 免费网站建设应该要掌握哪些?
  15. phpstorm的使用方法
  16. redis集群管理-5.0.14版本
  17. 离线电影管理软件 极影派
  18. ESP8266-NodeMCU网络服务器——通过网页将文件上传到闪存文件系统
  19. STM32CUBE+自平衡车-前言
  20. vue-vant项目字体以及组件字体适配

热门文章

  1. apache的IO包中的FileUtils方法的使用
  2. C# linq left join
  3. 企业快速寄件打单教程
  4. 在Deepin 15.11系统中遇到微信版本过低不能登录的解决方法
  5. 直击|ofo测试折扣商城 押金可转换为金币消费
  6. 『贝壳找房APP』反编译到底有多简单--反编译和调试实践
  7. t-SNE算法(附Python/R代码)
  8. 2020年中高级Android面试秘籍(Android高级篇-3)
  9. 首位文博虚拟宣推官“文夭夭”上岗
  10. static char x [ ]=“12345”; 为什么比 static char y[ ]={‘1’,‘2’,‘3’,‘4’,‘5’};长?