Docker容器 介绍
初识 Docker
问题现象
在传统的项目开发流程中,我们写的代码会接触到好几个环境,如开发环境、测试环境以及生产环境。
-
问题:“水土不服”
。即不同环境可能由于依赖版本或配置的不同,导致应用在不同环境的表现不同。如下图所示(JDK 版本不同): -
解决方案
:在开发环境将应用所依赖的环境和配置一起打包(容器技术),统一流转给测试环境和生产环境。
什么是 Docker ?
- Docker 是一个开源的应用容器引擎。
- 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为 Docker Inc)。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
- 容器是完全使用沙箱机制,相互隔离。
- 容器性能开销极低。
- Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
Docker 优点
快速交付应⽤
:加快打包时间,加快测试,加快发布,缩短开发及运⾏代码之间的周期。复杂环境管理,应⽤隔离
:不同软件运⾏环境兼容依赖问题,开发环境/测试环境/线上环境保持⼀致。轻量级
:对于系统内核来说,⼀个 Docker 容器只是⼀个进程,⼀个系统可以运⾏上千个容器。
Docker 架构与核心概念
-
镜像(Image)
:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 -
容器(Container)
:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 -
仓库(Repository)
:仓库可看成一个代码控制中心,用来保存镜像。
Docker 容器 VS 虚拟机
相同点:
- 容器和虚拟机具有相似的资源隔离和分配优势。
不同点:
- 容器与容器之间只是进程的隔离;⽽虚拟机是完全的资源隔离。
- 虚拟机的启动可能需要分钟级别;容器启动是秒级或者更短。
- 容器使⽤宿主操作系统的内核,因此只能运行同一类型操作系统;⽽虚拟机使⽤完全独⽴的内核,因此可以运行不同的操作系统。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
Linux 容器详解
什么是 Linux 容器?
Linux 容器是与系统其他部分隔离开的一系列进程
,从一个镜像运行起来,并由该镜像提供支持进程所需的全部文件。
- 容器:将软件打包成