Docker用途
- 将执行
程序和其运行环境一起打包 ,利用镜像和容器技术实现"一次打包 到处运行", 免去运行环境依赖 -
方便部署 迁移扩展通过Dockerfile等技术可以实现自动化 - 通过
仓库机制,不用手动复制 而是直接从仓库拉取镜像即可 方便部署 - 通过
tag技术进行类似于git的版本控制 - 相比于虚拟机更加轻量化占用
更少资源
Docker组成
Docker客户端
- 即在终端
输入的命令行,与docker服务器部分交互的接口
Docker服务器
- 即你输入命令行以后它在底层给你
执行工作的那部分 - 类似mysql的服务端部分,后台
监听着客户端的请求,并且管理着docker的镜像、容器、网络、磁盘等(图中只列出了镜像与容器) - 实现原理是通过
守护进程来实现 - docker服务部分可以与客户端运行在
同一台机器也可以是不同机器(通过远程连接)
Docker镜像
- 镜像是一种软件包 ,这种软件包它包含了
运行某个软件所需要运行环境,他是静态只读的文件模板. - 比如web应用需要jdk环境、需要tomcat容器、需要linux操作系统 我们可以把这一切都进行打包成一个整体 ,这个整体就是一个镜像
- 打包后的镜像在某台机器上能运行,那它就能够在
任何装有docker的机器上运行 - 任何镜像的创建会
基于其他的父镜像,也就是说镜像是一层套一层, - 比如一个tomcat镜像,需要运行在centos/ubuntu上,那我们的tomcat镜像就会基于centos/ubuntu镜像创建
- 可以直接到Docke仓库上
拉取一个做好的镜像直接使用
Docker容器
- 上一步我们构建的镜像只是一个静态的文件,容器是镜像
运行以后的一个实体 - 容器在里面可以运行
一个或者一组应用 镜像 - 我们可以控制容器的
启动、开始、停止、删除。 - 比如上面打包好的web应用运行镜像下载后用docker运行此镜像 形成一个容器,在容器里面可以通过里面配好的环境进行其他应用的运行
- 容器之间是相互隔离的
Docker容器数据卷
- 存在问题
应用程序产生的数据(比如操作日志、异常日志、数据)也是在容器内的系统中存放的,
默认不会做持久化(不会永久保存的)
随着容器的关闭,容器内的数据也会丢失,
重新开启的容器不会加载原来的数据(简单说就是容器重新启动又是另外一个实例了)
- 解决方案
容器数据卷的设计目的就是做数据的持久化和容器间的数据共享,
数据卷完全独立于容器的生命周期,
也就是说就算容器关闭或者删除,数据也不会丢失。
简单点说就将宿主机的目录挂在到容器,应用在容器内的数据可以同步到宿主机磁盘上,
这样容器内产生的数据就可以持久化了。
Docker仓库
- 存放镜像的仓库 ,
- 可以到上面获取镜像 也可以自己
上传自己配置好的镜像 - 同一个镜像又会有多个版本 在docker中被
称为tag
Docker仓库注册服务器
- 我们有时候会把
Docker注册服务器和Docker仓库不加区分,其实Docker注册服务器严格意义上可以理解为是仓库的仓库 - 它上面放着多个仓库,按照
功能不同来划分可以分为比如Ubuntu仓库 Centos仓库等等 按照属性不同划分可以分为公有仓库 私有仓库 - DockerHub是官方提供的
最大的公有仓库你也可以在本地网络创建自己的私有仓库
Docker对比
- 如果上面两张图对比的还是比较抽象的话
- 这里引用一个大佬的比喻
- 来自https://www.cnblogs.com/peng104/p/10296717.html