Docker学习记录_1
初识Docker
🤔 什么是Docker?
Docker 最初由 dotCloud 🏢 创始人 Solomon Hykes 在🇫🇷期间发起,是公司内部的一个项目,基于 dotCloud 公司多年云☁️服务技术的创新。Docker 使用 Google 🏢 开发的 Go 🛠️ 语言实现,依赖于 Linux 🐧 内核的 cgroup、namespace 以及 OverlayFS 等技术,通过对进程进行封装和隔离,实现操作系统级别的虚拟化。由于这些隔离的进程独立于宿主系统和其他进程,因此被称为容器🛢️。
Docker 的三个基本概念
镜像(Image)🖼️
镜像是用于创建容器的模板,相当于一个 root 📁 文件系统。Docker 镜像采用分层存储架构,通过 Union FS 技术使多个镜像可以共享相同的基础层,减少冗余数据,提升资源利用率📈。
镜像构建时,每一层都是独立的,前一层是后一层的基础,构建完成后不会改变。分层存储的设计使得镜像的复用和定制更加便捷,可以在基础镜像上添加新层,构建新的镜像。
简单比喻: 可以将 Docker 镜像比作一本书📚:
基础镜像:书的第一个版本📖,只读。
应用层:在基础镜像上增加的注释📝,仍然是只读的。
配置层:在前面基础上增加更多注释📝,仍然只读。
容器:从最终版本复印📄的一份,可以自由修改(可写层)。
容器(Container)🛢️
镜像和容器之间的关系类似于类和实例的关系。容器是镜像的运行时实例,本质上是独立的进程,拥有自己的 root 📁 文件系统和命名空间,运行在隔离的环境中,类似于一个轻量级的操作系统🖥️。因此,容器比直接运行在宿主系统上的进程更加安全🔒。
容器与虚拟机不同,虚拟机包含完整的操作系统,而容器只是运行在宿主机上并拥有独立命名空间的进程。容器采用分层存储,容器存储层在容器销毁时会消失,因此需要使用数据卷(Volume)📦来持久化数据,以确保数据的独立性。
仓库(Repository)🏪
镜像构建完成后,可以使用 Docker Registry 🏢 存储和分发镜像。一个 Docker Registry 可以包含多个仓库,每个仓库包含多个标签(Tag)🏷️,每个标签对应一个镜像。例如,ubuntu:18.04 表示 Ubuntu 镜像的 18.04 版本。
Docker Registry 可以是公开服务(如 Docker Hub🌍、Quay.io)或私有部署(如 Harbor)。在国内访问 Docker Hub 较慢,可以使用云服务商提供的加速器🚀,例如阿里云加速器等。
Docker 对比传统虚拟化的优势
更高效的系统资源利用💡
由于容器不需要硬件虚拟化和运行完整操作系统,Docker 对系统资源的利用率更高📊。应用执行速度、内存消耗和文件存储速度都优于传统虚拟机技术。
更快速的启动时间⏱️
容器直接运行在宿主内核之上,无需启动完整的操作系统,启动时间可以达到秒级甚至毫秒级⚡,相比虚拟机的数分钟启动时间,大大节省了开发、测试和部署的时间⌛。
一致的运行环境🔄
Docker 镜像提供了除内核外完整的运行时环境,确保开发、测试和生产环境的一致性,避免了因环境差异导致的问题❌。
持续交付和部署🚀
Dockerfile 使镜像构建过程透明化,支持持续集成(CI)🔁 和持续部署(CD),实现开发和运维团队之间的高效协作🤝,简化了应用的部署流程。
更轻松的迁移和扩展🔧
Docker 可以在物理机🖥️、虚拟机、公有云☁️、私有云等多种平台上运行,确保执行环境的一致性,使应用的迁移更加轻松。同时,基于基础镜像的扩展镜像制作成本低💸,维护和更新也更加便捷。
对比传统虚拟机总结
特性 容器🛢️ 虚拟机💻
启动 秒级⚡ 分钟级⏳
硬盘使用 一般为 MB 一般为 GB
性能 接近原生💪 弱于
系统支持量 单机支持上千个容器🛢️ 一般几十个💻
小结
通过本次学习,对Docker有了初步的认知。