container-as-a-service-0x02 -- 项目构建&部署之道php
By 苏依蜀黍 . 2016.06.08html
以前写了两篇,算是比较完善的称述了就目前的业务,容器服务在我司的应用,可是没有比较具体的讲如何构建以及部署,因此这一篇主要讲如何对项目进行容器化以及如何部署,对我司业务分类之后能够有如下几种类型:node
python应用python
node.js应用nginx
php应用git
nginx服务github
docker服务(server)web
进一步分大类就只有两种:docker
应用apache
服务
至于项目代码,大概是有两到三个代码仓:
coding
github
gitlab(私有库)
项目内添加一个Dockerfile在根目录便可,以下是php-nginx的配置
#++++++++++++++++++++++++++++++++++++++ # Ubuntu 14.04 PHP-Nginx Docker container #++++++++++++++++++++++++++++++++++++++ FROM webdevops/php:ubuntu-14.04 MAINTAINER info@webdevops.io LABEL vendor=WebDevOps.io LABEL io.webdevops.layout=5 LABEL io.webdevops.version=0.21.0 ENV WEB_DOCUMENT_ROOT /app ENV WEB_DOCUMENT_INDEX index.php ENV WEB_ALIAS_DOMAIN *.vm # THINKPHP ENV # TP_CONFIG maybe one of aliyun-inner-pro,aliyun-outer-pro,aliyun-outer-test,localhost-dev,localhost-test ENV TP_DEBUG false ENV TP_CONFIG aliyun_outer_pro # Install nginx RUN /usr/local/bin/apt-install \ nginx # Deploy scripts/configurations RUN mkdir -p /app WORKDIR /app COPY src/ /app/ COPY conf/ /opt/docker/ RUN echo $TP_DEBUG > ThinkPHP.txt RUN echo $TP_CONFIG >> ThinkPHP.txt RUN 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.sh EXPOSE 80 443 CMD ["supervisord"]
阿里云容器服务自动构建
github
bitbucket
local
aliyun code
Daocloud自动构建
github
bitbucket
coding
gitlab(付费&企业版功能)
gitlab-runner
jenkins
local push
#经过webhook实现
不论第三方服务仍是私有构建都是作了三件事:
# mkdir dir & pull code cd workspace && mkdir {project name} && git pull {project repo} . # build docker build -t {project imageName}:{project commitId} . # push image docker push
前一篇咱们使用rancher-server做为docker的管理中心(可选的还有dcos、ucp等),其实在启动镜像的时候,咱们就已经在选择镜像了
“nginx”就是镜像,这个镜像能够来自docker-hub也能够来自私有Registry
有两个比较有名的工具,python的用户应该据说过fabric,有兴趣的能够看下面的参考连接;另外一个是ansible,一样也在下面的参考连接里。这里要说的是ansible强大的远程管理功能:
批量在远程服务器执行命令
可选在那些机器上执行
可选每次执行的数量
强大的playbook
可定义任务队列以及根据不一样的状况决定如何执行
可重复(执行过的再也不执行)
more
更多请参考ansible文档
好像偏题了,那么这样说,用ansible咱们能够至少能够作两件事:
构建docker镜像(根据状况选择海外或者国内)
手动部署&更新代码 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
Daocloud支持持续集成
阿里云在容器服务控制台能够配置
这里就更明确了,即在playbook执行完之后,经过rancher的api去更新容器或者服务,这里可参考文档rancher文档。