作为开发者;
Git 是我们的必备技能;
它可以记录文件开发历史;
可以在本地和服务器上保持文件的一致性;
但是我们的代码都依赖于运行环境;
比如说典型的 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 的代码运行起来;
我要想得到一个容器; 我们就需要运行一个镜像;
是时候拿出吃灰用的服务器了;
后续的文章中我都是在 Linux 18.04 中操作;
Mac 和 Windows 中 Docker 的实现跟 Linux 中的不完全一样;
建议在 Linux 服务器或者 Linux 虚拟机中学习;
另外 Docker 需要 sudo 权限;
后续的文章都是在 sudo -i 后执行的;
本系列文章主要是作为索引带领大家入门 Docker ;
不会对每个知识点都详尽讲解;
有兴趣的同学自行搜索学习扩展;