【什么是docker】
Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。
`Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
`
使用Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
概念:类似于各种项目和软件的应用商店,大家把项目放到docker仓库中也就是这个应用商店,其他人就可以下载使用这个项目,各个项目直接独立互不影响。使用docker只需要把我们的项目打包成镜像放到docker中。
`Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
`
容器完全使用沙盒机制,相互之间不会存在任何接口。
几乎没有性能开销,可以很容易的在机器和数据中心运行。
最重要的是,他们不依赖于任何语言、框架或者包装系统。
虚拟机和Linux容器
Docker就必须了解虚拟机和Linux容器,虚拟机可以实现在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行Linux系统等,而且不会对实际的电脑产生影响,不想用时将虚拟机相关文件删掉即可,用户可以通过虚拟机还原软件的原始环境,实际上就是解决了配置环境的问题。尽管它有资源占用多,启动慢等缺点。
Linux容器是为了解决虚拟机的确缺点而生的,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
`Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。
`对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
`
由于容器是进程级别的,相比虚拟机有很多优势。像启动快、资源占用少等。
Docker 就是属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux容器解决方案。就像Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
#为什么比虚拟机快 ?
直接操作内核不需要再原有的操作系统上在实例化一个操作系统
【docker优点】
(1)可以确保一致的运行环境;
(2)docker可以做到秒级,甚至毫秒级启动时间,极大解决开发时间;
(3)隔离性:避免资源受到其他用户影响;
(4)迁移方便:可以很方便将一个平台的应用迁移到另外一个平台上运行,且不用担心因环境原因而无法运行。
【Docker用途】
Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
解决的痛点
- 应用程序的依赖项和环境配置问题:
传统的应用程序部署需要手动配置环境和依赖项,容易出现版本冲突和配置错误等问题。而Docker可以将应用程序及其依赖项打包到一个容器中,保证了环境的一致性和可移植性。
- 应用程序的部署和管理问题:
传统的应用程序部署需要手动安装和配置,容易出现部署错误和管理混乱等问题。而Docker可以通过镜像和容器的方式,实现快速部署和管理,提高了效率和可靠性。
- 应用程序的可扩展性和高可用性问题:
传统的应用程序部署需要手动扩展和配置,容易出现性能瓶颈和单点故障等问题。而Docker可以通过容器编排工具,实现自动化扩展和高可用性,提高了应用程序的可扩展性和可靠性。
** Docker 的使用场景**
Docker通常用于如下场景:
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
【Docker的架构】
Docker daemon(Docker守护进程)
Docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
Client( Docker客户端)
Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker
build等都是Docker的相关命令。
Images(Docker镜像)
、、Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
、、简单理解就是,将程序打包在image文件(也叫image仓库)里面,运行image文件,生成一个容器生例,容器里面跑程序(已将mysql之类的依赖都打包在里面了,不用去配置数据库等环境)
、、也就是说,别人的程序打包在image里面,自己直接拿过来后不用配置环境就可以直接跑。
Container(容器)
、、容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过Docker API或者CLI命令来启停、移动、删除容器。在这里插入代码片。