# 基础
# Docker Hub: https://hub.docker.com/
- docker ID : ***
- password : ***
# 虚拟机
- 虚拟机通过在操作系统上建立了一个中间虚拟软件层 Hypervisor ,并利用物理机器的资源虚拟出多个虚拟硬件环境来共享宿主机的资源,其中的应用运行在虚拟机内核上。
- 但是,虚拟机对硬件的利用率存在瓶颈,因为虚拟机很难根据当前业务量动态调整其占用的硬件资源。
# Docker 容器
- Docker 容器不使用硬件虚拟化,它的守护进程是宿主机上的一个进程,换句话说,应用直接运行在宿主机内核上。
- 因为容器中运行的程序和计算机的操作系统之间没有额外的中间层,没有资源被冗余软件的运行或虚拟硬件的模拟而浪费掉。

# 虚拟机和容器对比:
| 特性 | Docker | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 交付/部署 | 开发、测试、生产环境一致 | 无成熟体系 |
| 性能 | 近似物理机 | 性能损耗大 |
| 体量 | 极小(MB) | 较大(GB) |
| 迁移/扩展 | 跨平台,可复制 | 较为复杂 |
# Docker 概念
# 1. 镜像(Image)
Docker 的镜像可以简单的类比为电脑装系统用的系统盘,包括操作系统,以及必要的软件。
例如,一个镜像可以包含一个完整的 centos 操作系统环境,并安装了 Nginx 和 Tomcat 服务器。
镜像是只读的
可以使用 docker images 来查看本地镜像列表。
# 2. 容器(Container)
容器可以简单理解为提供了系统硬件环境,它是真正跑项目程序、消耗机器资源、提供服务的东西。
例如,我们可以暂时把容器看作一个 Linux 的电脑,它可以直接运行。
容器是基于镜像启动的,并且每个容器都是相互隔离的。
容器在启动的时候基于镜像创建一层可写层作为最上层。
可以使用 docker ps -a 查看本地运行过的容器。
# 3. 仓库(Repository)
仓库用于存放镜像
我们可以从中心仓库下载镜像,也可以从自建仓库下载。
同时,我们可以把制作好的镜像 commit 到本地,然后 push 到远程仓库。
仓库分为公开仓库和私有仓库。
最大的公开仓库是官方仓库 Dock Hub,国内的公开仓库也有很多选择,例如阿里云等。

- 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。
- 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
安装 →