简介与概述:
- Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵循 Apache 2.0 协议开源。Docker 可以让开发者打包他们的引用以及依赖包一个轻量、可移植的容器中,然后发发布到任何流行的 Linux 机器上,也可以实现虚拟化
- Docker 的主要目标是 "build,ship and run app,anywhere",也就是说通过对应用程序组件的套装,分发、部署、运行等声明周期管理。使用用户的 app(也可以是一个 web 应用程序或者数据库应用等) 及其运行环境能够做到 "一次封装到处运行"
- Linux 容器技术的出现解决了这个问题。而 Docker 就是基于它的基础上发展过来的。将应用运行到 docker 容器上面,而 docker 容器在任何操作上都是一致的,这就是实现跨平台服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
- 容器是完全使用沙箱机制,互相之间不会有任何接口(类似 iphone 的 app),更重要的是容器性能开销极低
- Docker 从 17.03 版本之后分为 CE(Community Edition:社区版)和 EE(Enterprise Edition:企业版),我们使用社区版本即可
- Docker 实际上就是一个虚拟化轻量级 linux 服务器,可以解决我们在开发环境中运行配置问题
为什么使用Docker:
- Docker:虚拟化容器技术
- Docker 主要解决了我们开发环境配置迁移问题
- 当我们开发了一个 javaweb 项目,需要依赖很多环境配置,比如:Tomcat、JDK、Nginx、Redis 环境等
- 本地需要安装这些环境,再打成 war 包给运维部署在 linux 服务器,运维人员也需要再 linux 服务器上安装这些环境
- 但是有时候可能会发生些问题:在本地运行环境没问题,但是打包到 Linux 服务器上运行总是遇到很多错误,大多数是一些版本冲突影响的
- 所以在这时候我们就可以使用 docker 部署和安装软件就非常方便,直接将该 SpringBoot 项目部署成一个镜像文件,镜像文件中包含 jdk 版本 tomcat 版本等,直接部署 linux 即可,减少依赖冲突概率
Docker 的三大核心要素:
-
仓库(Repository):
- 仓库是 Docker 用来存储镜像的地方,类似于 Windows 的软件管家
- Docker Hub 是 Docker 官方提供的公共仓库,用户可以在上面查找、下载和分享镜像。同时企业也可以搭建自己的私有仓库来存储和管理镜像
- 通过仓库,用户可以轻松的获取到其他人或组织创建好的 Docker 镜像,从而快速的部署和运行应用程序
-
镜像(Image):
-
镜像是 Docker 的核心组件之一,它是一个只读的文件系统,包含了运行某个应用所需要的所有代码、运行时环境、库、配置文件等。类似于安装包
-
镜像可以通过 Dockerfile 来定义,Dockerfile 是一个文本文件,其中包含了构建镜像所需要的指令和配置
-
通过 Dockerfile,用户可以定义应用程序的依赖、环境变量、工作目录等,然后使用 Docker 命令来构建镜像
-
一旦镜像构建完成,他就可以被推送到仓库中供他人使用,也可以被用来创建容器
-
-
容器(Container):
- 容器是 Docker 的另一个核心组件,它是镜像的一个可运行实例
- 当使用 Docker 命令从镜像创建容器时,Docker 会在宿主机上分配一定的资源(如 CPU、内存、磁盘等) 给容器,用户可以轻松部署、升级和管理应用程序,而无需关心底层操作系统的细节
-
总结:
- 仓库是 Docker 镜像的存储和分享平台
- 镜像是包含应用程序及其运行环境的只读文件系统
- 容器是镜像的可运行的实例,它在隔离的环境中运行应用程序
使用Docker 的好处:
- 简化配置,安装创建非常的方便
- 代码流水线(Code Pipeline)管理,传统项目部署可能需要经过很多环节,容易产生版本的依赖冲突问题,Docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少
- Devops 开发与运维一体化减少沟通的成本(docker 或者是 k8s 实现)
- 虚拟技术,快速部署
- 弹性扩容
应用场景:
- Web 应用的自动化部署打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他后台应用
- 从编译或者展现现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境
Docker 和虚拟机的区别:
- 从两者的架构图上看,虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统
- 而 Docker 是在操作系统的层面虚拟化,复用操作系统,运行 Docker 容器
- Docker 的速度很快,秒级,而虚拟机的速度通常要按分钟计算
- Docker 所用的资源更少,性能更高。同样一个物理机器,Docker 运行的镜像数量远多于虚拟机的数量
- 虚拟机实现了操作系统之间的隔离,Docker 是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强
- 虚拟机和 Docker 各有优势,不存在谁代替掉谁的问题,很多企业都采用物理机上做虚拟机,虚拟机中跑 Docker 的方式