发布时间:2025-01-17 人气:213次
Docker介绍
Docker是一种开源的容器化平台,它能够将应用程序及其所有运行所需的环境(如依赖库、配置文件等)打包成一个“容器”。这些容器可以在“任何”环境中运行,无论是开发者的电脑、测试服务器,还是生产环境的云平台。
一句话总结:Docker是一个帮助开发者“打包一次,运行到处”的工具。
物理机、虚拟机、Docker
说到容器就不得不提到此三者的概念,为了理解和区别,我做了一个图和一个表。
架构图如下,看图的方法是由下往上看,就是从最底层基础设施层往上,下面的介绍会结合这张图,所以要把图和文字结合起来一起理解。
物理机架构
大家都比较熟悉,有了硬件设备,即图中最底层的基础设施,比如电脑、小主机、工控板等等;装好系统,比如大家常用的WindowsXP/7/10/11、Linux各种发行版、黑群晖、Unraid、飞牛OS等等;最后在系统里面装上软件/APP,既可以愉快的玩耍了。
虚拟化架构
虚拟机底部两层和物理机架构一致,使用倒数第三层的虚拟机管理系统,来创建、管理各个虚拟机,具体能运行多少虚拟机,取决于硬件资源和创建的虚拟机资源大小。在虚拟机系统里即上图的GuestOS里安装需要的软件即可使用。这里我把虚拟机架构又分为两种情况:
第一种:主机操作系统为普通系统,在系统里安装虚拟机管理系统,比如在Windows里面安装HyperV,或者大家更为常用的VmwareWorkstation、VitualBox,随后在这些虚拟机管理软件里再安装各种虚拟机,这种便属于第一种情况。
第二种:主机操作系统为虚拟化定制的系统,直接在此系统里安装虚拟机即可使用。比如底层系统安装ESXI、XenServer、PVE这种虚拟化系统,一般是企业使用场景,不过随着物理硬件性能的提示和虚拟化的普及,越来越多的个人也都开始使用,包括我之前的文章就分享过一些esxi和pve的使用。这种情况下虚拟机性能损失较小、管理更加扁平化。
Docker架构
理解了虚拟机,Docker其实也就很好理解了。Docker是更为轻量的一种容器化技术,不像虚拟机一样虚出来整个操作系统,Docker一般封装一种或多种应用/服务。虚拟机依赖CPU,属于硬件层功能,Docker依赖操作系统容器化能力,属于进程级,所以Docker同样可以运行在虚拟机里,虽然虚拟机也可以嵌套虚拟化,但这种情况性能会大打折扣,一般不会使用。
对比图表
我整理了一份三者在不同维度上面的介绍,微信公众号的表格太难编辑了,这里干脆就直接放图片了
Docker相关概念
上面了解了Docker的基本介绍,想必大家对Docker是什么,能做什么,有了最基本的认识,下面我就结合飞牛自带的Docker管理工具,再对Docker相关的概念进行讲解。
Docker引擎/守护程序
打开飞牛的Docker,映入眼帘的这个概览,实际上就是对整个Docker引擎/守护程序所管理的服务、容器、镜像、计算资源使用率的一个基础展示
如果你使用SSH登陆到后台,你可以使用各种相关的命令行去详细的查看Docker详细的各类信息,比如下图,使用Dockerinfo命令产生的回显。命令行操作新手了解即可,这里就不展开介绍
Docker镜像
镜像是我们下载得到的应用/服务的模板,这个和平时我们下载的软件包类似,但又不完全一样。它是一个轻量级、独立的可执行软件包,包含了运行某个应用程序所需的所有环境和资源,比如代码、运行时、库和配置文件。
这里我举个例子,对于ARM架构的手机来说,有IOS、安卓、鸿蒙,这些系统都有自己独立的安装包格式,彼此不兼容。但是Docker的镜像不是,只要你架构相同(arm或者x86),那么你就可以在任意一个运行Docker引擎的系统或平台使用你的镜像,无需关注各种依赖、环境。
飞牛的镜像管理也没可以非常方便的对本地镜像进行管理,比如删除、添加,如果有镜像更新,也能进行提示,点击即可一键更新
镜像仓库
镜像仓库比较好理解,当我们需要下载镜像的时候,需要有一个地方让我们能够找到这些镜像,镜像仓库就是这么一个东西,比较像应用商店。DockerHub是默认的官方镜像仓库,但是由于一些特殊的原因,目前国内处于无法直接访问的状态。
所以想要愉快的玩转飞牛的Docker,上手第一步先去切换一下镜像仓库,不要使用DockerHub,为什么第一步要切换呢,因为切换仓库的时候会重启Docker服务,所有正在运行的容器都会中断。关于第三方仓库地址和自搭建Docker加速可以看我往期文章:
五分钟搭建个人Docker加速源,突破网络限制!
Docker网络
Docker默认会有none、bridge、host三种网络模式。
none模式:不为容器分配网络接口,容器完全隔离,NAS场景下基本无用武之地
bridge模式:默认模式,通过宿主机的虚拟网桥(docker0)实现容器与宿主机及其他容器通信。容器间网络隔离,支持自定义端口映射。
host模式:容器直接使用宿主机网络栈,与宿主机共享IP地址和端口。性能最好,无法进行自定义端口映射,容器暴露什么端口,宿主机就暴露什么端口。
我们在创建容器的时候一般也不用去关注选择什么模式,所以上图可以看到我的飞牛Docker网络里面已经给我创建了很多bridge模式的网络。
Docker容器
上面我们介绍了仓库、镜像、网络,接下来就可以正式创建容器了
点击容器界面右上角的添加容器,选择我们下载的镜像,默认会使用镜像名作为容器名,也可以手动更改
接着到了容器的高级设置界面,这里一共六个部分,实际上大部分都是不需要配置的,如果需要配置,一般官方的文档都会介绍,告诉你应该怎么配
这里面有几个相对比较重要的,首先便是端口设置和存储位置,这俩是最重要的。
端口设置:比较好理解,如果使用默认的bridge模式,就是将物理机的某个端口和容器内部的服务端口进行绑定,如果使用的是host模式,那就无法自定义,跟随容器进行暴露。
存储位置:这个我觉得其实可以单独做成一个功能,比如上文讲的Docker网络,飞牛就单独做了一个菜单。因为容器的持久化数据是非常重要的,我们可以在这里将宿主机的存储路径和容器内部路径进行关联,也叫做持久化数据,这样有什么好处呢?
如果我没有进行存储卷(对应飞牛存储位置)的映射,我的容器删除时,这些相关的数据也都会一并删除;如果我手动指定了存储卷的映射关系,不管我的容器本身是什么状态:运行、停止、删除,都不会影响我映射的存储数据。
举个生活中的例子:假设你在家里有一个专门存放重要文件的保险箱,无论你搬家还是重新装修房子,这个保险箱都会被完整保留下来。
其次是环境变量和网络,这两部分从一定程度上也会影响容器的正常运行和访问,网络上面已经单独讲过,绝大部分场景无需修改,使用默认的bridge即可;环境变量一般也不需要更改,如果需要,官方的手册一定会详细介绍。
剩下的功能和命令,基本不需要修改,可以进行无视,这里就不介绍了。
DockerCompose
Docker提供的一个工具,用于定义和运行多容器的应用程序。通过一个简单的YAML文件(通常命名为docker-compose.yml),我们可以用配置文件描述多个服务(容器)的配置,包括镜像来源、网络配置、数据卷挂载、依赖关系等,然后通过一条命令启动这些服务。
简单来说:
如果Docker是一个“容器运行管理工具”,DockerCompose就是一个“容器编排工具”。它可以帮助我们一键启动、停止或者管理由多个容器组成的复杂应用。
对于普通用户来说,我们不需要掌握怎么去编写这份YAML配置文件,大多要使用Docker部署指导也都会给出这份配置文件,比如下图是我之前介绍过的一个PDF工具集的项目
如果我们要使用Compose进行创建容器,只需要复制配置文件,粘贴到飞牛的创建docker-compose.yml输入框内,输入一个项目名称,选择一个项目目录,然后根据需求,适当的修改映射端口、存储路径、环境变量即可。