什么是docker
介绍docker之前,我们先了解一下什么是容器。容器就是将软件打包成标准化单元,以用于开发、交付和部署。通俗地说,容器就像是书包里面可以装各种文具、衣柜里可以存放各种衣服。
docker
- docker是世界上领先的软件容器平台
- docker使用go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC
- docker能够自动执行重复性任务,例如搭建和配置开发环境
- 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
docker思想
- 集装箱
- 标准化:运输方式、存储方式、API接口
- 隔离
docker容器的特点
- 轻量,在一台机器上运行的多个docker容器可以共享这台机器的操作系统内核;他们能够迅速启动,只需占用很少的计算和内存资源、镜像是通过文件系统层进行构造的,并共享一些公共文件,这样就能尽量降低磁盘用量
- 标准,docker容器基于开放式标准,能够在所有主流Linux版本、Windows以及VM、裸机服务器和云在内的任何基础设施上运行
- 安全,docker富裕应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。
为什么要用docker
- docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类的问题
- 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间
- 避免公共的服务器,资源会容易受到其他用户的影响
- 善于处理集中爆发的服务器使用压力
- 可以很轻易的将一个平台上的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况
- 使用docker可以通过定制应用镜像来实现持续集成、持续交付、部署
容器VS虚拟机
简单来说:容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。
传统虚拟机技术是虚拟出一套硬件后,在其运行一个完整操作系统,在该系统上再运行所需应用进程,而容器内的应用进程直接运行在宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统的虚拟机更为轻便
容器和虚拟机
虚拟机和容器适用于不同的场景,虚拟机擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不容的用户。而docker通常用于隔离不同的应用,例如前段、后端以及数据库。
docker基本概念
- 镜像
- 容器
- 仓库
镜像(image)–一个特殊的文件系统
操作系统分为内核和用户控件,对应Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而docker镜像,就相当于一个root文件系统。
docker是一个特殊的文件系统,处理提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数
容器(container)–镜像运行时的实体
镜像和容器的关系,就像面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行属于自己的独立的命名空间。
仓库–集中存放镜像文件的地方
一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。