Docker为什么出现?
一款产品:开发到上线 两套环境!应用环境,应用配置!
可能在开发环境你的产品是正常的,但是到了线上环境你的产品可能就会出现各种原因,或许是因为环境的不同,也可能是因为配置的不同等等各种原因导致服务的不可用!对于运维来说,考验就非常大。
环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop等等)!费时费力。
现在你需要发布一个项目(jar包 +(环境 Redis、Mysql、JDK、ES)),项目需要带上环境安装打包!此时Docker就可以帮你解决。
相当于Docker帮你将jar包和环境打包到一起部署上线,一套流程做完!
举个抽象的例子你用Java开发的apk应用(应用商店)然后吕世昊使用apk安装即可使用,而Docker是你用java开发一个jar,然后依赖一些环境如Mysql等等,而你只需要将这个jar和环境打包成一个镜像文件然后发布Docker仓库中(商店),吕世昊就可以下载你发布的Docker镜像,一键运行就ok了。
Docker简介
Docker是基于Go语言开发的!开源项目!
Docker的官网:https://www.docker.com
Docker的文档地址:https://docs.docker.com/ (Docker的文档是超级详细的)
Docker的下载:(进入Docker文档页面就有下载的入口)
Docker的仓库地址:https://hub.docker.com/
Docker和虚拟机的不同
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
Docker容器内的应用直接运行在宿主机的内容,Docker容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
每个Docker容器间是互相隔离,每个Docker容器内都有一个属于自己的文件系统,互不影响。
Docker的好处
应用更快速的交付和部署
传统:给你一大堆帮助文档,安装程序。
Docker:打包镜像发布测试,一键运行。
更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像,扩展 服务器A!服务器B!
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更高效的计算资源利用:
Docker是内核级别的虚拟化,在一个物理机上可以运行很多容器实例。
Docker的基本组成
- Client:客户端
- DOCKER_HOST:Docker的服务
- Registry:远程仓库
- docker build:构建一个容器
- docker pull:拉取一个容器
- docker run:运行一个容器
- Docker daemon:Docker的守护进程
- Images:镜像(可以理解为Class类)(镜像就好比是一个模板,可以通过模板创建容器实例或者说容器服务,一个镜像可以创建多个实例)
- Containers:多个容器(可以理解为类实例出来的对象)(可以对容器进行启动,停止,删除等基本命令)
- Registry:远程仓库(存放镜像的地方,仓库分为公有仓库和私有仓库)(Docker Hub是国外的共有仓库地址,可以配置镜像加速使用国内阿里云的仓库)