container-as-a-service-002 -- 项目构建&部署之道

container-as-a-service-0x02 -- 项目构建&部署之道

By 苏依蜀黍 . 2016.06.08

分析

之前写了两篇,算是比较完善的称述了就目前的业务,容器服务在我司的应用,但是没有比较具体的讲如何构建以及部署,所以这一篇主要讲如何对项目进行容器化以及如何部署,对我司业务分类以后可以有以下几种类型:

  1. python应用

  2. node.js应用

  3. php应用

  4. nginx服务

  5. docker服务(server)

进一步分大类就只有两种:

  1. 应用

  2. 服务

至于项目代码,大概是有两到三个代码仓:

  1. coding

  2. github

  3. gitlab(私有库)

构建

配置参考

项目内添加一个Dockerfile在根目录即可,如下是php-nginx的配置

# ++++++++++++++++++++++++++++++++++++++# Ubuntu 14.04 PHP-Nginx Docker container# ++++++++++++++++++++++++++++++++++++++FROM webdevops/php:ubuntu-14.04MAINTAINER info@webdevops.ioLABEL vendor=WebDevOps.ioLABEL io.webdevops.layout=5LABEL io.webdevops.version=0.21.0ENV WEB_DOCUMENT_ROOT  /appENV WEB_DOCUMENT_INDEX index.phpENV WEB_ALIAS_DOMAIN   *.vm# THINKPHP ENV # TP_CONFIG maybe one of aliyun-inner-pro,aliyun-outer-pro,aliyun-outer-test,localhost-dev,localhost-testENV TP_DEBUG    false    ENV TP_CONFIG    aliyun_outer_pro      # Install nginxRUN /usr/local/bin/apt-install \        nginx# Deploy scripts/configurationsRUN     mkdir -p /appWORKDIR    /appCOPY     src/    /app/COPY     conf/    /opt/docker/RUN echo $TP_DEBUG > ThinkPHP.txtRUN echo $TP_CONFIG >> ThinkPHP.txtRUN bash /opt/docker/bin/control.sh provision.role.bootstrap webdevops-nginx \    && bash /opt/docker/bin/control.sh provision.role.bootstrap webdevops-php-nginx \    && bash /opt/docker/bin/bootstrap.shEXPOSE 80 443CMD ["supervisord"]

镜像的第三方构建服务(我司在用&以及支持的代码仓)

  1. 阿里云容器服务自动构建

github

  1. bitbucket

  2. local

  3. aliyun code

  4. Daocloud自动构建

github

  1. bitbucket

  2. coding

  3. gitlab(付费&企业版功能)

镜像的私有构建方案

  1. gitlab-runner

  2. jenkins

  3. local push

# 通过webhook实现

不论第三方服务还是私有构建都是做了三件事:

# mkdir dir & pull codecd workspace &&  mkdir {project name} && git pull {project repo} .# build docker build -t {project imageName}:{project commitId} .# push imagedocker push 

部署

容器部署

前一篇我们使用rancher-server作为docker的管理中心(可选的还有dcos、ucp等),其实在启动镜像的时候,我们就已经在选择镜像了

“nginx”就是镜像,这个镜像可以来自docker-hub也可以来自私有Registry

混合方案

有两个比较有名的工具,python的用户应该听说过fabric,有兴趣的可以看下面的参考链接;另一个是ansible,同样也在下面的参考链接里。这里要说的是ansible强大的远程管理功能:

  1. 批量在远程服务器执行命令

可选在那些机器上执行

  1. 可选每次执行的数量

  2. 强大的playbook

可定义任务队列以及根据不同的情况决定如何执行

  1. 可重复(执行过的不再执行)

  2. more

  3. 更多请参考ansible文档

好像偏题了,那么这样说,用ansible我们可以至少可以做两件事:

  1. 构建docker镜像(根据情况选择海外或者国内)

  2. 手动部署&更新代码 or 更新 容器 或者 容器内的代码

有这两项功能,能做的事情,就比较多了,示例如下:

---- hosts: webservers  vars:    http_port: 80    max_clients: 200  remote_user: root  tasks:  - name: ensure apache is at the latest version    yum: name=httpd state=latest  - name: write the apache config file    template: src=/srv/httpd.j2 dest=/etc/httpd.conf    notify:    - restart apache  - name: ensure apache is running (and enable it at boot)    service: name=httpd state=started enabled=yes  handlers:    - name: restart apache      service: name=httpd state=restarted

CI

第三方服务的持续集成

  1. Daocloud支持持续集成

  2. 阿里云在容器服务控制台可以配置

私有构建方案的持续集成

这里就更明确了,即在playbook执行完以后,通过rancher的api去更新容器或者服务,这里可参考文档rancher文档。

参考

  1. dockerizing-your-frontend-project

  2. dockerizing-a-node-js-web-app

  3. python-fabric

  4. ansible documents

  5. rancher api documents

  6. 基于Docker & Fabric的Web项目部署方案

关键字:docker

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部