当你使用到Docker,你可以使用简单的Dockerfiles来运行它。在这篇文章中,我将介绍一些我们正在使用的更先进和实用的架构,以及它们如何使我们的工作更简单。
在 CockroachDB,我们正在构建一个可伸缩、分布式的数据库,使用Docker来自动化、流程化我们的开发、测试和部署过程。当你使用到 Docker,你可以使用简单的Dockerfiles来运行它。在这篇文章中,我将介绍一些我们正在使用的更先进和实用的架构,以及它们如何使我们的工 作更简单。特别的是,你不需要安装任何程序就可以学习到如何部署Cockroach,并且在任何系统中部署可靠的、最小化的容器。 简单的来说,Cockroch使用三个镜像:
开发镜像cockroachdb-dev简单来说,CockroachDB源代码使用GO语言和C++编写。如果你不使用Docker,想要运行它的话,使用下面的命令: $ git clone git@github.com:/cockroachdb/cockroach # ... $ cd cockroach; ./bootstrap.sh # ... # pages and pages of libraries being built # ... # 10 minutes later: $ make build # ... $ ./cockroach Usage: cockroach command [arguments] # ... 最佳的方式是安装了最新版本的C++之后,再安装RocksDB和其它依赖软件,例如snappy,protobuf,bz2等。这样将不会有任何的安装问题。 此外,我们也会将这些过程做成脚本,可以在测试环境中直接安装。 事实上就我个人而言,将CockroachDB排除在Docker之外是完全可以的,但是我不想作为一个局外人来做贡献。 相反的,他们可以简单快速的使用docker build -t " cockroachdb/cockroach-dev "命令来从我们的主repo安装CockroachDB,我们使用新命令来做演示: $ docker build -t "cockroachdb/cockroach-dev" Sending build context to Docker daemon 58.1 MB Sending build context to Docker daemon Step 0 : FROM cockroachdb/cockroach-devbase:latest Pulling repository cockroachdb/cockroach-devbase 0407ad0fa9fd: Pulling image (latest) from cockroachdb/cockroach-devbase, endpoint: https://registry-1.d0407ad0fa9fd: Download complete 511136ea3c5a: Download complete # [...] 8d37c4dafcdf: Download complete Status: Downloaded newer image for cockroachdb/cockroach-devbase:latest ---> 0407ad0fa9fd Step 1 : MAINTAINER Tobias Schottdorf 下载完成cockroachdb/cockroach-devbase镜像后,大约花费20秒安装完成cockroachdb/cockroach-devbase镜像。现在,我们已经可以运行Cockroach了: $ docker run "cockroachdb/cockroach-dev" --help Usage: cockroach command [arguments] # ... 也行以后git repo做了一些本地修改,使用docker build -t " cockroachdb/cockroach-dev" 命令将会更新镜像,在虚拟环境外同样可以搭建它 ,并且做测试会非常简单 $ docker run "cockroachdb/cockroach-dev" test # ... go test -run ".*" "./..." -logtostderr -timeout 10s ok github.com/cockroachdb/cockroach/client 0.216s # ... go test -race -run ".*" "./..." -logtostderr -timeout 1m ok github.com/cockroachdb/cockroach/client 1.811s # ... 我们也可以运行docker run -t -i " cockroachdb/cockroach-dev"命令,它是一个能让我们运行特殊命令行的参数。数据库中关键变量如果改变的话,这是一个很好的方法来更新它。 这是很好的东西,而且这点在Docker上是相当标准的使用方法。 基础镜像 cockroach-devbase这个基础镜像是基于以前的镜像文件,它很简单。可以把它归结为下述Dockerfile: FROM golang:latest MAINTAINER Tobias Schottdorf 使用golang :,latest ,我们不必担心GO语言问题和它的工作编译环境问题。它会下载GO所需的库文件到本地。 部署镜像 cockroach如果你想部署一个镜像,你只需要Docker中很少的脚本命令来实现。 部署镜像创建脚本需要cockroach/cockroach-dev镜像,部署二级制文件静态链接。通过这个二进制文件来创建BusyBoxy。 此外,我们建立了静态连接测试,它被镜像到相应部署镜像中测试。这些都不是合成镜像的一部分,但要确保至少创建部署的映像在所有的机器上测试通过。 你得到了一个小的镜像,只包含BusyBox和Cockroach的主要二进制文件,但是你可以从外部文件系统在容器中运行所有的测试,运行脚本类似这样: #!/bin/bash # Build a statically linked Cockroach binary # Author: Tobias Schottdorf (tobias.schottdorf@gmail.com) set -ex cd -P "$(dirname $0)" DIR=$(pwd -P) rm -rf resources cockroach .out && mkdir -p .out docker run "cockroachdb/cockroach-dev" shell "export STATIC=1 && \ cd /cockroach && (rm -f cockroach && make clean build testbuild) >/dev/null 2>&1 && \ tar -cf - cockroach \$(find . -name '*.test' -type f -printf '"%p" ') resources" \ > .out/files.tar; 上面命令建立了静态二进制文件和容器内部测试,从文件系统收集它们,并经过tar压缩 下面的脚本将移动cockroack二进制文件到正确目录,并且构建BusyBox容器: tar -xvC .out/ -f .out/files.tar && rm -f .out/files.tar mv .out/cockroach . cp -r .out/resources ./resources docker build -t cockroachdb/cockroach . 测试:将.out镜像到容器中的/test/目录,容器会运行所有测试,确认一切运行正常 docker run -v "${DIR}/.out":/test/.out cockroachdb/cockroach 实际构建的Dockerfile很简单: FROM busybox:buildroot-2014.02 MAINTAINER Tobias Schottdorf 构建过程中,实际部署容器是非常小的,cockroach二级制文件写入时大约44m,BusyBox增加了5m左右。 相比1GB多的cockroachdb/cockroach-dev镜像,这是非常方便的。 随着时间推移,会有一些变化,但是你可以在 CockroachDB@7e452 找到整个过程。 英文原文:http://tschottdorf.github.io/docker-cockroach-development-deployment-containers/ 转自:http://code.csdn.net/news/2823662 |