目录
一、docker为什么会出现
二、docker简介
三、传统虚拟机和容器的对比
四、docker能解决什么问题
五、docker三要素
5.1. 前置条件
5.2. 查看自己的内核
5.3. docker的基本组成
5.4.三要素总结
5.4.1.Docker
5.4.2.镜像文件
5.4.3.容器实例
5.4.4.仓库
六、Docker工作原理
七、docker安装
不同环境的依赖、配置的差异导致不同环境之间的切换成本非常高,随着项目数量的增多,这种成本与日俱增。
为了解决不同环境、不同配置之间的切换、扩缩容等问题,便出现了以docker为代表的容器化技术。
这个标准化的解决方案就是,系统平滑移植,容器虚拟化技术。
docker解决的问题,简单说就是,软件可以带环境安装。也就是,安装的时候把原始环境一模一样地复制过来。开发人员利用docker可以消除协作编码时“在我的机器上可以正常工作”的问题。
docker包含两方面技术:
运行文档、配置环境、运行环境、运行依赖包、操作系统发行版、内核等,一起打包成镜像。
一次镜像,处处运行。
VMware就是一个虚拟化技术的代表软件。
Docker是基于Go语言实现的云开源项目,主要目标是:“Build,Ship and Run Any App, Anywhere”,即构建、装载、运行任何应用、任何环境。通过对应用组件的封装、奋发、部署、运行等声明周期的管理,使用户的app(可以是一个web应用或数据库应用等)及其运行环境能够做到“一次镜像,处处运行”。
Docker也是Linux容器技术的一种实现。
将应用打成镜像,通过镜像成为运行在Docker容器上面的实例。而docker容器在任何操作系统上都是一致的,这就实现了跨平台、夸服务器。只需要一次配置好环境,换到别的机器上就可以一键部署,大大简化了操作。
docker就是解决运行环境和配置问题的软件容器,方便做持续集成,并有助于整体发布的容器虚拟化技术。
虚拟机就是带环境安装的一种解决方案。可以在一个操作系统上运行另一套操作系统。
虚拟机技术基于安装在主操作系统上的虚拟机管理系统(比如,VMware、VirtualBox等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。
虚拟机技术的缺点:
鉴于此,Linux发展出了另一种虚拟化技术:
Linux容器(Linux Containers,缩写LXC)
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程需要的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试最后到生产的整个过程,它都具有可移植性和一致性。
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此变得高效、轻量并保证部署在任何环境中的软件都能始终如一地运行。
Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,docker优势提现为启动速度快、占用体积小。
基于容器的虚拟化,仅包含业务运行所需的runtime环境,centos/ubuntu基础镜像仅170M;宿主机可部署100~1000个容器。
总结:
DevOps:开运/运维
一次构建、到处运行:
Docker借鉴了集装箱的理念,不同的是docker运输的是镜像,集装箱运输的是货物。
几个重点:
docker官网:Home - Docker
docker hub:https://hub.docker.com/
Docker并非是一个通用的容器工具,它依赖于已存在并运行的linux内核环境。
Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的linux主机。
因此,docker必须部署在Linux内核的系统上。如果其他系统想部署docker,就必须安装一个虚拟linux环境。
在windows上部署docker的方法是先安装一个虚拟机,并在安装linux系统的虚拟机中运行docker。
目前CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS7(64-bit)上,要求系统为64位、linux系统内核版本为3.8以上。
cat /etc/redhat-release
# 或者
uname -r
docker三件套、三要素:
镜像可比拟为java的类,容器可比拟为java的类实例,仓库可比拟为我们的maven仓库。
docker镜像就是一个只读模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器。
它也相当于一个root文件系统。比如官方镜像centos:7就包含了完整的一套centos:7最小的root文件系统。
还相当于容器的“源代码”,docker镜像文件类似于Java的类,而docker容器实例类似于Java中new出来的实例对象。
Docker | Java |
镜像 | 类 |
容器 | 对象 |
1.从面向对象角度
docker利用容器(container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的、隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
2.从镜像容器角度
可以把溶气气看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库
仓库(repository)是几种存放镜像文件的场所。类似于maven仓库,存放各种jar包的地方;GitHub仓库,存放各种Git项目的地方;docker公司提供的官方registry被成为Docker Hub,存放各种镜像模板的地方。
仓库分为公开仓库(public)和私有仓库(private)两种形式。
最大的公开仓库是Docker Hub(HTTPS://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成docker容器实例(类似于Java中new出来的一个对象)。
image文件可以看作是容器的模板。docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。
image文件生成的容器实例,本身也是一个文件,成为镜像文件。
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
就是存放镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库拉下来就可以了。
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。
docker的安装比较简单,但是也会有坑,可以参考我的这篇文章:
Linux系统上安装Docker
至此,我们的docker简介与安装已经完毕!