《第一本 Docker 书》读书笔记 - 1: 简介与安装

386 阅读5分钟

1.简介

什么是 Docker ?书中的原话是:

Docker 是一个能够把开发的应用程序自动部署到容器的开源引擎。

如果你和我一样是第一次接触 Docker 和容器化技术,那么你可能是不理解这句话到底在说什么,那么我们不妨先来看看 Docker 能够做什么,然后再来看看什么是 Docker。

1.1 能用 Docker 能够做什么?

同样的我们先来看看书上是咋说的:

  1. 加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员可以构建、运行并分享 Docker 容器。容器可以再开发环境中构建,然后轻松的提交到测试环境中,并最终进入生产环境。
  2. 能够让独立的服务后应用程序在不同的环境中,得到相同的运行结果。
  3. 用 Docker 创建隔离的环境来进行测试。
  4. Docker 可以让开发者现在本机上构建一个复杂的程序或架构进行测试,而不是一开始就在生产环境部署、测试。
  5. 为开发、测试提供一个轻量级的独立的沙盒环境。
  6. 构建一个多用户平台的及服务( PaaS )基础设施。
  7. 提供软件即服务( SaaS )应用程序。
  8. 高性能、超大规模的宿主机部署。

好吧,我承认当我第一次看完的时候我依旧是一脸懵逼,完全不知道这本书在说什么,你也有这种感觉吗?

我们不妨来回顾一下之前的项目运作的流程,首先会有需求,至于需求来自于何处这里我们不做关心,然后 开发人员 会对需求进行分析,然后开始编码,然后开发人员会在本地进行测试,有问题就会继续改进,知道测试没有问题,就会提交代码,告诉 测试人员 可以测试了,然后测试人员就和拉去最新的代码,开始构建环境,让项目跑起来,然后进行一系列的测试,发现一大堆 BUG ,然后去找开发去修复 BUG 。

上面的所描述的流程目前看起来还与我们的 Docker 没有什么关系,我们接着向下看,当测试去找开发的时候,如果你是一个开发人员的话,你的第一反应是什么?

“我写的代码这么可能会有 BUG ,我在本地明明都好着,肯定是测试环境的问题”,但是真的没有 BUG 吗?这个我们无法做出假设,但是确确实实存在的一种情况是测试与开发环境之间的差异,最简单的开发是在 MAC 上进行的开发,然后测试在 Linux 或 Windows 上测试,那么这个问题就很有可能是环境的问题。

我还记得我刚开始玩 Linux 的时候经常遇到这种情况,按照某篇博客安装应用之后却无法启动,查看之后发现时依赖的问题,要么是缺少某个依赖,这种情况还是可以轻松的解决的,但是最怕的是依赖的版本不对,这就种情况就及其的麻烦,是这篇博客写的不对吗?恐怕不是,造成这种原因的罪魁祸首就是你与博客作者之间的系统环境不一致。

那么 Docker 可以为我们做什么?看看上面列举的第二条与第三条:

  1. 能够让独立的服务后应用程序在不同的环境中,得到相同的运行结果。
  2. 用 Docker 创建隔离的环境来进行测试。

这是不是我们所期望的呢!

其实 Docker 解决的一个最核心的问题就是为不同的用户提供一个相同的虚拟化环境,这样大家就可以在相同的环境中进行开发、测试和部署,这样你就不会抱怨某篇博客垃圾了。

当然 Docker 的能力不仅于此,毕竟我们在前面写了 8 条 Docker 能够完成的事情(前五条都是围绕上面说的虚拟化环境的问题),只有你想不到的,没有 Docker 做不到的。

在关于什么是 Docker 这个话题上,不同的有着不同的观点,大多数博客或书籍都会告诉你一个正式的概念,或者告诉你 Docker 是有 Docker 公司发开的、开源的,当时对于一个刚刚接触 Docker 与容器方面技术的一个初学者来说,这并不能解决你心中的疑惑,你依旧想问一个问题:什么是 Docker?

上文也只是从作者自己的角度来看看 Docker 到底是什么,可以解决你的疑惑吗?我认为并不能,我也不希望只是通过本文就可以解决你心中的疑惑。

如果对此有疑问,作者在这里建议你不妨去尝试一下 Docker 能做什么,然后再去思考 Docker 是什么这个问题。

2. 安装

请参照官方教程!!!

请参照官方教程!!!

请参照官方教程!!!

不要在网上看什么乱七八糟的教程、博客,记住安装就去看官方教程,这是血泪的教训。

这里连一些技术书籍上的安装教程也不建议参考,书上的教程可能会有一些落后,毕竟在作者写书之后技术依然在不断的发展

Docker 官方安装教程

官方教程提供了 Mac 、 Windows 、常见的 Linux 发型版本等等对应的教程,就连 AWS 等云平台的教程都有,相信我总有一款适合你。

image-20190716133237365

这里有一点需要注意的是 Docker 目前提供两个版本,分别是 Docker CE 和 Docker EE ,其中 Docker EE 是 Docker 公司提供的商业版本,我们一般安装的是 Dcoker CE 。

2.1 验证是否安装成功

Docker 采取的是 C/S 架构的方式,即客户端与服务端,因此在安装 Docker 的时候一般需要全部安装(至少要安装服务端),因此在验证的时候也会验证这两部分是否都安装成功,非常简单,一条命令就可以搞定:

$ docker version
Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        2d0083d
 Built:             Thu Jun 27 17:56:06 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.7
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       2d0083d
  Built:            Thu Jun 27 17:26:28 2019
  OS/Arch:          linux/amd64
  Experimental:     false

这里直接输出 Docker 的版本信息,观察输出你可以发现分别输出了 Client 和 Server 这两部分的版本信息,此时就安装成功了。

上面是 Docker 安装成功之后,并且正常运行的输出结果,但是有一种情况下会出现如下的输出:

Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        2d0083d
 Built:             Thu Jun 27 17:56:06 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

出现这种情况是因为 Docker Service 没有启动,启动它就行:

# 在 CentOS 7 上启动 Docker 服务
$ systemctl start docker