Docker

VM vs Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

示例一:部署 MySQL 服务

首先以一个在 Linux 部署 MySQL 服务器为例,相信每个开发或运维人员都有个这个经历,平均消耗时间应该至少在2个小时以上。而如果使用 docker 来实现,只需要5分钟,两个步骤:

  • 在linux上安装docker环境
  • 运行命令:docker run -d --name mysql -p 3306:3306 -v /home/freeman/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pwd mysql:5.7.14

示例二:部署公司项目

以往的流程:开发人员开发并测试完成,再交给运维人员部署,配置文件复杂似的在配置过程中耗费了太多的时间和精力。而如果使用新的开发部署模式,开发人员将配置作为项目的构成部分集成到产品中去,不需要运维人员关心具体的配置。

核心概念

  • LXC Linux Container的简写, 提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。LXC在资源管理方面依赖于Linux内核的cgroups 子系统,LXC在隔离控制方面依赖于Linux内核的namespace 特性.

  • cgroup Control Groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory, io 等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC。

  • namespaces 提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的 Namespace。每个 Namespace 里面的资源对其他 Namespace 都是透明的。要创建新的Namespace,只需要在调用 clone 时指定相应的flag。Linux Namespaces 机制为实现基于容器的虚拟化技术提供了很好的基础,LXC就是利用这一特性实现了资源的隔离。不同 container 内的进程属于不同的 Namespace,彼此透明,互不干扰。

  • Docker
    一个实现容器化的平台,它提供一整套工具(docker-engine, docker-compose等等)让容器化变得异常简单。

解决的问题

  1. 简化配置
    这是 Docker 公司宣传的 Docker 的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker 在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个 Docker 的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

  2. 代码流水线(Code Pipeline)管理
    前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

  3. 提高开发效率
    这就带来了一些额外的好处:Docker 能提升开发者的开发效率。不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是 Docker 做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在 Docker 可以轻易的让几十个服务在 Docker 中跑起来。

  4. 隔离应用
    有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务。

  5. 整合服务器
    正如通过虚拟机来整合多个应用,Docker 隔离应用的能力使得 Docker 可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker 可以比虚拟机提供更好的服务器整合解决方案。

  6. 调试能力
    Docker 提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试 Bug。

  7. 多租户环境
    另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。

  8. 快速部署
    在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。

常用命令

进入容器交互模式 docker exec -it container-name /bin/bash
强制删除所有容器(包括当前正在运行的容器) docker rm -f $(docker ps -a -q)

作者:我是柯南
链接:https://www.jianshu.com/p/297395270278
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/Danny-test/p/9132120.html

【转】Docker 容器化核心概念相关推荐

  1. k8s 重要概念 - 每天5分钟玩转 Docker 容器技术(117)

    在实践之前,必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石. Cluster  Cluster 是计算.存储和网络资源的集合,Kubernetes 利用 ...

  2. Docker之镜像、容器、仓库概念

    Docker镜像 操作系统分为内核和用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相当于是一个 root 文件系 ...

  3. docker 不包含依赖 打包_Docker容器技术(概念篇)

    微信公众号:Java患者 专注Java领域技术分享 Docker介绍 Docker是基于Go语言实现的开源应用容器引擎,通过对应用组件的封装.分发.部署.运行等生命周期的管理,使的用户的应用及其运行环 ...

  4. Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)

    Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 理解了这三个概念,就理解了 Docker 的整个生命周期. Docker 镜像 Docke ...

  5. 为什么Kubernetes要引入pod的概念,而不直接操作Docker容器

    首先我们要明确一个概念,Kubernetes并不是只支持Docker这一个容器运行时,通过我的另一篇文章什么是Kubernetes的CRI-容器运行时接口介绍的内容,我们知道Kubernetes通过C ...

  6. 【docker】虚拟化和docker容器概念

    基础了解 IAAS: 基础设施服务,(只提供基础设施,没有系统) **SAAS: ** 软件即服务,(提供基础设施和系统) PAAS: 平台即服务,(提供基础设施和系统和软件一个整体平台,拿来用就行) ...

  7. docker:虚拟化和docker容器概念

    目录 前言 一.虚拟化简介 1.虚拟化概述 2.耦合与解耦合 2.1 耦合 2.2 解耦合 2.3 小结 3.虚拟化作用 4.虚拟化工作原理 4.1 QEMU 4.2 KVM 4.3 虚拟化类型 4. ...

  8. 49学习容器管理平台 Docker Swarm 的基本概念和应用,包括节点管理、服务编排

    Docker Swarm 是 Docker 官方提供的容器编排工具,可以管理多个 Docker 节点,并支持自动化扩展.负载均衡等功能.下面是 Docker Swarm 的基本概念和使用方法,包括节点 ...

  9. 简述Docker镜像、容器、仓库概念

    Docker镜像 Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统. 例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称 ...

最新文章

  1. 电量检测芯片BQ27510使用心得
  2. Oracle取最大值问题
  3. 科大星云诗社动态20210225
  4. 框架之 hibernate之二
  5. 西安4年java多少时间_西安学习java一般要多久
  6. PiFlow大数据流水线系统v0.9源码
  7. 完美的xslt数值函数与字符串函数
  8. 招C++高手及强力美工
  9. 简单几何(四边形形状) UVA 11800 Determine the Shape
  10. 编译原理实验二【语法分析程序设计】
  11. 开源视频云转码 m3u8_8种开源视频游戏
  12. 一部手机必须能用 7 年?苹果、三星、Google:三年支持差不多!
  13. hive:窗口函数/开窗函数 OVER()(笔记)
  14. 蓝绿发布、金丝雀发布、A/B测试
  15. rabbitMQ修改默认端口
  16. RuntimeError: NCCL error in: /pytorch/torch/lib/c10d/ProcessGroupNCCL.cpp:784, unhandled system erro
  17. CPU当中的分支预测
  18. 百度百科人物创建要求是什么,自己的人物简介怎么上百度百科
  19. 高中物理应用计算机教学心得,信息技术在物理教学中运用教学心得
  20. ava中volatile关键字

热门文章

  1. Spring Cloud Feign 请求压缩 、Feign的日志级别配置
  2. android中有哪些utils的作用,AndroidUtils
  3. Requests库实战(二)---破解百度翻译
  4. 计算机编程试讲教案,2016教师资格证面试试讲高中信息技术教案:QBASIC分支结构程序...
  5. ubuntu命令行启动浏览器_Ubuntu 秘笈之命令行下管理浏览器书签
  6. php hash pbkdf2,PHP hash_pbkdf2 哈希(Hash)函数
  7. mui hello html5 安装,HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试(示例代码)...
  8. 光模块的正确安装方法和使用须知
  9. 4路视频+4路百电(物理隔离)+8路电话+开关量+串口+电话光端机 武警光端机
  10. 【渝粤教育】国家开放大学2018年秋季 0341-21T高级英语听力(2) 参考试题