基础:
Docker是基于Go语言开发的开源项目
文档地址:https://docs.docker.com/ Docker的文档是超级详细的
仓库库地址:https://hub.docker.com/ git里面的命令也能使用
Docker百度百科:https://baike.baidu.com/item/Docker/13344470?fr=aladdin
为什么会出现Docker?
开发人员和运维人员之间微妙的问题:
我在我的电脑上可以运行,为什么到你电脑上就不可以了呢?
版本更新,导致服务不可用
场景:
原来:要发布一个项目jar或war,直接把jar或war给运维
在服务器上配置一个应用环境,环境配置每一个机器都要部署环境,配置超麻烦,费时费力,不能够跨平台。 (跨平台概念是软件开发中一个重要的概念,即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。相对而言如果某种计算机语言不用修改代码即可做到高度跨平台,那么此语言就越抽象,硬件控制力就越低,只适合开发高度抽象的模型系统。诸如PHP和易语言,都已做到了跨平台。它们将可以在多种系统下开发,运行和维护。)
Docker针对上面的问题,给出了解决方案:
现在:开发打包部署上线,一套流程做完
(jar+(Redis MySql jdk ES)),项目带上环境安装打包
即java---jar(环境)---打包项目带上环境(镜像)---(Docker仓库:商店)---下载发布的镜像---直接运行即可!
Docker历史?
在容器技术出来之前,我们使用的是虚拟机技术。
虚拟机是如何做的?在Windows系统中安装一个虚拟机软件例如Vmware,通过这个软件我们可以虚拟出来一台或多台电脑!
传统的虚拟机技术
虚拟机技术缺点:
1.资源占用多,模拟了完整的操作系统,比较笨重
2.冗余步骤多
3.多个启动很慢
容器技术
容器化技术不是模拟的一个完整的操作系统,只模拟了最核心的环境
比较Docker和虚拟机技术的不同:
~传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件,不过比较笨重,好处是模拟出来的每一个电脑和真正的电脑是差不多的,而且相互隔离
~容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,没有虚拟我们的硬件,所以就轻便了。每个容器间是相互隔离的了,每个容器内核都有一个属于自己的文件系统,互不影响
~虚拟机也是属于虚拟化技术;Docker容器技术,也是一种虚拟化技术。
Docker能干嘛?
一个新名词:DevOps(开发,运维)https://baike.baidu.com/item/DevOps/2613029?fr=aladdin这是对我们开发人员的新要求,他包括四个重要的特点:
i.应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
ii.更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样,可以打包一起升级
一个服务器上可以运行多个容器,容器之间可以交互
iii.更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
iv.更高效的资源利用
Docker是内核级别的虚拟化,在一个物理机上可以运行很多的容器实例,服务器的性能可以被压榨到极致
名词概念
镜像(image):
Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run===>tomcat1容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):
Docker通过容器技术,可以独立运行一个或者一组应用
容器是通过镜像来创建的
容器可以启动,停止,删除基本命令
目前,可以把容器理解为一个简易的Linux系统,我们的项目就是放在这个简易的Linux系统上
仓库(repository):
仓库就是存放镜像的地方
仓库分为公有仓库(所有人可以访问)和私有仓库(只有自己可以访问)
官方的Docker仓库:Docker Hab(默认是国外的)