基于docker的持续集成(一)

docker可以说是应用层的云计算,通过docker可以把应用打包成镜像,像安装包一样可以快速部署在任意装有docker的环境里,而且可以隔离操作系统环境(再也不用担心生产环境和开发测试环境不一样的问题),可以做到项目快速测试上线。所以我觉得无论开发、测试还是运维都有必要了解docker,因为它或多或少都可以减轻你们的工作量。本人前段时间刚用docker搭建了一套持续集成的环境,借此推荐给大家。

一、docker入门

docker的基础教程有很多,可以买些书或者视频看看。

个人推荐:

  1. docker官方文档: 英语水平好的可以看,官方的毕竟坑少。
  2. docker hub: 官方docker镜像仓库,资源丰富。
  3. 希云的docker视频教程: 希云是提供基于docker的企业级容器和Paas的整体解决方案的,简单的说就是靠docker吃饭的,他们家的视频教程还是比较实用易懂的。
  4. DaoCloud: 也是一家类似于希云的公司,不过他们家有个开放的镜像仓库(docker官方常用的下载量比较高的镜像都有),里面的镜像速度非常快,如果docker官方的资源下载比较慢的话可以尝试这家的镜像。
二、搭建持续集成环境的相关镜像及准备过程
1. 安装docker

我用的服务器是ubuntu14.04的

官方安装方式:

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv \
               --keyserver hkp://ha.pool.sks-keyservers.net:80 \
               --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
sudo apt-get install docker-engine

也可以用DaoCloud的安装脚本

curl -sSL https://get.daocloud.io/docker | sh

2. 搭建私有的镜像仓库

拉取官方的registry镜像

docker pull registry:2.5.1

docker默认的镜像仓库是要求用https方式的,如果要强制使用http的话可以在/etc/default/docker中添加配置项,10.211.55.11:5000替换为要搭建的私有registry的地址及端口

DOCKER_OPTS="--insecure-registry 10.211.55.11:5000"

重启docker服务即可

service docker restart

启动registry镜像

docker run -d -p 5000:5000 --restart=always -v /home/docker/registry/data:/var/lib/registry --name registry registry:2.5.1

访问一下镜像仓库,能访问成功就好了,例如

http://10.211.55.11:5000/v2/_catalog

正式环境建议配置ssl证书,并且添加auth认证。

生成对应用户名密码的存储文件,例如:

sh -c "docker run --entrypoint htpasswd registry:2.5.1 -Bbn shunova shunova[registry] > /home/docker/registry/auth/htpasswd"

将ssl证书放在某目录下,然后启动registry镜像,例如:

docker run -d -p 5000:5000 --restart=always -v /home/docker/registry/data:/var/lib/registry -v /home/docker/registry/auth:/auth -v /home/docker/registry/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/xxxx.crt -e REGISTRY_HTTP_TLS_KEY=/certs/xxxxx.key -e REGISTRY_AUTH=htpasswd -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd --name registry registry:2.5.1

即可使用默认的https方式使用私有镜像

3. 安装Jenkins

拉取Jenkins镜像

docker pull jenkins:2.19.4

这个镜像有点特别,默认用户是jenkins,所以在实际使用的时候可能会有一些权限的问题,可以将jenkins加入docker组。

root@iZ2893wjzgyZ:~# vim /etc/sudoers

User privilege specification
root    ALL=(ALL:ALL) ALL
jenkins ALL=(ALL:ALL) ALL

jenkins@iZ2893wjzgyZ:~$ usermod -G docker jenkins

或者启动镜像时加入-u root

启动镜像时还要把docker和docker.sock挂载到镜像里,这样可以在jenkins中使用docker,例如:

docker run -d -p 8080:8080 --name jenkins --restart=always -v /home/docker/jenkins_home:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins:2.19.4

然后浏览器访问[ip]:8080,完成jenkins的初始化即可。初始化可能会验证身份,会让你到服务器目录下找个文件,输入文件的内容。这个时候要到启动的jenkins容器内去找。

docker exec -it jenkins bash

然后查看文件cat xxxx/xxx

4. 安装Maven

docker pull maven:3.3.9-jdk-7

build maven项目时可以用如下命令:

docker run -it --rm -v /home/docker/maven/.m2:/root/.m2 -v /home/docker/maven/hello:/usr/src/mymaven -w /usr/src/mymaven maven:3.3.9-jdk-7 mvn clean install

至此,基础环境搭建完成,具体搭建持续集成的过程,我会在下篇博文中继续介绍。

三、一些小坑和题外话
1. 时区问题

官方的docker镜像默认时区都是UTC,所以可能会出现docker容器中应用时间与实际时间相差8小时。

解决方法1. 启动镜像时添加-e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro

docker run -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro --name=tomcat tomcat:8.0.35-jre8

解决方法2. 用Dockerfile构建镜像时添加

#docker 容器的时区问题 
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

2. 远程连接docker

在docker配置文件/etc/default/docker中添加参数

DOCKER_OPTS="-H 0.0.0.0:7777 -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"

即可远程使用docker -H [ip]:7777 调用。

3. 题外话

公司里,我的项目组以前git仓库用的另外一个项目组提供的仓库,有一天,那个仓库突然无法访问了,不是我们维护的,短期也无法解决。可是项目开发不能停啊,而且我早就有想自己搭建一个想法,那就正好。用的gogs,在Docker Hub里也有gogs的docker镜像,这就很愉快了,一键搞定。

docker run --restart=always --name=gogs -d -p 3000:3000 -p 22:22 -v /home/gogs/data:/data gogs/gogs:0.9.97

docker真的很方便实用。

下一篇: 基于docker的持续集成(二)


欢迎来我的个人博客逛逛: https://blog.52xtg.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容