摘要:系列文章第五篇中介紹了線上生產環境使用集群,這篇文章對原來的架構進行了優化,同時使用了最新的一些特性,記錄一些流水賬。配置文件鑒于上次搭建時配置文件管理混亂,這次做了統一規劃為每個環境創建不同的配置文件,可以以環境名后綴。刪除無用的容器。
CentOS系列文章第五篇中介紹了線上生產環境使用 Docker 集群,這篇文章對原來的架構進行了優化,同時使用了 Docker 最新的一些特性,記錄一些流水賬。
CentOS 和 Docker 確實不搭,但是苦于做不了主,只能硬著頭皮上了,所幸沒有遇上太大的坑。
必須要 CentOS 7.0 及以上才行,越新越好,內核也要升級到最新。
內核版本 Linux 3.10.0-327.36.1.el7.x86_64 有 bug,碰上了就別再折騰,趕緊繞過,Github Issue。
CentOS升級內核(需要梯子)。
docker-compose可喜的是新版本的 docker-compose 支持管理集群了,這比以前用 docker service 命令方便多了,只需要將 docker-compose.yml 的 version 修改為 3 或者更高,然后就可以愉快的使用新增的特性了,示例:
version: "3" services: nginx: image: nginx:latest networks: - product ports: - 8022:80 environment: TZ: "Asia/Shanghai" deploy: mode: replicated replicas: 4 placement: constraints: - node.role == worker restart_policy: condition: any web-product: image:web:latest build: context: ./ networks: - product environment: TZ: "Asia/Shanghai" deploy: mode: replicated replicas: 4 placement: placement: - node.role == worker restart_policy: condition: any networks: product: driver: overlay
推薦在 docker-compose.yml 里面寫上 build 節點,每次只需要執行 docker-compose build --no-cache 就可以構建鏡像了,再也不需要記住復雜的鏡像名和構建參數了。
deploy 節點可以編排發布的一些特性,比如 replicas 可以指定運行的容器個數,也可以用placement來限定容器運行的節點。
編寫好 docker-compose.yml 文件之后就可以執行下面命令將應用發布到集群中。
docker stack deploy --compose-file docker-compose-product.yml web-product
建議 replicas 的數量 > 1,否則上線的時候會出現短暫的 502。
CI對 ci 一直存在于理論中,這次有幸實踐了一把,體驗就是比 webhook 靠譜多了,配置也簡單,強烈推薦,.gitlab-ci.yml 示例:
# 可自定義上線的每個階段 stages: - build - release - test - release - deploy - cleanup build-beta-job: stage: build script: - docker-compose -f docker-compose-beta.yml build --no-cache - docker-compose -f docker-compose-beta.yml down -v - docker-compose -f docker-compose-beta.yml up -d only: - master build-release-job: stage: build script: - docker-compose -f docker-compose-release.yml build --no-cache - docker-compose -f docker-compose-release.yml down - docker-compose -f docker-compose-release.yml up -d only: - master deploy-product-job: stage: deploy script: - docker build --no-cache -f Dockerfile-product -t 127.0.0.1:5000/web-product:latest . - docker push 127.0.0.1:5000/web-product:latest - docker stack deploy --compose-file docker-compose-product.yml web-product only: - release cleanup-job: stage: cleanup script: - docker system prune -f only: - master - release
找一臺服務器安裝 gitlab-runner,參考鏈接,建議配置高一些。
在項目中編寫 .gitlab-ci.yml 文件,然后推送到 gitlab 即可。
鏡像結構對于鏡像的處理,依然沿用原來的辦法,將環境依賴的擴展等構建好作為一個底層基礎鏡像,業務代碼鏡像基于這個基礎鏡像再構建,可以加快構建速度。
配置文件鑒于上次搭建時配置文件管理混亂,這次做了統一規劃:
為每個環境創建不同的配置文件,可以以環境名后綴。
構建最頂層鏡像時連同配置文件一起 build 進去,千萬不要在底層鏡像修改配置文件。
清除數據新版的 docker 終于支持對無用數據的清除了,主要有以下命令:
docker image prune:刪除無用的鏡像。
docker container prune:刪除無用的容器。
docker volume prune:刪除無用的卷。
docker network prune:刪除無用的網絡。
docker system prune:刪除無用的鏡像、容器、卷、網絡。
要強制刪除可加上 -f 參數。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26965.html
摘要:使用有一段時間了,打算把自己實踐過程中的一些理解和感悟記錄下來。目錄實踐一了解架構實踐二使用教程實踐三下構建開發環境實踐四環境容器化實踐五生產環境容器化實踐六容器監控實踐七提升幸福感實踐八構建開發環境實踐九生產環境優化參考源碼分析系列文章 使用 docker 有一段時間了,打算把自己實踐過程中的一些理解和感悟記錄下來。 系列文章發布在 SegmentFault 上我的專欄 Tairy,...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
閱讀 2080·2021-11-24 10:34
閱讀 3055·2021-11-22 11:58
閱讀 3712·2021-09-28 09:35
閱讀 1724·2019-08-30 15:53
閱讀 2770·2019-08-30 14:11
閱讀 1551·2019-08-29 17:31
閱讀 542·2019-08-26 13:53
閱讀 2141·2019-08-26 13:45