用 Docker 做自动化持续集成 - Macaca 部署完整版(一)


一、Docker 是什么

Docker 这个单词英文原意是码头工人,搬运工的意思,这个搬运工搬运的是各种应用的容器。

官方的说法是,Docker 是提供给开发者和系统管理员一个分布式应用的开放平台。在更多人的理解中,Docker 是一种把你的应用或者服务打包后放在容器中运行的技术。

Docker 可以说有三个关键点:构建,运输,运行。这三个词可以对应我上述提到的那句话,构建即为打包,既然是打包了,那么就需要可以方便地搬运到各个地方,为什么要搬运呢?归根到底,我们是要运行打包了的应用和服务。

Docker 存在的意图是让你把各种语言编写的程序应用以带有普适性的形式打包好,你只要拿到打包好的东西,可以忽略程序本身依赖的环境或者开发的语言,直接使用 Docker 便可以运行起来。在这个实际意义之上,最重要的是 Docker 提供了容器技术来隔离多个打包的应用或者服务之间的相互影响,同时由于打包的东西具有普适性,那么在应用规模的层面上也很便于扩展。

对于运维的管理人员,Docker 提供了一种可移植的标准化部署流程,对于开发者,Docker 提供了一种开发环境的管理方法。

二、为什么要使用 Docker

上述已经提到 Docker 的很多优点,其中,我个人感觉最重要的一点是:普适性,使用 Docker 打包好的应用或者服务,你可以忽略原本程序的依赖以及开发语言。这意味着,当你需要使用多个应用程序代码或者服务时,你不再需要对其一一去处理依赖的环境和类库工具等,直接是安装一个 Docker 就可以上手,这大大提高了部署效率。同时,由于打包好的应用或服务便于
部署的缘故,那么进行应用规模层面的扩展也变得简单的多,并且 Docker 还提供了关于扩展的工具。

对于开发者而言,自己实现了一个应用,当然是希望使用者更快更方便地上手,或者是自己使用了别人提供的程序,亦是希望能够更快更方便用上,而 Docker 恰恰就是带来了这一种便利性。你只需要安装一个 Docker,便可以轻松地跑 Redis,MongoDB,PHP,Java,Node.js 等各种应用,还不需要考虑它们之间相互影响,这是一件多么美妙的事情。

所以,综上所述,Docker 可以帮助我们做到:

  • 隔离应用的依赖和环境
  • 创建容易分发的,即启即用的,便于复制的应用
  • 允许我们的应用实例简单,快速地扩展
  • 快速部署测试环境,测试应用后销毁

三、Docker 中的一些概念

在安装之前有些 Docker 相关的概念需要了解一下,以便我们更好了解 Docker。

简单来说,安装 Docker 之后,会在机器上跑一个守护进程,你使用 docker 客户端相关命令时,会给到守护进程,由守护进程来处理相关的东西。

在 Linux 系统中,Docker 客户端,守护进程还有你的容器都是跑在本地系统,这意味着容器的端口是直接映射到本地机器,你可以使用 localhost:8376 等来访问相关服务。

在 Mac OS X 系统中,由于 Docker 要使用到 Linux 系统内核的一些特性,所以没法直接在 Mac OS X 上跑。Docker 的守护进程其实是运行在一个称为 default 的 Linux 虚拟机中,所以我们需要 Virtual Box 来使用 Docker。

所以在 Mac OS X 系统中,Docker 的主机地址是这个 Linux 虚拟机的地址。当你使用 docker-machine 来开启虚拟机时,会分配一个 IP 地址。当你开启一个容器时,容器的端口会映射到这个虚拟机的端口。

Docker Machine
Docker Machine 用于在机器或者云端上创建多个虚拟主机。它可以创建虚拟主机然后自动安装 Docker,借助 docker-machine 你可以管理相关的主机。

如果你是 Mac OS X 系统,创建新的虚拟主机很容易,使用以下命令即可:

docker-machine create --driver=virtualbox vbox-test

你也可以使用 --help 来了解命令的更多内容。

3.1 Docker Compose

Docker Compose 是用来定义依赖多个容器运行的应用,例如一个 Wordpress 系统,我们需要数据库,如 Mysql,需要 php 运行时等,这些可以分布在不同的容器。Docker Compose 可以用于管理和配置多个容器相关的东西,多个容器通过 Docker Compose 连接起来形成完整的应用服务。

注意,在我写这篇文章的时候,Docker Compose 还是不支持 windows 系统的,开发者还是使用 Mac 或者 Linux 的好。

Docker Swarm
Docker Swarm 是 Docker 原生的一个集群工具,它可以把多个 Docker 主机转化为单一的虚拟 Docker 主机。

Docker Swarm 遵循 Docker 标准的 API,任何可以和 Docker 守护进程交互的工具,便可以利用 Docker Swarm 来转化为操作多个 Docker 主机。

3.2 Docker Image

Docker 镜像,便是某个应用或者服务打包好的,一个静态的包括应用或者服务相关信息的东西,在我们使用 Docker 运行某个应用时,我们需要从远程服务器上拉取相应的镜像。

一个 Docker 的镜像是可以做很多事情的,甚至复杂到来启动一个数据库,来等待用户增删改查,都是可以的。

Docker 镜像的意义在于让人们可以创建和分享应用,使用 Docker 镜像,你不用考虑这个应用或者软件能否在机器上跑,Docker 的容器总是可以运行 Docker 镜像的。

3.3 Docker Container

Docker 容器,是某个镜像的一个运行中的实例,容器可以理解为 Linux 操作系统的一个基础版本,镜像是加载到容器的软件内容。

容器的运行情况,取决于镜像是由什么内容构建的,一个镜像可能只是运行简单的一个命令后便退出,最简单的镜像例子 hello-world 就是这样的。

我们可以通过 Docker 客户端的命令来管理容器,例如重启,停止,销毁等。

有一个需要留意的点是,Docker 的容器是一次性的,其本身并不具备持久化的东西。例如我们运行一个 MySQL 的容器,如果容器重启了,在其运行期间写入的所有数据是不会存在的,因此,Docker 提供了一种方式让系统的某个目录映射到容器的某个目录中,以便做文件或数据的持久化处理,往往许多数据库的容器都需要用到,这个后边会再详述。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值