Docker:基础

来自Wikioe
Eijux讨论 | 贡献2021年5月28日 (五) 03:05的版本 (建立内容为“category:Docker == 环境配置的难题 == 软件开发最大的麻烦事之一,就是环境配置: : 用户必须保证两件事:操作系统的设…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


环境配置的难题

软件开发最大的麻烦事之一,就是环境配置:

用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。


通常在新旧模块整合,测试代码、运行代码的发布时,都需要花费大量的时间精力用于环境配置。经常遇到的问题就是相同的代码,更换到不同的环境中却不能运行。而如果新旧模块的环境不兼容,那就意味着更大的麻烦。


总而言之,为了避免在开发过程中过多地关注于系统环境配置,就需要一种能够将开发、测试、运行的环境进行发布共享的方式。

虚拟机

虚拟机(virtual machine)就是一种模拟软件(系统)环境的解决方案:

它可以在一种操作系统里面运行另一种操作系统,而应用程序对此毫无感知。

而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。


常用的虚拟机:VMWare、VirtualBox等;


但虚拟机的缺点让它不可能成为开发环境的解决方案:

  • 资源占用多:
    虚拟机会独占一部分内存和硬盘空间;且用于虚拟机运行的资源往往远大于应用所实际使用的资源。
  • 冗余步骤多:
    虚拟机是完整的操作系统,相当内容是应用不需要;且一些系统级别的操作步骤,往往无法跳过,比如用户登录。
  • 启动慢:
    由于是真实的操作系统,启动过程等同于操作系统,这对于应用环境是相当累赘的。

Linux 容器

由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC):

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。

对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。


Linux 容器相对于虚拟机的优势:

  • 资源占用少:
    容器只占用需要的资源,且多个容器可以共享资源。
  • 体积小:
    只要包含用到的组件。
  • 启动快:
    容器中的应用是底层系统的一个进程,而不是虚拟机内部的进程,所以,启动容器相当于启动本机的一个进程。

总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口:

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。

  • 容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。


Docker 是目前最流行的 Linux 容器解决方案。


用途:

  1. 提供一次性的环境:
    比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  2. 提供弹性的云服务:
    因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
  3. 组建微服务架构:
    通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

基础概念

image 文件