成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Docker 實(shí)踐(四):Beta 環(huán)境容器化

wemallshop / 2825人閱讀

摘要:實(shí)踐四環(huán)境容器化最近把公司的環(huán)境做了容器化,目前達(dá)到的效果是代碼提交到,觸發(fā)將代碼部署到測(cè)試服務(wù)器,然后就可以根據(jù)前后端不同的分支組合的域名來(lái)訪問,從而省去了每次前后端代碼都合并到分支才能測(cè)試的環(huán)節(jié)。

Docker 實(shí)踐(四): Beta 環(huán)境容器化

最近把公司的 beta 環(huán)境做了容器化,目前達(dá)到的效果是代碼提交到 gitlab,觸發(fā) webhook 將代碼部署到測(cè)試服務(wù)器,然后就可以根據(jù)前后端不同的分支組合的域名來(lái)訪問,從而省去了每次前后端代碼都合并到 master 分支才能測(cè)試的環(huán)節(jié)。

系統(tǒng)架構(gòu)

域名路由

nginx-proxy 是一個(gè) Docker 容器, 是實(shí)現(xiàn)本文解決方案的神器,只需簡(jiǎn)單的配置,便可實(shí)現(xiàn)為多個(gè)容器路由的功能。

1. 在服務(wù)器上安裝并運(yùn)行
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
2. 泛域名解析

假設(shè)有域名 foo.bar, 使用泛域名解析將 *.foo.bar解析到當(dāng)前服務(wù)器即可。

3. 啟動(dòng)下游容器

假設(shè)有一個(gè)運(yùn)行 web 服務(wù)的容器,只需要在啟動(dòng)的時(shí)候加上 -e VIRTUAL_HOST=web.foo.bar,就可以實(shí)現(xiàn)對(duì)該容器的訪問了。

docker run -e VIRTUAL_HOST=web.foo.bar  ...

注意:如果使用 docker-compose 管理多個(gè)容器的時(shí)候,docker-compose 會(huì)為這些容器創(chuàng)建一個(gè)網(wǎng)橋,這樣會(huì)使得后來(lái)手動(dòng)創(chuàng)建的容器沒法被路由,所以這里不建議使用 docker-compose 來(lái)管理。

可視化管理

ui-for-docker 是一個(gè)基于 docker remote api 實(shí)現(xiàn)的 web 管理界面,雖然界面不怎么樣,但是基本上常用的功能已經(jīng)實(shí)現(xiàn)了,前端使用 angular 實(shí)現(xiàn),可以根據(jù)自己的需求作修改。

修改方法

clone 代碼

npm install && bower install

grunt run (更多操作可參看 gruntFile.js 文件)

代碼部署

使用 Gitlab 提供的 webhook 功能完成自動(dòng)部署代碼,期間遇到一些問題:

文件寫入權(quán)限

通過 webhook 的請(qǐng)求執(zhí)行用戶是 www-data,如果要在 hook 腳本中進(jìn)行文件的寫入操作是總會(huì)遇到權(quán)限問題,最暴力的辦法就是給目錄全部 777 或者在 Dockerfile 中將 www-data 用戶加入 sudo 組,并且無(wú)需輸入密碼。

echo " data-www ALL=NOPASSWD: ALL" >> /etc/sudoers

當(dāng)然,正式的環(huán)境中需要對(duì)權(quán)限做嚴(yán)格控制,做到最小權(quán)限原則。

hook 響應(yīng)超時(shí)

Gitlab 觸發(fā) hook 請(qǐng)求之后會(huì)一直等待服務(wù)器返回 HTTP 200 的狀態(tài)碼,如果沒收到,會(huì)重復(fù)觸發(fā) hook,如果 hook 腳本執(zhí)行時(shí)間過長(zhǎng)會(huì)導(dǎo)致 HTTP 請(qǐng)求超時(shí),或者一次代碼提交觸發(fā)多次部署請(qǐng)求,所以最后我選擇用異步的方式,hook 腳本只需要接受上線指令,寫入隊(duì)列,上線過程交給另外一個(gè)腳本來(lái)完成。

為了減少環(huán)境配置的麻煩,可以使用文件隊(duì)列,php 可參考 Filefifo.php。

可將隊(duì)列目錄掛載到 webhook 容器上,即可實(shí)現(xiàn)容器內(nèi)部寫入,主機(jī)讀取隊(duì)列(可使用supervisor 來(lái)管理該進(jìn)程),完成代碼部署的過程。

日志回顯

使用 supervisor 管理上線腳本進(jìn)程,需要把日志回顯到 web 界面,首先在 supervisor 的配置文件中配置好日志路徑,然后創(chuàng)建一個(gè) websocket 容器,將日志目錄掛載到容器中,再tail 讀取日志文件,實(shí)時(shí)顯示在 web 界面。

可參考 websocket。

socket.io

node-tail

下游容器

下游容器將前后端環(huán)境做了分離,降低耦合度,在使用過程中會(huì)減少一些麻煩。分離時(shí)會(huì)遇到瀏覽器同源策略的問題,可將前后端容器做互聯(lián),然后后端容器反向代理到前端容器。

前端容器參考: frontend

后端容器參考: backend

在部署代碼的時(shí)候可根據(jù)不同的分支將代碼部署到不同的目錄,然后創(chuàng)建容器的時(shí)候把不同的分支目錄掛載到不同的容器中,即可實(shí)現(xiàn)開發(fā)分支的隨意搭配。

精簡(jiǎn)鏡像

對(duì)于一些服務(wù),有時(shí)候只需要一個(gè)非常簡(jiǎn)單的 web 容器就可以,比如上面的前端容器,但是如果使用 ubuntu + nginx 的配置的時(shí)候會(huì)發(fā)現(xiàn)鏡像要幾百兆,很不劃算,所以考慮精簡(jiǎn)鏡像。

受這篇文章的啟發(fā),打算自己用 go 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 web 服務(wù)器,這樣 build 好的鏡像基本上只有十幾兆,但是因沒有做相關(guān)的測(cè)試,所以還不敢放在線上。

最后選擇了使用 alpine + nginx 的策略,build 之后的鏡像之后幾十兆,已經(jīng)減少了很多冗余的東西,具體可參考simple-nginx。

結(jié)語(yǔ)

經(jīng)過無(wú)數(shù)次踩坑和不停的折騰,終于可以勉強(qiáng)使用了,當(dāng)然還存在一些瑕疵,之后會(huì)慢慢修復(fù)。

感謝期間幫助過我的每一位同事。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/26697.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.5 - Docker丨Build, Ship, Run,

    摘要:此刻的后手指依舊飛速地敲打鍵盤,絲毫沒有要停不下來(lái)意思。閱讀本期技術(shù)周刊,你不光能弄明白什么是,使用的意義何在,還將被傳授秘籍,以達(dá)的境界。周刊篩選的每篇內(nèi)容,是作者的獨(dú)到見解,踩坑總結(jié)和經(jīng)驗(yàn)分享。 showImg(https://segmentfault.com/img/bVC5qJ?w=900&h=385); 啪嗒啪嗒,啪嗒啪嗒,聽到后排動(dòng)感十足的清脆鍵盤響,我就能猜到公司程序員定...

    Panda 評(píng)論0 收藏0
  • Docker 實(shí)踐系列文章

    摘要:使用有一段時(shí)間了,打算把自己實(shí)踐過程中的一些理解和感悟記錄下來(lái)。目錄實(shí)踐一了解架構(gòu)實(shí)踐二使用教程實(shí)踐三下構(gòu)建開發(fā)環(huán)境實(shí)踐四環(huán)境容器化實(shí)踐五生產(chǎn)環(huán)境容器化實(shí)踐六容器監(jiān)控實(shí)踐七提升幸福感實(shí)踐八構(gòu)建開發(fā)環(huán)境實(shí)踐九生產(chǎn)環(huán)境優(yōu)化參考源碼分析系列文章 使用 docker 有一段時(shí)間了,打算把自己實(shí)踐過程中的一些理解和感悟記錄下來(lái)。 系列文章發(fā)布在 SegmentFault 上我的專欄 Tairy,...

    VincentFF 評(píng)論0 收藏0
  • 關(guān)于Docker Swarm,你可能需要了解更多實(shí)踐經(jīng)驗(yàn)

    摘要:雖然可以使用相同的方式部署應(yīng)用到云端,使用外部負(fù)載均衡器,但動(dòng)態(tài)添加或者減少負(fù)載均衡節(jié)點(diǎn)依舊是痛點(diǎn)。這對(duì)使用外部負(fù)載均衡器幫助巨大。 數(shù)人云今天帶來(lái)的本篇文章將分享Docker在應(yīng)用程序生命周期每個(gè)階段中所扮演的角色,以及遷移到Swarm集群時(shí)需要考慮的問題。 利用Docker來(lái)開發(fā) Docker讓工作更輕松。如需要一個(gè)部署安裝MySQL數(shù)據(jù)庫(kù),或者安裝Ghost,又或者Redis數(shù)據(jù)...

    bitkylin 評(píng)論0 收藏0
  • Docker 實(shí)踐(九):生產(chǎn)環(huán)境優(yōu)

    摘要:系列文章第五篇中介紹了線上生產(chǎn)環(huán)境使用集群,這篇文章對(duì)原來(lái)的架構(gòu)進(jìn)行了優(yōu)化,同時(shí)使用了最新的一些特性,記錄一些流水賬。配置文件鑒于上次搭建時(shí)配置文件管理混亂,這次做了統(tǒng)一規(guī)劃為每個(gè)環(huán)境創(chuàng)建不同的配置文件,可以以環(huán)境名后綴。刪除無(wú)用的容器。 系列文章第五篇中介紹了線上生產(chǎn)環(huán)境使用 Docker 集群,這篇文章對(duì)原來(lái)的架構(gòu)進(jìn)行了優(yōu)化,同時(shí)使用了 Docker 最新的一些特性,記錄一些流水賬...

    AlienZHOU 評(píng)論0 收藏0
  • 實(shí)錄分享 | 那些年容器落地,企業(yè)為Docker填過的坑

    摘要:數(shù)人云容器助力產(chǎn)品迭代力沙龍干貨分享實(shí)錄持續(xù)上新,今天是來(lái)自人人貸高級(jí)運(yùn)維工程師杜天鵬的分享,與我們細(xì)數(shù)了人人貸容器化實(shí)踐過程中遇到的問題以及解決方法。 數(shù)人云容器助力產(chǎn)品迭代力MAX沙龍干貨分享實(shí)錄持續(xù)上新,今天是來(lái)自人人貸高級(jí)運(yùn)維工程師杜天鵬的分享,與我們細(xì)數(shù)了人人貸容器化實(shí)踐過程中遇到的問題以及解決方法。 很高興站在這里和大家一起交流容器技術(shù),我叫杜天鵬,是人人貸的運(yùn)維工程師。人...

    funnyZhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<