Docker
Docker为什么会出现
一款产品:有开发环境,测试环境,线上环境三种环境
开发环境到线上环境,问题:我在我的电脑上可以运行!你的电脑不能运行!
版本更新,导致了服务不可用。环境配置麻烦,每个机器都要去部署环境(redis,mysql,hadoop,python)耗时耗力。
ps::我曾经就遇到过Jenkins之前不是用docker去部署的,然后Jenkins中的某个插件更新了,导致缺少了配置项,我排查了很久。如果用docker就不会遇到这个问题
Docker能干嘛
之前的虚拟机技术
1个内核,上面安装各种依赖的,然后才是我们的应用
虚拟机技术缺点
1.资源占用多
2.多余的步骤多
3.启动慢
容器化技术
1个内核上面可以有多个docker容器,1个容器各自有各自的应用和各自应用所需要的依赖环境
每个容器是相互隔离的,互不影响
Docker介绍
Docker简介
- Docker 是一个开源的应用容器引擎,基于 Go 语言
- 可以打包应用以及依赖包到一 个轻量级、可移植的容器中
- Docker 打包好了的容器,可以发布到任何流行的 Linux 机器上,也可以实现虚拟化
- 容器是完全使用沙箱机制,相互之间不会有任何接口(独立)
- 容器性能开销极低
- Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器
- Docker 是实现容器技术的一种工具
- Docker 容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
工作中应用的场景
- Web 应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 组建微服务架构,通过多个容器,一台机器可以跑多个服务,因此在本机可以模拟出微服务架构
Docker 实现 DevOps(开发、运维)
- 应用更快速的交付和部署(docker:打包镜像发布测试,一键运行; 传统:写一堆安装手册,部署文档,然后安装)
- 更便捷的升级和扩缩容(部署应用就像搭积木一样方便,我们把mysql, springbot等各种环境打包成一个镜像,只需要更新镜像就行; 传统的:需要对mysql,springbot进行一个个的升级,还可能出现不兼容的情况,很麻烦)
- 更简单的系统运维,开发,测试,线上环境高度一致(不会出现我开发环境是好的,你测试环境不好的这种问题)
- 更高效的计算资源利用,docker是内核级别的虚拟化,可以在一个物理机上运行很多个容器实例,服务器性能可以被压榨到极致
Docker名词解释
Docker基本组成
上图解释
- 在 Docker Client 敲 Docker 命令调用 Docker API 来操作 Host 上的 Docker 服务
- Docker 服务可以从仓库拉镜像到本机,也可以用本机镜像创建一个容器并运行
仓库(Registry)
- 集中存放镜像文件的场所
- 每个镜像文件有不同的标签(不同的版本)
- 最大的开放仓库是Docker Hub,默认是国外的: https://hub.docker.com/ 存放了数量庞大的镜像供用户下载
- 国内的公开仓库包括阿里云,网易云等,要配置镜像加速
- 仓库分为公开仓库( public )和私有仓库( private )两种形式
镜像(Images)
- 创建容器的模板
- 一个镜像可以创建很多容器
容器(Containers)
- Docker 利用容器独立运行一个或一组应用(服务),通过镜像来创建的
- 每个容器之间是相互隔离的
- 它可以被启用、开始、停止、删除
主机(HOST)
- 一个物理机或虚拟机
- 用于运行 Docker 守护进程和多个容器
- 可存放多个镜像
- 也称为宿主机,node节点
Docker 守护程序(docker daemon)
- 监听 Docker API 请求
- 也会管理 Docker 对象,如:镜像、容器、网络、卷
- 守护程序还可以与其他守护程序通信以管理 Docker 服务
Docker 客户端(client)
- 客户端使用 Docker 命令或其他工具调用 Docker API
- 当然也可以在 HOST 直接敲 Docker 命令
- 客户端可以与多个 Docker 守护程序通信