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文檔。