手把手教你玩转 Docker(一)

挖个坑

最早接触 Docker 应该是 17 年刚毕业那阵,当时朋友圈有个好友是专门搞云计算相关的,有天和他说起我对云计算也有些兴趣,他给了我点建议,让我了解下 Docker。

不过,真正把 Docker 用起来应该是半年前左右,租了几台 VPS 小鸡,搞了 Docker 集群,充分利用上了 GitLab 的 CI/CD 和镜像仓库。

本系列主打实战,内容由浅入深,不会一开始就涉及晦涩难懂的原理,但是完整跟随本系列内容之后,再看 Docker 相关书籍,会轻松许多。

Docker 是什么?

首先看一下维基百科的解释:

Docker 是一个开放源代码软件项目,让应用程序布署在软件货柜下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。 Docker 利用 Linux 核心中的资源分离机制,例如 cgroups,以及 Linux 核心名字空间,来创建独立的容器。

解释得很全面,但是对于小白来说,这个解释一点也不友好。我们可以先简单地将 Docker 理解为一个提供软件运行环境的跨平台的平台软件。

安卓模拟器大家应该都有了解吧?可以将它类比和一个安卓模拟器,但是它提供了多平台(Windows/Linux/Mac)的安装包。模拟器安装完成之后,所有符合要求的软件都可以运行在 Docker 上。

对于安卓 APP 来说,一般会有应用商店对应用进行托管,开发者将应用发布到应用商店(比如谷歌 Play Store),普通用户从应用商店下载需要的应用。

而对于 Docker,这些符合要求的软件,我们称之为 Docker 镜像,通常托管在「镜像仓库」上。目前,Docker 官方提供了 DockerHub 这个镜像仓库,绝大部分公共镜像都会托管在此。

当然,也可以自行搭建私有的镜像仓库,比如公司内部会有一些不能公开的镜像,便不方便放在 DockerHub 上。如果是个人的私有镜像,还可以利用 GitLab 提供的镜像仓库进行托管,后续内容会有相关介绍。

Docker 镜像?

上一小节中,我们有提到一个词「镜像」,对这个词敏感的读者应该会想到 VMWare 之类的虚拟机吧?上节中我一直将 Docker 和安卓模拟器进行类比,读者应该也会好奇,为什么不叫「Docker 应用」而非得叫「Docker 镜像」呢?

主要是因为「Docker 镜像」的制作过程更像是镜像打包过程,而不是安卓应用开发。重装过系统的同学应该都有过这样一种想法吧:软件装了这么多,能不能把整个系统备份下来,后面直接用备份还原呢?

Docker 恰好可以解决类似的问题,不过更多是用来解决服务器环境的问题。传统的镜像打包过程,一般是先安装好操作系统,然后人为在系统上安装需要的软件,然后将整个系统打包。

而 Docker 镜像的制作要更「极客」一些:依赖的操作系统和软件安装过程全部写进一个叫 Dockerfile 的文件中,由 Docker 对这个文件进行解析和打包镜像。

实验条件

通过上述两节内容,应该对 Docker 有了个大概的印象。在系列后续的内容里,更多以实战为主,偶尔穿插一些基本原理。为了保证学习效果,建议先将 Docker 环境安装好,虽然 Windows 和 Mac 也可以安装,但我还是建议新手在 Linux 系统上进行操作。

如果手上没有 Linux 系统的机子,可以租一个按时间收费的 VPS,我比较推荐 Vultr,可以参考一下我之前的两篇文章,把环境安装好。附传送门:Vultr 全线五折降价Vultr CentOS 7 安装 Docker