Docker入门教程(概念)
我们的代码都依赖于运行环境;
比如说典型的 LNMP 环境;
如果环境不一致;
代码跑出来的效果肯定也是很多问题的;
那能不能像管理代码一样来管理运行环境呢? Docker 就可以达到统一运行环境的目的; Docker 的精髓就在于可以保证各个环境的一致性;
一个经常拿来跟 Docker 对比的是虚拟机;
虚拟机是虚拟了一个完整的系统;
比如说我们可以在 Mac 电脑上启动一个 Windows 系统的虚拟机;
虚拟机的有点是隔离性非常的强;
缺点是因为是虚拟的完整的操作系统;
所以性能损耗也比较大;
比较占用资源;
而 Docker 则是使用了 linux 底层的 Namespace 和 Cgroups ;
Namespace 主要是进行隔离;
而 Cgroups 则是控制、限制资源比如说 CPU、内存等; 因此优缺点跟虚拟机相反;
性能损耗非常小;
但是隔离的没有虚拟机彻底;
Docker 有三大核心概念;
容器
镜像
仓库
这里举个不是很恰当但是 PHPer 容易理解的类比;
Docker | WordPress |
---|---|
容器 | 一个正运行着的 WordPress 网站 |
镜像 | WordPress 的源代码 |
仓库 | 托管 WordPress 源代码的 Github |
仓库类似于 Github ;
Github 上面有很多项目代码; 仓库里面有很多的镜像;
镜像类似于托管在 Github 上的 WordPress 源代码;
我们可以从 Github 仓库上拉取 WordPress 代码;
从仓库中拉取镜像; 代码是静态的;
镜像也是静态的;
如果我们想要一个可以访问的博客应用;
我们需要把 WordPress 的代码运行起来;
我要想得到一个容器; 我们就需要运行一个镜像;