为什么是 docker
👀 在了解 docker 之前,我们先回顾一下传统的项目开发部署流程是怎么样的。
1.开发人员根据技术选型安装所需的系统软件和依赖,随后进行开发。
2.本地开发完成,简单测试成功,编译打包发布到测试环境。
3.测试环境测试成功,发布到正式环境。
🐌 如果这些操作都交给一个人来负责,那么他在实践中应该会发现到这些问题
不同机器上的软件环境不一致
软件环境的配置繁多、命令记不清楚
复性搭建软件环境、效率低下
不能愉快地摸鱼,到点下班
😫 从上面的问题就可以看出来,只要是涉及到在不同的电脑上操作项目时,开发者都得在这些基础设施问题上耗费大量的时间和精力,不仅把自己搞得身心疲惫,还会让老板觉得你办事不力,技术不精。
为了解决这些痛点,docker 应运而生。
🐳 docker 是一种基于虚拟化容器技术的软件平台,通过将程序代码和相关依赖共同构建在容器内,避免了应用在不同平台迁移带来的依赖问题,确保了应用在不同环境下达到高度一致的实际效果。同时还具备轻量级,快速部署,易管理的特点。
docker 的基础概念
🍀 学习 docker 需要先理解几个基本概念,不然容易走弯路,这几个基本概念分别是 Images
、Containers
、Volumes
和DockerHub
。
-
Images 即镜像,它是一个只读的模板,类似于面向对象中的类(Class),在 docker 的世界中,如 mysql,redis,和node等等这些都称作镜像。
-
Containers 也叫容器,容器由镜像构建而来,可看做面向对象中的实例化,启动容器可以生成一个 docker 实例,这个实例会运行着对应镜像提供的各种服务,并且容器之间存在应用隔离,不用担心资源污染。如文件系统隔离,网络隔离,进程隔离等等。
-
逻辑卷(Volumes),docker 默认不会保持数据持久化,启动容器会伴随着开启一个读写层,新建或修改的内容都会保存在这个读写层中,一旦关闭了,这个读写层也会跟着不见,下次开启又是全新的实例了。而逻辑卷可以做到数据持久化。用户可以在此配置,将读写层的数据映射到宿主环境中,写入磁盘。
-
仓库(DockerHub),这一点和 github 很像,都是用来存储线上数据的。不同的点是 github 是可以存储各种资源的,而 DockerHub 存储镜像资源。你可以把本地的镜像上传到 DockerHub 中,同样支持公开或私有仓库。
总结
Docker 提供了镜像、容器、仓库和逻辑卷等概念,使得项目在不同环境下具有相同的效果。这样可以减少重复操作、节省时间和精力,提高开发效率。在实际应用中,团队可以根据项目需求和规模选择合适的 Docker 部署方案,从而更好地支持项目的开发和运维工作。点击查看 docker 的极简入门教程。