Docker可持续集成研究

来源:互联网 发布:mac照片u盘导入win7 编辑:程序博客网 时间:2024/05/21 09:11

1.  背景及目的

1.1.  背景

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。

1.2.  目的

构建一个可持续集成的可复用的镜像环境。减轻运维人员的压力。增加项目横向扩展能力。如下图:

当开发人员提交相关项目的代码时,就会自动触发jenkins job的自动构建,并且更新jetty中的代码,并重启jetty。这个过程无需运维人员干预,规避了以往每次发包(更新程序)都需要运维/测试人员手动在jenkins中寻找对应的项目,然后点击重新构建这一重复的过程。

 

正式发布的war包也可自动提交到docker仓库,方便横向扩展。

2.  docker基本操作

2.1.  创建镜像

当我们需要创建镜像的时候,可以先使用命令:docker search keyword搜索是否存在现成的镜像,如果有,可以拿来即用,避免重复造轮子。

2.2.  运行镜像

运行镜像的基本命令:docker run

可以先查看帮助:docker run –help

常用参数解释:

         -d:让容器在后台运行

         -i:运行我们队容器进行交互

         -t:在容器中指定一个终端

例如:docker run –t –I centos /bin/bash

表示启动容器的同时启动终端,并且启动bash shell

2.3.  其他基础操作

更多其他基础操作,请参考:

(1)   官方文档:

https://docs.docker.com/

(2)   中文翻译文档:

http://git.oschina.net/widuu/chinese_docker/blob/master/userguide/dockerizing.m

3.  配置私有的docker仓库(docker registry)

3.1.  什么是dockerregistry

Docker Registry是一个存储和分享 Docker 镜像的服务。类似于GitHub。

3.2.  为什么需要dockerregistry

当在自己的环境中创建Docker镜像的时候,无论是安装JDK,Jenkins或者是jetty,我们都希望把镜像保存到一个安装的地方。特别是镜像中包含一些私有的代码或者数据。这时候,就需要自己搭建一个docker仓库(docker registry)。

3.3.  部署私有的dockerregistry

命令:docker pull registry

启动仓库命令:docker run –d –p 8001:5000 --restart=always --name registry –v/data/registry:/var/lib/registry registry

命令说明:--restart=always:总是开机启动容器;-v:挂载本地目录代替docker registry的images存储,方便转移和备份。参考官方文档:

(https://github.com/docker/distribution/blob/master/docs/deploying.md)

查询仓库中的images:http://127.0.0.1:8001/v1/search

由于docker registry默认使用https传输,所以我们吸引配置ssl证书或者直接开启http访问。

配置http方式访问:

(1)  配置docker的启动选项参数:

命令:vi /etc/default/docker

增加以下配置行:

DOCKER_OPTS="$DOCKER_OPTS--insecure-registry=${domain}:${port}",替换domain为配置的域名,替换port为端口

(2)  重启docker服务:sudo /etc/init.d/docker restart

测试docker registry是否配置启动成功,输入命令:

docker tag ubbuntu localhost:8001/centos;

docker push localhost:8001/centos

上传成功,表示配置成功。

3.4.  如何上传镜像(image)到DockRegistry

(1)   命令:docker images,查询可用的本地镜像

(2)   docker tag ${image name}${domain}:${port}/${image name};

docker push ${domain}:${port}/${image name}

${ image name }:镜像名称

${domain}:docker registry部署的域名

${port}:docker registry部署的端口

原创粉丝点击