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部署的端口