序言:
文章内容输出来源:拉勾教育Java高薪训练营。
本篇文章是学习课程中的一部分课后笔记
一、 Docker 介绍、概念
1. Docker 介绍
Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最 初发起者是dotCloud公司(Docker Inc)、Docker项目已加入了Linux基金会,并遵循Apache2.0协议,全部开源代码均在https://github.com/docker/docker上进行维护。
Docker首次为应用的开发、运行和部署提供了“一站式”的实用解决方案。Linux容器技术(LXC)
早期的Docker是基于Linux容器技术(Linux Containers,LXC)的。
最早的容器技术可以追溯到1982 年Unix系列操作系统上的chroot工具(直到今天,主流的Unix、Linux操 作系统仍然支持和带有该工具)。
早期的容器实现技术包括Sun Solaris 操作系统上的Solaris Containers(2004年发布),FreeBSD操作系统上的 FreeBSD jail(2000年左右出现),以及GNU/Linux上的Linux-VServer和 OpenVZ。从Linux容器到Docker
在LXC的基础上,Docker进一步优化了容器的使用体验Docker提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以更简单明了地管理和使用容器Docker通过引入分层文件系统构建(aufs)和高效的镜像机制,降低了迁移难度,极大地提升了用户体验。
自0.9版本开始,Docker 开发了libcontainer项目,作为更广泛的容器驱动实现,从而替换掉了LXC的实现。
2. Docker的应用场景
-
快速,一致地交付应用程序、镜像打包环境,避免了环境不一致的问题Docker可以为开发人员提供 标 准化 的本地工作环境给应用程序和服务,从而简化了开发生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程
如果有以下场景可以使用Docker交付:- 开发人员在本地编写代码,并使用Docker容器与其他同事共享劳动成果。
- 使用Docker将应用程序推送到测试环境中,并执行自动和手动测试。
- 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中以
进行测试和验证。 - 测试完成后,将修补程序推送给生产环境就像将更新的镜像推送到生产环境一样简单。
- 响应式部署和扩展 Docker是基于容器的平台允许高度可移植的工作负载。Docker容器可以在开发人员的本地笔记本电脑上,数据中心中的物理或虚拟机上,云提供商上或混合环境中运行。 Docker的可移植性和轻量级的特性还使可以轻松地动态管理工作负载,并根据业务需求指示实时扩展或拆除应用程序和服务。
- 在同一个硬件上运行更多工作负载 Docker轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行,经济高效的替代方案,因此我们可以利用更多的计算能力来实现业务目标。Docker非常适合于高密度环境以及中小型部署,而需要用更少的资源做更多的事情。
3.Docker与虚拟机比较
- 3.1 虚拟化
虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以将物理机的CPU、内存、硬盘、网络等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统,构建虚拟的应用程序执行环境。这就是我们通常说的虚拟机。
比如:VMware 、VirtualBox、KVM等。
虚拟化技术的优点:
提升IT效率
降低运维成本
更快地部署工作负责
提高应用性能
提高服务器可用性
消除服务器梳理剧增情况和复杂性虚拟机的缺点:
占用资源较多
性能较差
扩展能力较差
环境迁移能力较差
-
3.2 容器化
借鉴了集装箱的解决方案,提出了类似集装箱的方式封装应用以及它的运行环境,将应用和环境打包成一个轻量化、可移植、自包含的容器。
容器是轻量级的,因为它们不需要虚拟机管理程序的额外负载,而是直接在主机的内核中运行。
这意味着与使用虚拟机相比,可以在给定的硬件组合上运行更多的容器。
甚至可以在实际上是虚拟机的主机中运行Docker容器
- 容器有四个特点:
容器共享宿主机内核
容器使用内核的功能对进程进行分组和资源限制
容器通过命名空间保证隔离
容器像是轻量级的VM(占用空间更少,速度更快),但不是虚拟机
二、 Docker核心组件
1. Docker引擎
Docker使用客户端-服务器架构;
Docker客户端是用户与Docker交互的主要方式,与Docker守护进程(Docker引擎)进行通信该守护进程完成了构建,运行和分发Docker容器的繁重工作;
Docker客户端和守护程序可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序;
Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信;
Docker守护进程侦听Docker API请求并管理Docker对象,例如镜像,容器,网络和卷等,守护程序还可以与其他守护程序通信以管理Docker服务。
2. Docker镜像
Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。
镜像是基于联合(Union)文件 系统的一种层式的结构,由一系列指令一步一步构建出来。
比如:
添加一个文件;
执行一个命令;
打开一个端口。
镜像是创建Docker容器的基础。通过版本管理和增量的文件系统, Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户可以从网上下载一个已经做好的应用镜像,并直接使用我们可以利用Dockerfile构建自己的镜像。
3. Docker容器
Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
容器是镜像的一个运行实例。
可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。 可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
容器是基于镜像启动起来的,容 器中可以运行一个或多个进程。
镜像是Docker生命周期 中的构建或打包阶段,而容器则是启动或执行阶段。
镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。
4. Docker仓库
Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。
仓库注册服务器(Registry)是存放仓库的地方,其上往往存放着多个仓库,每个仓库集中存放某一类镜像,往往包 括多个镜像文件,通过不同的标签(tag)来进行区分;
根据所存储的镜像公开分享与否,Docker仓库可以分为公开仓库 (Public)和私有仓库(Private)两种形式。
目前,最大的公开仓库是 官方提供的Docker Hub,其中存放了数量庞大的镜像供用户下载。国内不少云服务提供商(如时速云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。