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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

使用GitLab CI和Docker进行容器应用自动化部署

發布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用GitLab CI和Docker进行容器应用自动化部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

容器 Docker 越來越受開發者和運維人員的喜愛,更是作為實踐 DevOps 的一個中要工具。同時 Gitlab 提供了免費的代碼管理服務,其 gitlab-ci 更是提供了強大的自動化 CI/CD 流程功能。

本文以一個靜態站點的示例來說明如何使用 gitlab-ci 和 docker 進行容器鏡像的構建,以及如何將鏡像自動化部署到目標服務器上。如果你想和更多Docker技術專家交流,可以加我微信liyingjiese,備注『加群』。群里每周都有全球各大公司的最佳實踐以及行業最新動態

編寫Dockerfile

首先在代碼庫中增加 Dockerfile ,用于描述如何構建應用的容器鏡像。以下是一個基于 Hugo 的靜態站點應用的示例:

FROM?mengzyou/hugo:latest?as?builderCOPY?.?/app/RUN?hugoFROM?nginx:1.16-alpineRUN?set?-x?\ &&?rm?-f?/etc/nginx/conf.d/default.conf?\ &&?mkdir?-p?/usr/share/nginx/htmlCOPY?--from=builder?/app/nginx-default.conf?/etc/nginx/conf.d/default.conf COPY?--from=builder?/app/public/?/usr/share/nginx/html


其實非常簡單,使用了多階段構建,以?mengzyou/hugo?作為構建鏡像,然后將生成的靜態文件拷貝到 Nginx 鏡像中,最終生成靜態站點的鏡像。

配置Gitlab-ci構建容器鏡像

該階段,在項目根目錄添加 .gitlab-ci.yml 文件,示例內容如下:

variables: DOCKER_DRIVER:?overlay2 CI_REGISTRY_IMAGE:?${CI_REGISTRY}/mengzyou/appbefore_script: -?echo?$CI_JOB_NAME -?echo?$CI_PROJECT_DIRstages: -?buildbuild:docker: stage:?build variables: DOCKER_HOST:?tcp://docker:2375 image:?docker:stable services: -?docker:dind script: -?echo?"Building?image?-?$CI_REGISTRY_IMAGE:latest" -?echo?"$CI_REGISTRY_PASSWORD"?|?docker?login?-u?"$CI_REGISTRY_USER"?--password-stdin?$CI_REGISTRY -?docker?image?build?--force-rm?--no-cache?-t?$CI_REGISTRY_IMAGE:latest?. -?docker?image?push?$CI_REGISTRY_IMAGE:latest only: -?master


其中有幾個變量是需要在代碼庫的 GitLab 上進行配置,如下圖所示:

正在上傳…重新上傳取消


因為直接是用了 GitLab 提供的容器鏡像服務,構建完成的鏡像需要推送到該鏡像倉庫服務,所以需要配置相應的倉庫地址,用戶名和登錄密碼:

  • CI_REGISTRY:倉庫地址,如 registry.gitlab.com
  • CI_REGISTRY_USER:GitLab 的訪問用戶名
  • CI_REGISTRY_PASSWORD:GitLab 的訪問密碼


這樣在推送鏡像之前,需要進行一次登錄操作。更多關于如何是用 Gitlab 容器鏡像倉庫可參考?https://docs.gitlab.com/ee/use ... .html?。

該 Pipeline 工作使用了 GitLab Runner 的 Docker 執行器,如果是自己安裝和注冊 gitlab-runner ,請參考其文檔。這里直接是用了 Gitlab.com 分享的 Runner 。

安裝用于部署的gitlab-runner

為了在目標服務器上使用 gitlab-ci 進行自動部署(運行容器),需要在目標服務器上安裝和注冊 gitlab-runner 。由于目標服務器上運行容器,因此應該首先安裝好 Docker 環境,同時 gitlab-runner 也直接是用容器運行(當然也可以直接本地運行,具體可以查看 gitlab-runner 的文檔)。

安裝注冊Runner

可以使用 docker-compose 來部署 gitlab-runner 容器,在目標服務器上的 ~/gitalb/ 目錄下編寫如下 docker-compose.yml 文件:

version:?'2.4'services: runner: image:?gitlab/gitlab-runner:alpine-v11.11.0 container_name:?gitlab_runner restart:?always network_mode:?bridge volumes:-?./config/:/etc/gitlab-runner/-?/var/run/docker.sock:/var/run/docker.sock


創建目錄 config 用于保存 runner 的配置:

mkdir?config


然后啟動 runner 容器:

docker-compose?up?-d?runner


注冊 runner 之前需要在 Gitlab 項目的 CI/CD 配置中(設置 > CI/CD > Runner)查看注冊 URL 和令牌,如下圖所示:

正在上傳…重新上傳取消


接下來,運行一下命令進行 runner 的注冊:

docker-compose?exec?runner?gitlab-runner?register?\ --url?https://gitlab.com/?\ --registration-token?$REGISTRATION_TOKEN?\ --executor?docker?\ --description?"app-deployment-runner"?\ --tag-list?"deploy,docker"?\ --docker-image?"mengzyou/docker:19.03"?\ --docker-volumes?/var/run/docker.sock:/var/run/docker.sock


注意:上面的 $REGISTRATION_TOKEN 需要替換成真實的令牌值。

上面的命令注冊了一個默認使用 mengzyou/docker 鏡像運行容器的執行器,同時掛載了 /var/run/docker.sock,因為默認執行容器里的 Docker 將訪問主機上的 Docker 服務。

配置Gitlab-ci進行自動部署

在 .gitlab-ci.yml 中增加部署的工作:

stages: -?build -?deploydeoploy:docker: stage:?deploy script: -?echo?"Deploy?try_app?-?$CI_REGISTRY_IMAGE:latest" -?echo?"$CI_REGISTRY_PASSWORD"?|?docker?login?-u?"$CI_REGISTRY_USER"?--password-stdin?$CI_REGISTRY -?docker?rm?-f?try_app?||?true -?docker?image?pull?$CI_REGISTRY_IMAGE:latest -?docker?container?run?--name?try_app?-p?80:80?-d?$CI_REGISTRY_IMAGE:latest only: -?master tags: -?deploy -?docker


當然,也可以寫部署腳本來執行部署的步驟,也可以使用 docker-compose 通過 docker-compose.yml 文件來執行,例如:

deoploy:docker: stage:?deploy script: -?echo?"Deploy?${CD_COMPOSE_PROJECT}_app?-?$CI_REGISTRY_IMAGE:latest" -?echo?"$CI_REGISTRY_PASSWORD"?|?docker?login?-u?"$CI_REGISTRY_USER"?--password-stdin?$CI_REGISTRY -?docker?image?pull?$CI_REGISTRY_IMAGE:latest -?mkdir?-p?/tmp/${CD_COMPOSE_PROJECT}?&&?cp?${CI_PROJECT_DIR}/docker-compose.prod.yml?/tmp/${CD_COMPOSE_PROJECT}/docker-compose.yml -?cd?/tmp/${CD_COMPOSE_PROJECT}?&&?docker-compose?up?-d?myblog only: -?master tags: -?deploy -?docker


其中可以定義 CD_COMPOSE_PROJECT 變量來指定 docker-compose 的項目名,相應的在代碼根目錄增加 docker-compose.prod.yml 文件:

version:?'2.4'networks: web: external:?trueservices: app: image:?"registry.gitlab.com/mengzyou/app:latest" networks:-?web restart:?unless-stopped mem_limit:?256M labels:-?"traefik.enable=true"-?"traefik.docker.network=web"-?"traefik.backend=app"-?"traefik.frontend.rule=Host:app.mengz.me;PathPrefix:/"-?"traefik.frontend.redirect.entryPoint=https"-?"traefik.frontend.redirect.permanent=true"-?"traefik.port=80"


上面的 docker-composle 文件還定義了 traefik 相關的參數,這要求在目標服務器上已經運行了相應的 traefik 服務作為 Web 代理。

完成以上步驟之后,每次推送 master 分支,都會觸發相應的 gitlab CI/CD pipeline 來執行每個階段的 CI/CD 工作,如下圖:

正在上傳…重新上傳取消

?

總結

以上僅僅進行了一個簡單應用的 CI/CD 示例,主要演示了如何使用 gitlab-ci 和 Docker 來進行 CI/CD 流程。

原文鏈接:https://mengz.me/posts/docker- ... b-ci/

總結

以上是生活随笔為你收集整理的使用GitLab CI和Docker进行容器应用自动化部署的全部內容,希望文章能夠幫你解決所遇到的問題。

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