Docker学习笔记(一)-什么是Docker?


docker简介

docker是什么?

  • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

为什么需要docker

  • 因为环境配置不同,很多人在开发中也会遇到这个情况,甚至开发的软件到了测试人员的机器上便不能运行。但这都不是重点。重点是,如果我们有一个可靠的、可分发的标准开发环境,那么我们的开发将不会像现在这么痛苦。Docker 便可以解决这个问题。Docker 镜像并不会因为环境的变化而不能运行,也不会在不同的电脑上有不同的运行结果。可以给测试人员提交含有应用的 Docker 镜像,这样便不再会发生“在我机器上是可以运行的”这种事情,很大程度上减轻了开发人员测试人员互相检查机器环境设置带来的时间成本。
  • 作为一个程序员,新技术的迭代周期也十分短暂,因此快速学习一门新技术就很重要,其中如何快速的搭建新技术的开发环境就显得特别重要,当我们花费几周甚至一个月磕磕碰碰的搭建好一个不是很成熟但是能使用的开发环境的时候,使用docker搭建环境可能只需要一行命令,就能搭建起一个成熟的最佳配置的开发环境

docker的原理

形象的说,docker就是集装箱原理

  • Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

  • docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。

docker的优点

  1. 简化程序
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

  2. 避免选择恐惧症
    如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

  3. 节省开支
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

    docker的应用场景

  • 使应用的打包与部署自动化
  • 创建轻量、私密的PAAS环境
  • 实现自动化测试和持续的集成/部署
  • 部署与扩展webapp、数据库和后台服务

    docker的局限

  • Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
  • LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
  • 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
  • 网络管理相对简单,主要是基于namespace隔离
  • cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
  • Docker对disk的管理比较有限
  • container随着用户进程的停止而销毁,container中的log等用户数据不便收集

文章作者: 我若为侠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我若为侠 !
 上一篇
消息队列之RabbitMQ(一) 介绍、核心概念、交换器类型 消息队列之RabbitMQ(一) 介绍、核心概念、交换器类型
消息队列之RabbitMQ(一) 介绍、核心概念、交换器类型背景博主在介绍 RabbitMQ 之前有必要说说消息队列是什么? 消息是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以很复杂,可能包含嵌入对象。 消息队列是一
下一篇 
Laravel核心 - 门面Facades Laravel核心 - 门面Facades
Laravel的门面Facades是什么门面为应用服务容器的绑定类提供了一个静态接口。Laravel内置了很多门面,你可能在不知道的情况下正在使用它们。laravel的门面作为服务容器中低层类的静态代理,相比于传统静态方法,在维护时能够提供
2020-07-12
  目录