docker的火热程度相信不用说了, 只要你漫步在互联网上, 总是能看到docker的身影, 以致于你一天不去了解它, 都会感觉在你的世界里有一块未知地带, 做为立志做全栈的你, 岂能容忍!
docker 的安装非常简单, mac os最新的安装方式是Docker for Mac,Docker Toolbox方式已经过时了. 国内下载docker官方镜像的速度比较慢, 可以使用阿里云或daocloud添加加速器, 登录阿里云或daocloud控制台可以查看自己的专属加速器地址.
Mac OS添加到Preferences->Advanced->Registory.
linux通过修改 /etc/default/docker文件添加一行
DOCKER_OPTS="--registry-mirror='专属加速器地址'"
rancher是一个容器管理和服务编排工具, 有中文界面, 它最大的优点是可以跨云主机管理, 通过rancher-server和rancher-agent保持连接, 主机之间可以相互通信, 阿里云的容器服务也可以实现自动部署, 但是只能在阿里云. 另外国内一些商业容器服务, 如有容云它是基础于rancher开发的, daocloud也可以非常方便的管理不同主机的docker容器, 并实现自动部署, 但是是收费的, 可免费试用两个月.
安装方法:
docker run -d --restart=unless-stopped --name=rancher-server -v /opt/rancher/mysql:/var/lib/mysql -p 8080:8080 rancher/server
将/opt/rancher/mysql目录挂载到rancher-server以便将数据保存在本机.rancher/server镜像比较大,安装需要一些时间, 可以通过docker logs -f rancher-server
查看是否安装完成.
注意保证mysql目录的权限,
chown -R 102:105 /opt/rancher/mysql
安装完成后打开localhost:8080, 切换至中文界面, 将访问控制改为本地验证, 即可添加账号.
接下来就是添加环境, 添加主机, 添加应用栈, 添加服务, 每一个服务就是启动一个docker容器, 原本需要运行docker 命令来启动容器,都可通过界面填写参数来启动.
rancher-compose
docker 可以通过docker-compose来批量启动容器, rancher也可以借助rancher-compose来启动编排好的服务. 通过rancher web界面右下角下载rancher-compose工具, 然后需要两个文件, docker-compose.yml和rancher-compose.yml
添加环境API Keys和账号Api Keys, rancher-compose启动服务需要环境api keys, 后面实现自动部署需要账号API keys, 而且密钥只显示一次,先记下来后面会用来.
jenkins 分为主/从服务器, 主服务器用来调度, 从服务器来跑相关任务, 当然也可以只用一个主服务器, 我们用rancher-compose来让jenkins在容器中运行. 新建两个文件docker-compose.yml , rancher-compose.yml内容如下.
docker-compose.yml
jenkins-slave-nodejs-6:
labels:
io.rancher.container.pull_image: always
io.rancher.scheduler.affinity:host_label: provider=主机标签
tty: true
image: jackhu/jenkins-slave-nodejs:6
links:
- redis:redis
- mongo:mongo
volumes:
- /opt/jenkins/jenkins_slave_nodejs_6:/home/jenkins
stdin_open: true
redis:
labels:
io.rancher.scheduler.affinity:host_label: provider=主机标签
tty: true
image: redis
stdin_open: true
jenkins-master:
ports:
- 8090:8080/tcp
labels:
io.rancher.scheduler.affinity:host_label: provider=主机标签
tty: true
image: jackhu/jenkins-master-privileged
links:
- jenkins-slave-nodejs-6:nodejs6
privileged: true
volumes:
- /opt/jenkins/jenkins_home:/var/jenkins_home
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
stdin_open: true
mongo:
labels:
io.rancher.scheduler.affinity:host_label: provider=主机标签
tty: true
image: mongo
stdin_open: true
rancher-compose.yml
jenkins-slave-nodejs-6:
scale: 1
retain_ip: true
redis:
scale: 1
jenkins-master:
scale: 1
mongo:
scale: 1
注意jenkins-master的时间不正确可挂载本机的文件如:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
上面jenkins-master 挂载了本机的docker文件, 这样才能在jenkins-master中使用docker命令, 而jenkins的数据文件保存在本机的/opt/jenkins/jenkins_home中, 注意保持此目录有jenkins用户的权限.如果在jenkins不能调用docker,查看/var/run/docker.sock文件jenkins用户是否有权限.
chown -R 1000 /var/run/docker.sock
启动jenkins服务
rancher-compose --url http://RANCHER_HOST:RANCHER_PORT/v1/ --access-key RANCHER_API_KEY --secret-key RANCHER_API_KEY_SECRET --project-name jenkins --verbose up
稍等片刻,启动成功, 打开localhost:8090既可进入jenkins界面. 第一次启动将提示安装插件和添加管理员用户, 中文界面, 在系统管理->Configure Global Security中配置好访问控制权限, 后面添加webhooks需要有权限的用户Token.
添加一个任务jenkins-demo-deploy-01,选择<构建一个自由风格的软件项目>,以https://github.com/jackhutu/jenkins-demo.git为例.如何触发自动构建项目, 配置如下:
触发构建这里填上自己定义的token, 然后在github项目settings中webhooks项, 点击添加webhooks, Payload URL如下:
https://jenkins用户名:jenkins用户token@jenkinsServerURL/job/jenkins-demo-test-nodejs6/build?token=自定义的token
默认是仅push时触发. 这样当每次向github仓库push代码时这个jenkins任务就会触发.在jenkins任务构建这一栏可以执行相关测试任务,
每次测试失败可邮件通知, 前提是安装邮件通知插件, 配置好邮箱账号.
上面是每次push时自动测试, 如果你想每次push后测试完成就自动部署, 可以在Execute Shell里接着添加部署命令,
docker login -u xxx -p xxx
docker build -t images_url $WORKSPACE
docker push images_url
上面代码将根据项目目录下的Dockerfile文件, 来构建一个镜像, 并推送到镜像仓库, 镜像仓库你可以自己搭建也可以用官方的,或者阿里云的.都是免费的.
然后添加另一个任务,在这次任务成功之后运行.如, 新建一个任务jenkins-demo-deploy-02, 在上一个任务jenkins-demo-deploy-01之后执行:
执行代码如下:
通过上面的账号API Key调用rancher server api 来实现服务的自己升级, 这样就实现全自动测试部署. rancher升级如果失败,还可以回滚, 而且可以在不中断当前服务无缝升级.
dafasfasdf
没毛病. 走起.
aa
的萨芬
的萨芬的萨芬
ceshi
牛笔牛笔
厉害