一、Docker概念

有时候开发人员开发好的项目交给运维部署到服务器上,会出现运行不了或者运行结果不一致等问题,但是在开发人员的系统上是运行的好好的。这时就可能是系统、运行环境、配置等等东西不一样导致的。如果一个项目运维要部署很多台服务器,就要每台服务器不停的修改,这就会耗费很多时间。

这时,docker就把系统、运行环境、配置等等一系列东西集成在一起。开发人员的项目只要能在docker运行,那么直接把整个docker交给运维,放到哪台服务器运行都是没问题的

同时,虚拟机也可以做到类似的效果,但是它的体积更大,一台物理服务器部署不了几个虚拟机。

我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境:

image.png

注:这种环境配置,可能导致测试环境和生产环境跟开发环境的不同,运行项目的时候就会出现问题

image.png
image.png
注:我们可以把项目的开发环境一起打包部署,运维人员操作起来就相对简单了,环境一致,也不会出现什么问题!
**

  • Docker 是一个开源的应用容器引擎
  • 诞生于 2013年初,基于 Go语言实现,dotCloud 公司出品(后改名为Docker Inc)
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux 机器上。
  • 容器是完全使用沙箱机制,相互隔离
  • 容器性能开销极低。
  • Docker 从17.03 版本之后分为CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

二、为什么选择Docker?

(1)上手快。 用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改 应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程 序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用 系统资源。

(2)职责的逻辑分类 使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的 目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,运维部署后发现和开发运行的结果不一致的问题”

(3)快速高效的开发生命周期 Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构 建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将 该大盒子拿走,而不需要从该盒子中一件件的取。)

(4)鼓励使用面向服务的架构 Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成 了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分 布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器 中运行多个应用程序)

三、容器与虚拟机比较

  1. docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
  2. 与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

四、docker的几个核心概念

4.1 Docker服务器与客户端

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服 务器或者守护进程将完成所有工作并返回结果。Docker提供了一 个命令行工具Docker以及一整套RESTful API。你 可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机 上的远程Docker守护进程。(简单说就是,Docker服务器运行着多个docker容器,用户可以通过客户端向docker服务器发出请求来操作docker容器)

镜像和容器可以类比为Java中的类和对象,容器需要通过镜像来创建,一个镜像可以创建多个容器

4.2 Registry(注册中心)(类似git与github的关系)

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做 Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢, 可以自己构建私有的Registry)。

可以理解为类似github的东西,用于存储各种镜像,可以在里面下载镜像和上传镜像。也有公有仓库和私有仓库等!