准备更新一个容器与镜像相关的系列,从Docker到K8s的入门再到实际项目进阶应用,这里感谢好朋友泽鹏,是他让我结识容器与镜像;也感谢上家公司菲恩曼,是它给了我去学习、实践的机会;最后感谢翼哥,一位纯技术人,在曼给了我们很大的帮助和启发。
本章内容
认识Docker、Docker的核心价值、Docker与虚拟机比较、Docker核心概念与安装配置。
一、认识Docker
Docker是基于Go语言实现的开源容器项目,于2013年年初诞生,官网Docker: Accelerated, Containerized Application Development。
Docker通过对应用的封装、分发、部署、运行等生命周期进行管理,如Docker官网所示Develop faster. Run anywhere.(开发速度更快、到处运行),可以说Docker为应用的开发、运行和部署提供了“一站式”的实用解决方案。
Docker基于LXC,优化容器的使用体验,使用户无需关注底层的操作,可以更简单明了的操作和管理容器,Docker通过引入分层文件系统构建和高效的镜像机制,使得应用的迁移难度大幅降低,操作Docker容器就像操作应用自身一样简单。
我们可以将Docker理解为码头存放的“集装箱”,每个“集装箱”(容器)内运行着一个应用,不同“集装箱”(容器)相互隔离,“集装箱”(容器)之间也可以通过网络互相通信,当然你也可以把“集装箱”(容器)当做应用本身。
二、Docker的核心价值
传统部署一个Java项目(Mysql+Redis+Tomcat+JDK),首先需要在服务器上部署JDK、然后下载对应服务(指Mysql、Redis等)的二进制安装包,再安装其对应的依赖、然后安装服务本身,配置每个服务的参数,最后安装Tomcat,将项目本地打包,上传到服务器上,放入对应Tomcat运行目录,可以想象,步骤繁琐且不易维护,稍有一个步骤错误,就可能需要重新对一些服务进行二次安装、同时随着应用越来越多,事情会越来越难以处理,更加让人恶心的是,一旦需要对服务器进行迁移,上述所有的工作都需要再次执行一次或多次,这些繁琐无趣的“体力活”,极大的降低了工作效率,因为这些应用与服务都是直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。
Dokcer提供容器来打包应用,解耦应用和运行平台,意味着上述的情景发生时,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台,这将降低很多风险、节省大量的宝贵时间,最让开发和运维人员开心的莫过于,一次创建和配置,之后可以在任意地方、任何时间让应用正常运行,而Docker就是解决该问题的一把好手。
- Docker拥有更快的交付和部署。
使用Docker可以让开发人员快速的构建一套标准的开发环境,开发测试完成后,测试人员和运维人员完全可以使用该环境来快速上线保证无缝运行。Docker可以快速创建、删除容器,可以使项目实现快速迭代且大量节约部署时间。
- 更高效的资源利用。
Docker容器的运行不需要额外的虚拟化管理程序的支持,内核级虚拟化可以实现更高的性能,同时对资源的额外需求很低。
- 更好的迁移和拓展。
Docker容器几乎可以在任何平台上运行,包括物理机、虚拟机、公有云、私有云、自己的电脑等等,同时支持主流的操作系统发行版本。
- 更简单的更新管理。
使用Dockerfile,只需要小小的配置修改,就能够替代以往大量的更新工作,并且所有的修改都以增量的方式被分发和修改,从而更容易的实现自动化高效管理容器。
三、Docker与虚拟机比较
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级别 | 分钟级别 |
性能 | 接近原生 | 较差 |
内存代价 | 很小 | 较多 |
硬盘使用 | 一般为MB | 一般为GB |
运行密度 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 完全隔离 | 完全隔离 |
迁移性 | 强 | 一般 |
四、Docker核心概念
- 镜像(image)
Docker镜像类似安装Win10、Win11系统的镜像,可以理解它为一个只读模板,一个镜像可以包含一个基本的操作系统环境,里面仅仅安装了Maven应用程序,可以把它称为一个Maven镜像。
镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套非常简单的机制来创建和更新现有的镜像,甚至可以直接从网上下载一个已经做好的应用镜像并直接使用。
- 容器(container)
Docker容器类型一个轻量级的沙箱,Docker利用容器来运行和隔离应用,容器是从镜像创建的应用运行实例,可以对其进行启动、开始、停止、删除、查看日志等操作,这些容器彼此相互隔离,不可见。
可以把容器看做一个简易版的Linux系统环境以及运行在其中的应用程序应用程序打包而成的盒子。
- 仓库(repository)
Docker仓库类似于代码仓库,它是Docker集中存放镜像的地方。
Docker仓库分为公开仓库和私有仓库,Docker提供官方镜像仓库地址,https://hub.docker.com/,当然国内也有不少云厂商提供的仓库资源,例如阿里云容器镜像服务等;当然,Docker也支持用户在本地网络或公有云创建自己的私有仓库,用户可以在自己的私有仓库中找到自己上传的镜像文件。
※ 镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可用层。
五、安装配置
服务器版本ubuntu20.4。
官网提供的镜像源国内下载极其不稳定且速度慢,官网安装方式Install on Linux | Docker Documentation,根据自身系统选择对应安装教程即可,本文推荐下述方式安装。
访问DaoCloud | Docker 极速下载。
执行该命令,等待安装完毕即可,安装完毕后可执行docker version
查看docker版本信息。
配置国内镜像源,如不配置会导致下载某些镜像失败或速度过慢的情况,这里推荐配置阿里云镜像加速,我们打开阿里云,登录以后打开控制台。
添加快捷入口,搜索“容器镜像服务”,进行添加。
添加后点击进入,选择镜像工具,镜像加速器。
这时即可根据对应系统的操作文档进行操作。
我这里已经配置过就不展示配置过程了,配置后如图。
到这里我们的Docker就安装配置完成了。
※ 本文安装都是基于root用户安装,如非root用户安装,注意权限问题。
该系列不定期更新,创作不易,希望大家帮忙点赞转发,不甚感谢,另今日是2022年12月31日,作为年末的最后一天,LaoCat在这里祝大家在新的一年里砥砺前行,硕果累累。
参考文献:
《Docker技术入门与实践》 第2版
《Docker技术入门与实践》 第3版