container-as-a-service-0x02 -- 項目構建&部署之道

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等),其實在啓動鏡像的時候,咱們就已經在選擇鏡像了

install

「nginx」就是鏡像,這個鏡像能夠來自docker-hub也能夠來自私有Registry

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

CI

第三方服務的持續集成

  • Daocloud支持持續集成

  • 阿里雲在容器服務控制檯能夠配置

私有構建方案的持續集成

這裏就更明確了,即在playbook執行完之後,經過rancher的api去更新容器或者服務,這裏可參考文檔rancher文檔。

參考

相關文章
相關標籤/搜索