一款产品从开发到上线,一般都会有开发环境,测试环境,运行环境。
如果有一个环境中某个软件或者依赖版本不同了,可能产品就会出现一些错误,甚至无法运行。比如开发人员在windows系统,但是最终要把项目部署到linux。如果存在不支持跨平台的软件,那项目肯定也无法部署成功。
这就产生了开发和运维人员之间的矛盾。开发人员在开发环境将代码跑通,但是到了上线的时候就崩了。还要重新检查操作系统,软件,依赖等版本,这大大降低了效率。造成了搭环境一两天,部署项目两分钟的事件。
docker的出现就能解决以上问题:
开发人员把环境配置好,将需要运行的程序包运行成功,然后把程序包和环境一起打包给运维人员,让运维人员部署就可以了。这大大提高了项目上线的效率。
2.docker简介
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机器上就可以一键部署好,大大简化了操作。
docker简介总结:
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。docker基于Linux内核,仅包含业务运行所需的runtime环境。
3.传统虚拟机和容器的对比
3.1虚拟机
虚拟机是可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
虚拟机的缺点:
启动慢
资源占用多
冗余步骤多
3.2容器虚拟化技术
由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:
Linux容器(Linux Containers,缩写为 LXC)
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
=
3.3两者对比
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
4.docker的作用
一:更快速的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。
二:更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。
三:更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
四:更高效的计算资源利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。
6.docker的应用场景
docker借鉴了标准集装箱的概念。标准集装箱是将货物运往世界各地,docker将这个模型运用到自己的设计当中,唯一不同的是:集装箱运送货物,而docker运输软件。
7.docker三要素
一:镜像(Image)
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
二:容器(Container)
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
三:仓库(Repository)
仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等
8.docker工作原理
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。
9.docker平台架构图解
Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。
Docker运行的基本流程为:
用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。
Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。
Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以Graph的形式存储。
当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。
当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。
Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
10.docker的安装
Docker官网
Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。
Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。
因此,Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个虚拟 Linux环境。
要求系统为64位、Linux系统内核版本为 3.8以上
查看自己虚拟机的内核:
开始安装:
一:搭建gcc环境(gcc是编程语言译器)
yum -y install gcc
yum -y install gcc-c++
二:安装需要的软件包
yum install -y yum-utils
Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的机器上。Docker的迅猛发展和全新理念,席卷了整个IT界,成为云时代的一颗新星。
Docker相比于传统虚拟化方式具有更多的优势:
我们可以从下面这张表格很清楚地看到容器相比于传统虚拟机的特性的优势所在:
企业使用一项技术是为了解决当前企业环境中存在的某个痛点。目前整个软件行业存在着以下几个痛点。
(1)软件更新发布及部署低效,过程繁琐且需要人工介入。
(2)环境一致性难以保证。
(3)不同环境之间迁移成本太高。
Docker在很大程度上解决了上述问题。
首先, Docker的使用十分简单,从开发的角度来看就是“三步走”:构建、运输、运行。其中,关键步骤是构建环节,即打包镜像文件。但是从测试和运维的角度来看,那就只有两步:复制、运行。有了这个镜像文件,想复制到哪里运行都可以,完全和平台无关。
Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源,不需要考虑应用之间的相互影响。
其次, 因为在构建镜像时就处理完了服务程序对于系统的所有依赖,所以在使用时,可以忽略原本程序的依赖以及开发语言。对测试和运维人员而言,可以更专注于自己的业务内容。
最后, Docker为开发者提供了一种开发环境的管理办法,帮助测试人员保证环境的同步,为运维人员提供了可移植的标准化部署流程。
动力节点的 Docker入门教程,将带你一步一步从基础到实践学习Docker,了解什么是Docker,Docker的核心思想、核心组件诸如镜像,仓库,容器等,通过大量的实际操作循序渐进地介绍Docker,带你轻松玩转Docker,Docker技术也是当今IT从业人员的必备技能之一。
在线学习:https://www.bilibili.com/video/BV1QA411L7B5
资料下载:http://www.bjpowernode.com/?toutiao
•001.Docker视频教程:虚拟化技术发展史
•002.Docker视频教程:虚拟化技术是什么
•003.Docker视频教程:虚拟化技术的分类
•004.Docker视频教程:虚拟化技术的优缺点
•005.Docker视频教程:容器技术的发展
•006.Docker视频教程:Docker的发展 历史
•007.Docker视频教程:Docker是什么
•008.Docker视频教程:容器和虚拟机的区别(1)
•009.Docker视频教程:容器和虚拟机的区别(2)
•010.Docker视频教程:为什么要使用Docker视频教程:Docker
•011.Docker视频教程:Docker的版本
•012.Docker视频教程:Docker的安装
•013.Docker视频教程:Docker服务启动
•014.Docker视频教程:Docker服务信息
•015.Docker视频教程:Docker使用初体验-Docker的运行机制
•016.Docker视频教程:Docker使用初体验-Docker官方镜像仓库
•017.Docker视频教程:Docker使用初体验-Docker官方镜像下载
•018.Docker视频教程:Docker使用初体验-Docker镜像启动运行
•019.Docker视频教程:Docker使用初体验-访问容器中的Tomcat服务
•020.Docker视频教程:Docker使用初体验-Docker的网络访问机制
•021.Docker视频教程:Docker使用初体验-进入Docker容器内部
•022.Docker视频教程:Docker使用初体验-补充说明
•023.Docker视频教程:Docker的体系架构(1)
•024.Docker视频教程:Docker的体系架构(2)r
•025.Docker视频教程:Docker核心组件
•026.Docker视频教程:Docker核心组件-镜像的基本概念
•027.Docker视频教程:Docker核心组件-镜像的组成结构
•028.Docker视频教程:Docker核心组件-镜像的日常操作(1)
•029.Docker视频教程:Docker核心组件-镜像的日常操作(2)
•030.Docker视频教程:Docker核心组件-镜像的日常操作(3)
•031.Docker视频教程:Docker核心组件-镜像的日常操作(4)
•032.Docker视频教程:Docker核心组件-容器的基本概念
•033.Docker视频教程:Docker核心组件-容器的日常操作(1)
•034.Docker视频教程:Docker核心组件-容器的日常操作(2)
•035.Docker视频教程:Docker核心组件-仓库的基本概念
•036.Docker视频教程:Docker核心组件-官方仓库与阿里云仓库
•037.Docker视频教程:Docker核心组件-仓库的日常操作(1)
•038.Docker视频教程:Docker使用示例-安装MySQL
•039.Docker视频教程:Docker使用示例-访问与操作MySQL容器
•040.Docker视频教程:Docker使用示例-安装Nginx
•041.Docker视频教程:Docker使用示例-访问Nginx容器
•042.Docker视频教程:Docker使用示例-容器Nginx部署静态网站
•043.Docker视频教程:Docker使用示例-安装Zookeeper
•044.Docker视频教程:Docker使用示例-安装ActiveMQ
•045.Docker视频教程:认识Dockerfile文件
•046.Docker视频教程:Dockerfile的基本结构
•047.Docker视频教程:Dockerfile常用指令
•048.Docker视频教程:自定义JDK镜像Dockerfile文件
•049.Docker视频教程:自定义JDK镜像构建与运行测试
•050.Docker视频教程:自定义Tomcat镜像Dockerfile文件
•051.Docker视频教程:自定义Tomcat镜像构建与运行测试
•052.Docker视频教程:自定义MySQL镜像Dockerfile文件
•053.Docker视频教程:自定义MySQL镜像构建与运行测试
•054.Docker视频教程:自定义Redis镜像Dockerfile文件
•055.Docker视频教程:自定义Redis镜像构建与运行测试(1)
•056.Docker视频教程:自定义Redis镜像构建与运行测试(2)
•057.Docker视频教程:阿里云容器镜像仓库
•058.Docker视频教程:阿里云镜像仓库管理后台
•059.Docker视频教程:发布镜像到阿里云镜像仓库(1)
•060.Docker视频教程:发布镜像到阿里云镜像仓库(2)
•061.Docker视频教程:发布镜像到阿里云镜像仓库(3)
•062.Docker视频教程:Docker Hub官方镜像加速
•063.Docker视频教程:Docker部署SpringBoot项目-介绍
•064.Docker视频教程:Docker部署SpringBoot项目-本地测试
•065.Docker视频教程:Docker部署SpringBoot项目-基本流程
•066.Docker视频教程:Docker部署SpringBoot项目-打Jar包与War包
•067.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像构建
•068.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像运行与测试(1)
•069.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像运行与测试(2)
•070.Docker视频教程:Docker部署SpringBoot项目-war项目的镜像构建与运行
•071.Docker视频教程:Docker部署SpringBoot项目-war项目的测试
•072.Docker视频教程:Docker保存新镜像
•073.Docker视频教程:Docker保存的新镜像数据验证
Docker是一个开源的应用容器引擎,它基于Go语言开发,并遵从Apache2.0开源协议。使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意Linux机器上,也可以实现虚拟化。Docker容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性。Docker诞生于2013年初,目前有两个版本:Community Edition(CE,社区版)和Enterprise
Edition(EE,企业版)。
Docker有哪些特点?
1、更高效的利用系统资源
Docker对系统资源的利用率很高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,对比虚拟化技术,一个相同配置的主机往往可以运行更多数量的应用。
2、更快速的启动时间
传统的虚拟化技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大节约了开发测试,部署的时间。
3、一致的运行环境
开发过程中常见的一个问题是环境一致问题,由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中发现。而Docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现这段代码在我机器上没问题这类问题。
4、持续支付和部署
对开发和运维人员来说,最希望就是一次创建和部署,可以在任意地方运行。而且使用Docker
file使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5、更轻松的迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6、更轻松的维护和扩展
Docker使用的分层存储以及镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本。