前言:Docker学习前的相关说明
学习docker之前,先要知道的几个网站
Docker官网:https://docs.docker.com
Docker的gitub地址:https://github.com/mboy/mboy
docker官方镜像仓库dockerhub:https://registry.hub.docker.com
Docker logo:
服务器、虚拟机、容器之间的区别
服务器-----硬件虚拟化(vmware、openstack、kvm等)----软件虚拟化(docker、containerd、podman等)
基于虚拟机的虚拟化(左图)
1、基础设施:硬件资源:存储、cpu、网络等
2、主机操作系统:安装在服务器上的操作系统:linux、windows、mac等
3、虚拟机管理程序:位于主机操作系统,负责创建和管理虚拟机(vmware、hypervisor、vmfusion、kvm、openstack等)
4、虚拟机:虚拟机管理程序创建出来的,就像独立的服务器
5、应用和依赖:每个虚拟机上安装的所需要的应用和库(Bins/Libs)
基于容器的虚拟化(右图)
1、基础设施:硬件资源:存储、cpu、网络等
2、主机操作系统:安装在服务器上的操作系统:linux、windows、mac等
3、容器引擎:运行在操作系统之上,负责创建和管理容器,如docker等
4、容器:包含应用及所有依赖,共享操作系统内核,但相互隔离
主要区别:
一、操作系统的开销:
1、虚拟机:每个虚拟机都有自己的操作系统,开销比较大
2、容器:所有容器共享操作主机系统内核,无多余的系统开销,资源利用率高效
二、启动时间:
1、虚拟机:启动操作系统,速度慢
2、容器:只需要启动依赖和库,速度快
1. 为什么要学习docker
我们都经历过写代码调试代码的过程,比如一个java代码,用mvn编译后生成jar或者war文件,jar文件可以直接使用,war文件需要放置到tomcat下使用。开发在开发环境上调试好的代码,发给测试在测试环境上测试,最后在生产环境部署,理想中是这样的,但是真是的情况,会是什么样子呢?
- 开发环境没问题,测试环境报错:排查后发现是启动脚本里的jdk版本和代码要求版本不匹配
- 测试环境没问题,生产环境报错:生产环境中的tomcat版本和jdk版本不匹配
结果开发、测试、运维都觉得不是自己的问题,互相甩锅,互相扯皮,影响进度,影响关系,最关键可能会影响到绩效
docker就不一样了,可以把代码和用到的所有依赖,包括jdk、tomcat、war文件、jar文件等,甚至是linux文件,都打包到一起,放到镜像里,保持环境的一致性。只需要把这个镜像运行起来,就可以把服务运行起来,运行镜像的统称为容器运行时。
如果想要了解docker镜像,那就需要了解下iso这种文件,以及iso和daocker镜像之间的关系
iso文件
·用途:iso文件通常用户创建光盘镜像,常见于操作系统的安装介质和光盘备份,他们通常用于系统安装、引导和分发完整的操作系统
内容:iso文件包含操作系统的完整文件系统,包括内核、驱动程序、应用程序、配置文件和引导 加载程序
结构:iso文件是一个扁平的文件系统镜像,包含一个光盘格式的文件系统(如ISO 9660),用于光盘刻录和挂载
使用方式:iso文件通常用于创建可启动的安装介质,通过虚拟机管理程序或物理引导安装操作系统
灵活性:iso文件较大,因为包含了完整的操作系统和相关工具等,适合系统初始化安装
管理:iso文件可以通过光盘、usb设备或网络分发,通常不会像docker镜像那样频繁更新和管理
Docker镜像
用途:docker镜像用于创建容器,这些容器可以运行特定的应用程序及其以 来。他们专注于应用程序的打包和部署
内容:docker镜像包含操作系统、应用程序代码、运行时环境、库、依赖和 配置文件等。每个镜像层都是只读的,容器在运行时会添加一个可写层
结构:docker镜像是分层的,每一层都是一个增量更改。镜像层通过联合文 件系统(如OverLayFS)组合在一起