目录
一、Docker概述
1、Docker为什么会出现
一款产品,开发——上线,两套环境!应用环境,应用配置!
开发人员——运维人员
问题:我在我的电脑上可以运行!到你那不能运行了……版本更新,导致服务不可用!对于运维的考验非常大!
要么开发去干运维,要么运维去学开发!所以,开发即运维!
环境配置十分麻烦,每一台机器都要部署环境(集群Redis、ES、Hadoop……)费时费力!
发布一个项目(jar + (Redis、ES、Hadoop……)),项目能否带上环境一块打包安装?
Docker就是干这件事情的!
传统:开发给一个jar包,其他的交给运维来做!
现在:开发、打包、部署、上线,一套走完!
就以上问题,Docker给出了解决方案!
java——jar——打包项目附带运行环境(镜像)——Docker仓库(商店)——运维下载我们发布的镜像直接运行!
Docker:码头工人,思想源自集装箱;
JRE多个应用,端口冲突,原理都是交叉的;
隔离:Docker的核心思想!每个箱子都是相互隔离的!
Docker通过隔离机制,可以将服务器利用到极致!
本质:新技术的出现都是因为存在问题,需要解决!
2、聊聊Docker的历史
Docker公司:
Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立;
有意思的是,Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。
底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的!
2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为“Docker”,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。
如今 Docker 公司被普遍认为是一家创新型科技公司,据说其市场价值约为 10 亿美元。Docker 公司已经通过多轮融资,吸纳了来自硅谷的几家风投公司的累计超过 2.4 亿美元的投资。
几乎所有的融资都发生在公司更名为“Docker”之后;
提示:“Docker”一词来自英国口语,意为码头工人(Dock Worker),即从船上装卸货物的人。
参考文章:Docker简介以及Docker历史
3、官方资料
官网:Empowering App Development for Developers | Docker
文档:Docker Documentation | Docker Documentation(文档超级详细)
仓库:Docker Hub
4、Docker能做什么
虚拟机技术 :
缺点:
1、资源占用多;
2、冗余步骤多;
3、启动慢;
容器化技术 :
容器化技术不是模拟一个完整的操作系统!
互相隔离,互不影响!
比较虚拟机和Docker的不同 :
传统虚拟机技术:虚拟出一套硬件,运行整个操作系统,然后在这个系统上安装和运行软件;
容器技术:直接运行在宿主机的内核中,容器是没有内核的,也没有虚拟硬件,所以就非常轻量级;每个容器之间都是隔离的,互不影响;
DevOps(开发、运维) :
应用更快速地交付、部署:
传统:一堆帮助文档,安装程序;
Docker:一键打包镜像,发布测试,一键运行;
更便捷的升级和扩缩容:
使用了Docker之后,我们部署应用就像搭积木一样;
直接对镜像进行升级!
更简单的系统运维:
使用了Docker之后,开发环境和测试环境高度一致;
更高效的计算资源利用:
1核2G的服务器,可以运行多个容器实例!
服务器的性能可以被压榨到极致!
5、Docker的基本组成
结构图:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统;
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等;
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像,有公有仓库和私有仓库之分,类似Maven;
对比面向对象思想:镜像相当于类,容器相当于对象;
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (Redirecting…) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |