日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 与 DevOps自动化部署实践

發布時間:2024/9/3 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 与 DevOps自动化部署实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用Docker 實現自動熱部署? ?

簡單的流程

  • 開發人員在本地完成代碼開發后,提交到本地分支,利用docker模擬生產環境進行測試,測試通過后合并到遠端的主分支;
  • master 主分支一旦更新后,觸發持續集成軟件進行打包集成(常見的集成工具: gitlab-vi,travis,或Jenkins)自動完成構建docker 鏡像并push 推到遠程倉庫(docker cloud 或者企業自己的docker registry)
  • 利用docker cloud,k8s等持續部署到web服務器。
  • 配置發布服務器從倉庫拉取鏡像,run起來后,停止舊的版本。完成了一次自動集成部署。
  • 實驗步驟

    搭建GitLab CI集成服務器

    ? 不同的項目可能需要不同的測試環境,如果直接在CI服務器上面部署測試,多個項目可能會造成紊亂錯誤。

    利用docker 容器,將項目build 成docker 容器,再進行測試,測試成功再push到docker registry 服務器。即使在一個CI服務器,也可以部署多個測試環境,以供使用。大大精簡測試和部署的流程。

    # 安裝 gitlab ci runnercurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh |sudo bashsudo yum install gitlab-ci-multi-runner -ysudo gitlab-ci-multi-runner statussudo usermod -aG docker gitlab-runnersudo service docker restartsudo gitlab-ci-multi-runner restart# 本地gitlab地址 http://gitlab.example.com/ 安裝 gitlab ci runner # 注冊runner sudo gitlab-ci-multi-runner register gitlab-ci 集成服務器注冊runner(即不同的集成環境供gitlab調用)token 在項目的CI選項里面,可以找到一般不要把runner 綁定到一個項目,這樣其他項目也可以調用。(除特殊項目需綁定以保護)[root@jenkins vagrant]# sudo gitlab-ci-multi-runner registerRunning in system-mode.Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):http://gitlab.example.comPlease enter the gitlab-ci token for this runner:gWCZZjwskFtS5n4XT6kVPlease enter the gitlab-ci description for this runner:[jenkins]: gitlab-ciPlease enter the gitlab-ci tags for this runner (comma separated):python3.4Whether to run untagged builds [true/false]:[false]:Whether to lock Runner to current project [true/false]:[false]:Registering runner... succeeded runner=gWCZZjwsPlease enter the executor: docker, shell, ssh, kubernetes, docker-ssh, parallels, virtualbox, docker+machine, docker-ssh+machine:dockerPlease enter the default Docker image (e.g. ruby:2.1):python:3.4Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 注冊runner 查看[root@jenkins vagrant]# sudo gitlab-ci-multi-runner listListing configured runners ConfigFile=/etc/gitlab-runner/config.tomljenkins Executor=shell Token=d790b6db10f7f7d3b8547519818948 URL=http://10.0.0.190/gitlab-ci Executor=shell Token=ad11a86454c6552424fbf0d6c8b029 URL=http://gitlab.example.comgitlab-ci Executor=docker Token=0304db778d4e040d25234594dbe363 URL=http://gitlab.example.comgitlab-ci Executor=docker Token=b57303fbaf1623a5d8c42723606aad URL=http://gitlab.example.com[root@jenkins vagrant]# sudo gitlab-ci-multi-runner verifyRunning in system-mode.Verifying runner... is alive runner=ad11a864Verifying runner... is alive runner=0304db77Verifying runner... is alive runner=b57303fb 查看

    ?? projects 的導入,可以通過github,url等導入到gitlab

    創建Pipeline

    在項目根目錄下創建 .gitlab-ci.yml? 并配置。 Python 的 tox 測試

    .gitlab-ci.ymlstages:- style- test- deploy- releasepep8:stage: stylescript:- pip install tox- tox -e pep8tags:- python2.7except:- tagsunittest-py27:stage: testscript:- pip install tox- tox -e py27tags:- python2.7except:- tagsunittest-py34:stage: testscript:- pip install tox- tox -e py34tags:- python3.4except:- tagsdocker-deploy:stage: deployscript:- docker build -t flask-demo .- if [ $(docker ps -aq --filter name=web)];then docker rm -f web;fi- docker run -d -p 5000:5000 --name web flask-demotags:- demoonly:- masterdocker-image-release:stage: releasescript:- docker build -t registry.example.com:5000/flask-demo:$CI_COMMIT_TAG .- docker push registry.example.com:5000/flask-demo:$CI_COMMIT_TAGtags:- demoonly:- tags .gitlab-ci.yml 項目根目錄下的集成文件 .gitlab-ci.yml 配置集成和部署的步驟 (pipeline)tags: # 執行環境- runnerexcept: # 排除,tags不觸發- tagsonly: # 只有master更改才觸發- masterstages: # 流程,有哪些步驟- style- test- dploy- releasejob name: #job名稱 ,屬于某一個流程 .gitlab-ci.yml配置語法 具體看幫助信息

    ??? gitlab 可以 實現代碼倉庫托管,直接拉取倉庫集成測試。這塊比較好,而且天生支持分布式。

    CI的部署,但是runner公有的有限,還是得要有自己的測試runner,可以在本地自己搭建linux gitlab runner ,配置好環境,并注冊,供gitlab CI 測試調度。然后發布到正式服務器。
    ???? gitlab-ci 本身就支持分布式,可以再多臺機器上執行runner 供gitlab 調用測試

    要注意保護 master 分支 ,不能被隨意修改,
    ???? 在 CI 設置里有 master protect 選項 和 parallel 檢查設置
    ???? 只有push-->merge request-->pipline 測試通過 --> commit

    .travis.yml # travis集成環境的環境配置文件 https://travis-ci.org/ 一個CI網站 ,開源項目免費,私有項目要錢。

    language: python env:- TOXENV=py27- TOXENV=py34- TOXENV=pep8- TOXENV=docsinstall:- pip install tox- pip install coveralls script:- toxafter_success:coveralls --verbose .travis.yml

    提交觸發后 pipeline 的執行流程,可以點不同job 進行查看執行情況

    注意要給項目分配 runner

    ? 當runner 環境為shell等非docker 時,要拉取自己搭建的gitlab 倉庫,只需要配置hosts文件即可。

    ? 可當用runner 是 docker 時,每次拉取代碼時,docker并不知道宿主機上的host文件,又不可能手動加進去,那樣太麻煩。所以會出現無法訪問自己的gitlab倉庫。

    這時候就需要,搭建DNS解析服務器,讓docker能夠解析到倉庫。?

    搭建DNS 服務器

    ? 配置一個DNS服務器,以便能讓其他容器解析到集成服務器 gitlab.example.com

    ? 首先,在gitlab ci服務器上把 gitlab.example.com 從/etc/hosts里刪除

    ? 這時候在gitlab ci服務器上是 ping 不通 gitlab.example.com的。
    ?? 找一臺新的Linux host,裝好Docker,創建一個dnsmasq的容器,并運行。

    docker-dns 服務器搭建docker-hostdocker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN --name dns-server andyshinn/dnsmasqdocker exec -it dns-server /bin/sh 首先配置上行的真正的dns服務器地址,創建文件:vi /etc/resolv.dnsmasq 添加內容:nameserver 114.114.114.114nameserver 8.8.8.8 # 置本地解析規則,這才是我們的真實目的。新建配置文件 vi /etc/dnsmasqhosts # 加解析規則,其中192.168.205.160是本地 gitlab 服務器地址192.168.205.160 gitlab.example.com 修改 dnsmasq 配置文件,指定使用上述我們自定義的配置文件vi /etc/dnsmasq.conf 修改下述兩個配置resolv-file=/etc/resolv.dnsmasqaddn-hosts=/etc/dnsmasqhosts回到宿主,重啟dns-server容器服務。docker restart dns-server 這時候這臺docker host就是一個DNS服務器了,假如他的地址是192.168.205.15 dns-server 配置

    ?搭建完dns服務器后,要修改為gitlab ci 服務器DNS服務器的ip ---> nameserver 192.168.205.15

    [vagrant@ci ~]$ more /etc/resolv.conf # Generated by NetworkManager #nameserver 10.0.2.3 nameserver 192.168.205.15 view

    這時候 docker 就能訪問到gitlab服務器。

    搭建Docker registry 倉庫服務器

    ? docker hub 上傳的鏡像,屬于公開狀態,docker cloud 有要錢,還好可以搭建自己的docker registry服務器。這樣push pull就方便多了。

    ? 這里將docker registry 服務器安裝在dns同一臺機器上。

    docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2

    ? 配置 dns-server

    執行 docker exec-it dns-server/bin/sh 添加一條新的記錄 / # more /etc/dnsmasqhosts 192.168.205.160 gitlab.example.com 192.168.205.15 reqistry.example.com view

    ? docker restart dns-server

    ci 服務器 測試push 時 報錯[root@jenkins vagrant]# docker push registry.example.com:5000/flask-demo:V10The push refers to repository [registry.example.com:5000/flask-demo]Get https://registry.example.com:5000/v2/: http: server gave HTTP response to HTTPS client docker-registry 服務器為http協議客戶端設置默認是HTTPS 協議取push所以要特別更改/etc/docker/daemon.json"insecure-registries":["http://registry.example.com:5000"] [root@jenkins vagrant]# more /etc/docker/daemon.json{"registry-mirrors": ["https://6qcpzbml.mirror.aliyuncs.com"],"insecure-registries":["http://registry.example.com:5000"]}

    查看push到registry的鏡像版本

    ???? http://registry.example.com:5000/v2/flask-demo/tags/list

    查看push的鏡像 registry
    ???? [root@docker-host ~]# ls /opt/registry/docker/registry/v2/repositories/
    ???? flask-demo

    在測試通過需要將最新的image push 到倉庫

    同時 部署容器時,要判斷是否有舊的版本容器需要刪除,然后再run新版本的容器

    $CI_CONMMIT_TAG 是gitlab-ci 的環境變量。具體可以查看幫助文件

    ?? 一有版本發布或是提交時會自動測試,管理員檢查合并到master分支后,就會觸發pipeline執行集成構建,build的最新鏡像會被push 到倉庫。

    ?? 然后配置發布服務器從倉庫拉取鏡像,刪除舊的版本,重新run新的版本。就完成了一次自動集成部署。

    總結

    以上是生活随笔為你收集整理的Docker 与 DevOps自动化部署实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。