设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

Docker应用之CockroachDB数据存储:开发和部署容器的力量

2015-1-27 16:53| 发布者: joejoe0332| 查看: 1956| 评论: 0|原作者: foxlovefox|来自: CSDN

摘要: 当你使用到Docker,你可以使用简单的Dockerfiles来运行它。在这篇文章中,我将介绍一些我们正在使用的更先进和实用的架构,以及它们如何使我们的工作更简单。在 CockroachDB,我们正在构建一个可伸缩、分布式的数据 ...
  当你使用到Docker,你可以使用简单的Dockerfiles来运行它。在这篇文章中,我将介绍一些我们正在使用的更先进和实用的架构,以及它们如何使我们的工作更简单。

  在 CockroachDB,我们正在构建一个可伸缩、分布式的数据库,使用Docker来自动化、流程化我们的开发、测试和部署过程。当你使用到 Docker,你可以使用简单的Dockerfiles来运行它。在这篇文章中,我将介绍一些我们正在使用的更先进和实用的架构,以及它们如何使我们的工 作更简单。特别的是,你不需要安装任何程序就可以学习到如何部署Cockroach,并且在任何系统中部署可靠的、最小化的容器。


  简单的来说,Cockroch使用三个镜像:

  • cockroachdb/cockroach-devbase:基础镜像。它不包含任何实际的Cockroach代码,但是在所有相关工具中被依赖。通常情况下,如果你的代码正常,你不需要改变这个镜像。我们把它分离出来,是因为这个镜像是一个好的基础点上构建,可以很好的被持续复用(我们使用很棒的CircleCI)。
  • cockroachdb/cockroach-dev:部署镜像。这是一个基于cockroach-devbase的基础镜像,只有简单几行的Dockerfile。
  • cockroachdb/cockroach:部署镜像,即使你没有实际的开发,它仍然会运行在CockroachDB集群中。它是基于BusyBox的,并且有着更复杂的构建过程。开发容器静态的连接二进制文件和测试功能。主要二进制文件放入一个最小的容器中,测试功能可以被安装在这个容器中来检查功能是否可用。

开发镜像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 
 ---> Running in e6528c82806a
 ---> 768b9e8f0212
Removing intermediate container e6528c82806a
Step 2 : ADD . /cockroach/
 ---> d94b378cfa97
Removing intermediate container 2a3b51d06418
# ...
go build  -i -o cockroach
 ---> 2fd9e266b824
Removing intermediate container 0b156cca7c81
Step 6 : EXPOSE 8080
 ---> Running in 4c99f7e9fa84
 ---> 85d3a50c9f07
Removing intermediate container 4c99f7e9fa84
Step 7 : ENTRYPOINT /cockroach/cockroach.sh
 ---> Running in 6ccf7d7498df
 ---> 7f811d0fac6f
Removing intermediate container 6ccf7d7498df
Step 8 : CMD --help
 ---> Running in 24de6f231385
 ---> 0065234019a6
Removing intermediate container 24de6f231385
Successfully built 0065234019a6

下载完成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 

# Setup the toolchain.
RUN apt-get update -y && apt-get dist-upgrade -y && \
 apt-get install --no-install-recommends --auto-remove -y git build-essential pkg-config file &&\
 apt-get clean autoclean && apt-get autoremove -y && rm -rf /tmp/* /var/lib/{apt,dpkg,cache,log}

ENV GOPATH /go

# ...

ADD . /cockroach/build/devbase/
RUN ["./build/devbase/godeps.sh"]
RUN ["./build/devbase/vendor.sh"]

CMD ["/bin/bash"]

使用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 

RUN mkdir -p /test /cockroach
ADD cockroach /cockroach/
ADD cockroach.sh /cockroach/
ADD test.sh /test/

EXPOSE 8080
ENTRYPOINT ["/cockroach/cockroach.sh"]

构建过程中,实际部署容器是非常小的,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


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部