搭建完自己的docker-regsitry后需要push image过去,先要用 docker tag 给 image 添加一个 tag。然后用这个 tag 名去做 push ,原因是 docker push 时似乎需要`主机名/镜像名`的格式。

打上 tag

1
docker tag ubuntu:xunsearch 192.168.0.130:5000/xunsearch

192.168.0.130:5000 是我的 docker-regsitry 服务的ip地址和端口号。

Read More

docker-registry是一个docker的镜像服务器,支持push和pull。使用python编写,安装方式也比较简单。

下载

1
git clone https://github.com/dotcloud/docker-registry

使用 git 下载最新的代码

1
sudo python-pip install -r requirements.txt

安装相关的python包。

Read More

docker的镜像制作官方推荐的方式是编写 Dockerfile ,然后用 docker build 生成。好处是可以将环境生成脚本化,但平时我还是想要一个 shell 来安装一些东西,就像使用一个普通的虚拟机一样。

启动一个shell

1
sudo docker run -i -t ubuntu:12.04 /bin/bash

然后在里面安装好环境后退出,记下这个 container 的 id 。

1
sudo docker commit 1e1df5fe3869 ubuntu:tagname

用上面的这种方式提交到新的镜像里面就是一个新的环境了。

导出镜像

1
docker save IMAGENAME | bzip2 -9 -c>img.tar.bz2

导入镜像

1
bzip2 -d -c <img.tar.bz2 | docker load

docker是一个轻量级的linux容器,可以把整个环境部署到里面,然后打包发放。这样只要在本地先把环境搞好,部署到生产环境的时候直接把镜像拷过去,然后运行一下就可以正常使用,无需编译和安装各种依赖。相当于直接迁移一台虚拟机,不过比virtualbox, xen, kvm, vmware之类要轻量的多。

docker的环境包括 image 和 container 。images 是镜像, container 是运行时,进程在运行时产生的数据正常情况下都保存到这里,当然也可以通过映射把本地文件系统映射到里面去。

docker还提供一个镜像服务器的功能,可以直接从网上下载各种镜像。如果外网的下载太慢也可以通过架设 docker-regsitry 来建设自己的镜像服务器。

对于生产环境来说,由于 docker 是一个非常轻量的容器,所以不必担心性能问题。

安装docker

安装方式比较简单,可以直接参考 http://docs.docker.io/en/latest/installation/ 。我的环境是 ubuntu server 12.04,升级完内核后再安装就行了,需要注意的是系统必需是64位的。

Read More

起因

公司里有一台机子我拿来当测试机跟备份机,生产服务器上的环境会完整备份到这台机子上。原先采用的是ext4文件系统 ,然后有五个不同日期的完整备份,今天在看lvm资料的时候想到用快照去节省一下空间。然后装了lvm,但又想用lzo压缩,所以就直接上了btrfs,反正是测试机,性能什么的不重要,稳定性也不重要。

安装btrfs

我的环境是 ubuntu 12.04 desktop ,用apt-get install btrfs-tools把btrfs-tools安装上去就有btrfs相关的支持工具了。

迁移分区内容

由于我原先是用了ext4分区,所以就把内容复制出来,格式化成btrfs后再放回去。等我整个做完后才知道有个叫btrfs-convert的工具可以直接转换,当时就斯巴达了。

Read More

从昨天开始我在hostigation的vps上的sshd突然挂了,重启vps也没用,由于连接不上去也不知道是什么问题。所以昨天就发了一个tk过去,后来那边回复我说 maybe ddos 。搞的我很郁闷,今天早上用vps控制面板的 serial console 连接上去了,查看了一下发现是libcrypto.so这个lib找不到,后来用apt-get重装发现源有问题了,可能是上次更新了什么东西导致的。最后就把源里面的非官方源给去掉了,然后重装 openssh-client openssh-server ,恢复成功。后来在找寻解决ssh无法连接的备用远程控制方案的时候发现了mosh,据介绍是一款为解决移动设备上远程连接不稳定而开发的。

oschina上的介绍

Mosh 是 SSH 的替代品。

在高延迟的网络下,Mosh 比 SSH 流畅多了,而且3G网络下,丢失网络变更IP后,终端连接不会中断。

实际感受

实际测试后确实速度很快,连接美国的vps有时候用ssh延迟会很大,而用mosh就好很多了。

Read More

前天将公司的一台服务器装成了 ubuntu server ,然后就开始部署环境了。自从用上了 Fabric 后将相关的安装脚本写在一起,对于部署来说已经方便很多了。但部署这个环境还是让我费了很大的功夫。

依赖问题和一堆编译参数

安装一个软件的时候依赖比较多,如果用 apt-get 方式安装的还好,自己编译的话就比较惨了,各种依赖问题和一堆的编译参数。编译参数的作用写的也不是很明白,很多时候都需要自己一个个试出来。而且还会遇到一些奇怪的编译失败的情况。可以想像如果没有类似 google 、百度之类的搜索引擎的话,基本上安装工作就无法顺利完成。

Read More

前段时间拿golang写了一个tcp连接代理,后端由python来处理逻辑,中间通信用了zeromq。本来呢我还是挺满意这套方案的,一是golang写的东西稳定性还不错,性能高,用chan实现goroutine间的通信十分方便;二是zeromq来跟后端的python做通信,让python进程来处理逻辑部分,如果逻辑更新只需要重启python就可以实现不断线更新代码;三是zeromq的通信模式很适合做成分布式,不需要自己处理一些仔细问题。但在使用zeromq的过程是对于req/rep模型的服务端死亡后导致客户端一直阻塞的情况没有找到比较好的解决方案,只能使用超时机制。如果能有超时加错误状态的冲突检测功能就好了。

后来在跟卿卿聊天中提到了erlang,原先我也考虑过这个东西,只是一直没去学它,本来打算做为以后改进时使用的一个备用方案留档的。不过现在既然翻出来了就决定好好的学习一下,毕竟这货是专门为了分布式而生的。

先在此挖个坑。。。。。

在自己的 mac 上装了 Erlang R16B02 (erts-5.10.3) ,顺便看了一些相关的资料,越看越觉得这货很好,分布式的能力太强大了。

前段时间翠翠同学问我有没有接触过buildout这个东西,说是用来构建python环境的。我以前从来没有用过这个,之前很长的一段时间里都是用virtualenv来做python环境的隔离,每个项目建一个,防止第三方库的版本问题。不过既然有提到这个东西那么我也去瞧瞧这货是个怎么样的原理,结果找来找去就几篇中文资料介绍这个的,而且讲的都不全部,很多地方都一笔带过,有点看不太明白。官方的文档写的也不咋滴,只好自己硬着头皮去试,最后大致上是理解了一些。

建立buildout.cfg

首先呢buildout是依靠项目目录下的buildout.cfg文件来安装依赖的包和生成相关配置的。先来安装一下zc.buildout吧。

1
pip install zc.buildout

直接在主环境下执行这个安装就行了,用easy_install也可以。

安装完成之后在项目目前中使用 buildout init 命令就可以生成配置文件和相关目录。做版本管理的时候只要把buildout.cfg文件加入git中基本就行了。

Read More

原来我使用的一直是 \\u4e00-\\u9fa5 ,今天在匹配中文标点的时候匹配不上,就查了一下相关资料,原来unicode跟中文有关的范围还有好几个。

字符范围表

1.标准CJK文字

范围:\u3400-\u4DB5,\u4E00-\u9FA5,\u9FA6-\u9FBB,\uF900-\uFA2D,\uFA30-\uFA6A,\uFA70-\uFAD9 说明:一共有好几个范围,除 \u4e00-\u9fa5外 都不是很常用 参考地址:http://www.unicode.org/Public/UNIDATA/Unihan.html

Read More