# Docker

# Docker 是什么 ?

Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议,Docker 可以让开发者打包以及依赖包到一个轻量级、可移植的容器中,容器完全使用沙箱机制,相互之间不会有任何接口。

# Docker 解决什么问题 ?

A: 你这程序跑不了!
B: 我在我的电脑上可以运行啊
...

Docker 解决了运行环境和配置问题,方便发布,也就方便做持续集成

# Docker 能干什么 ?

Web 应用的自动化打包和发布

自动化测试和持续集成,部署等

# Docker vs 虚拟机

多:Docker 守护进程可以直接与主操作系统进行通信,为各个 Docker 容器分配资源;

快:虚拟机启动需要数分钟,而 Docker 容器可以在数毫秒内启动。

好:Docker 还可以将容器与主操作系统隔离,并将各个容器互相隔离。

省:由于没有臃肿的从操作系统,Docker 可以节省大量的磁盘空间以及其他系统资源。

# Docker 中的名词概念

# 镜像 image

就好比是一个模板,可以通过这个模板来创建容器服务。通过这个镜像可以创建多个容器。

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

# 容器 container

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。

# 仓库 repository

仓库就是存储镜像的地方。

仓库分为公有仓库和私有仓库

# Docker 的架构

Docker 是一个 Client-Server 模型的系统,Docker 的守护进程运行在主机上,客户端通过 Socket 来访问里面的容器。

# Docker 为什么比虚拟机快

  1. Docker 拥有比虚拟机更少的抽象层
  2. Docker 利用的是宿主机的系统内核,虚拟机需要独立的 Guest OS

# 学习资料

菜鸟教程 - Docker Hello World (opens new window)

Gitbook - Docker - 从入门到实践 (opens new window)

哔哩哔哩 - Docker 10 分钟快速入门 (opens new window)

哔哩哔哩 - Docker 最新超详细版教程通俗易懂 (opens new window)