第三章 Docker基础


Docker基础

本章目的:Docker名词术语解释。


Dokcer为开发者和系统管理员提供了一个开发、部署及运营应用的平台。其可以帮助你快速将各个系统组件装配为最终的应用并且消弭掉代码迁移过程中部署环境的差异,基于此,Docker可以让你的代码尽快经过测试及部署上线成为产品。
— docs.docker.com/
Docker 可以很方便地将你的应用所运行的环境(或者称之为应用的运行环境)打包成镜像并进行分发,这种方法可以简化软件的交付流程。

什么是应用的运行环境?

一般而言,部署应用时需要指定操作系统的版本、应用服务器、JDK、数据库服务器,可能还需要修改配置文件以及引入其他依赖。并且还可能需要绑定相应服务端口及分配一定的内存。这些运行应用所必需的组件以及配置项合称为应用的运行环境。

当然,你可以使用安装脚本来下载及安装这些组件。但使用Docker让你可以将应用以及应用所运行的环境打包为镜像,这样你就可以将其视为一个独立组件从而简化了上述的安装过程。接下来,我们就可以使用构建好的镜像在Docker所提供的容器虚拟化平台上运行Docker容器了。

Docker的主要组成

Docker包含三个主要组成部分:
  1. 构建组件:镜像(Image) 是Docker的构建组件,也是应用运行环境的只读模板。
  2. 运行组件:容器(Container) 是Docker 的运行组件,容器是由镜像创建而来的。可以对容器进行运行、启动、停止、迁移、删除操作。
  3. 分发组件:registry,用于存储、共享、管理镜像,是Docker的分发组件,Docker Hub是面向公众供广泛使用的registry (Docker Hub)。


为了让以上的这三个组件运行作起来,在宿主机器上,运行了一个Docker Daemon守护进程以完成繁杂的构建、运行以及分发Docker 容器的工作。此外,有一个客户端用于接受用户请求以及维持和Docker Daemon之间的通信任务。无论客户端与Daemon是否在同一台宿主机器上,二者均进行通信。

docker-architecture.png


客户端使用pull命令向Daemon进程发送请求。然后Daemon进程就从Docker Hub或者其他已经配置好的registry中下载一份镜像。各种镜像都可以从仓库中下载下来并且安装在Daemon宿主机器上。需要运行的时候,我们可以使用run命令来利用镜像构建容器。

Docker 镜像是怎样运行的?

Docker镜像是Docker容器启动所使用的只读模板。每个镜像包含有一系列的层,Docker采用统一文件系统(unionfs)来将这些层合并为一个单独的镜像。统一文件系统将来自各个独立文件系统的文件以及目录称为为分支,这些分支之间能够彼此覆盖,这样就能够组织成一个独立的文件系统。

这些层也是Docker 如此轻量级的原因之一。当你修改了一个Docker镜像,例如将某个应用升级至新版本,就会构建出一个相应的新层。由此可见,和传统虚拟机那样替换整个镜像并完全进行重新构建不同,在Docker中,仅需要新增或者升级对应的层即可完成相应操作。这样你不需要重新分发整个新镜像,只需要进行升级,这样就使得Docker镜像的分发更加快捷简单。

每一个镜像都是从一个基本镜像开始构建的,例如,使用基本的Ubuntu进行或者Fedora镜像。同样你也可以使用你自己的镜像作为构建新镜像的基础,假如你有一个基本的Apache镜像,你也可以使用它作为你所有Web应用项目的基础镜像。
注意:默认情况下,Docker从Docker Hub中下载基础镜像。
Docker镜像就是在这些基础镜像之上通过一些简单的描述性步骤来构建的。每个步骤都构建了镜像中的一个新层。这些步骤的行为如下所示:
  1. 运行一个命令
  2. 添加一个文件或者目录
  3. 创建一个环境变量
  4. 在启动一个容器时在其中运行一个操作命令


这些步骤被存储在一个叫做Dockerfile的文件中。当你发出请求构建一个镜像的时候,Docker会读取这个Dockerfile, 执行其中的步骤,返回最终的镜像。

Docker容器是怎样运行的?

容器中包括操作系统、用户添加的文件和元数据。如我们所知,每个容器都从一个镜像构建而来。这个镜像中描述了容器中有哪些组件、当容器启动时哪些命令会被运行、以及一些其他的配置文件。Docker镜像是只读的,当Docker使用一个镜像运行了一个容器,它会在镜像的最上层添加一个可读写的层(利用了前面我们所见到的统一文件系统)来供你的应用来运行。

3.1. Docker主机

Docker主机使得在计算机、云提供商以及个人数据中心创建Docker服务更加方便。可以利用它创建服务器,在其中安装Docker然后配置Docker客户端以与它们进行通信。

一旦你创建了Docker主机,就拥有了一系列的命令来管理容器:
  1. 启动、停止、重启容器。
  2. 升级Docker。
  3. 配置客户端以与主机通信。


你只需要在刚开始的时候使用Docker主机,此后就不太需要它。 但如果你需要创建Docker服务,这(译者注:Docker主机)就是需要非常了解的工具。此后,大部分时间我们都将使用Docker客户端。

更多细节参看Docker Machine Website

检查Docker主机是否在运行:
docker-machine -v


返回结果类似如下:
docker-machine version 0.4.1 (e2c88d6)


注意:实际版本会因情况而异。

3.2 Docker客户端
客户端会与Docker主机上的Daemon线程进行交互通信,你可以通过客户端来操作镜像与容器。

检查客户端是否正常运行:
docker -v


返回结果类似如下:
Docker version 1.8.2, build 0a8c2e3


注意:实际版本会因情况而异。

常用命令如下:
  1. run -运行一个容器
  2. ps -列出所有容器
  3. stop -停止容器
  4. rm -删除一个容器


查看所有命令列表:
docker

更全面的命令列表见链接:Common Docker Commands

3.3. 检查Docker配置

检查docker主机是否正在运行:
docker-machine ls

显示结果类似如下:
NAME        ACTIVE   DRIVER       STATE     URL                         SWARM
lab                  virtualbox   Running   tcp://192.168.99.101:2376

可以看出该Docker主机处于running状态,假如是处于停止状态,使用下列命令启动:
docker-machine start lab

启动之后,可以使用以下命令来获得Docker主机的IP地址:
docker-machine ip lab

我们已经在设置部分完成了这些设置。如果你已经在hosts文件中添加了IP地址,那么现在仅需进行检查即可。
输入:
ping dockerhost

查看是否解析到你的IP地址,你可以看到返回以下结果:

> ping dockerhost
PING dockerhost (192.168.99.101): 56 data bytes
64 bytes from 192.168.99.101: icmp_seq=0 ttl=64 time=0.394 ms
64 bytes from 192.168.99.101: icmp_seq=1 ttl=64 time=0.387 ms

如果能看到,说明我们已经启动了Docker主机。

0 个评论

要回复文章请先登录注册