持续交付的力量: 使用Docker Swarm进行CI/CD

这篇具有很好参考价值的文章主要介绍了持续交付的力量: 使用Docker Swarm进行CI/CD。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区

持续交付的力量: 使用Docker Swarm进行CI/CD

一、 介绍

1.1 Docker Swarm 简介

Docker Swarm 是 Docker 官方的集群管理和编排工具,用于管理多个 Docker 节点和容器,并分发容器到这些节点上运行。Docker Swarm 具有可扩展性、故障转移和负载均衡等优点,使得它成为一种流行的容器编排工具。

1.2 为什么要使用 Docker Swarm 进行 CI/CD

使用 Docker Swarm 进行 CI/CD 有很多优点:

  • 通过 Docker Swarm,可以轻松管理和扩展容器化应用程序。Docker Swarm 可以自动地调度和平衡容器实例,可以实现负载均衡,并且还提供了一些伸缩和容错的功能。
  • 使用 Docker Swarm 简化了应用程序的部署和管理。使用 Docker Compose YAML 文件,可以定义应用程序和服务,并且使用 Docker Stack 命令将它们部署到 Swarm 集群上。
  • Docker Swarm 内置了安全和限制功能,可以保证应用程序在集群中的安全性和可靠性。例如,可以使用 Docker Swarm 内置的 Secrets 功能来管理应用程序的机密信息。
  • 使用 Docker Swarm 进行 CI/CD 提供了更快的应用程序部署和测试反馈周期。使用 Docker 镜像作为应用程序的构建单元,并在 Docker Swarm 集群上部署它们,可以更快地推出应用程序功能或修复问题。

二、 准备工作

2.1 安装 Docker

安装 Docker Engine 取决于你的操作系统。以下是 Docker Engine 的安装步骤:

在 Linux 中安装 Docker Engine

  1. 卸载旧版本的 Docker Engine:
$ sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 安装 Docker Engine:
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io

2.2 安装 Docker Compose

Docker Compose 是 Docker 官方的工具,用于定义和运行多容器 Docker 应用程序。可以使用以下命令安装 Docker Compose:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

2.3 安装 Git

Git 是一个版本控制系统,用于管理代码库。可以使用以下命令安装 Git:

$ sudo apt-get update
$ sudo apt-get install git

2.4 安装 Jenkins

Jenkins 是一个流行的持续集成和持续交付工具,可以用于管理构建、测试和部署应用程序。可以使用以下命令在 Ubuntu 上安装 Jenkins:

$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt-get update
$ sudo apt-get install jenkins

安装完成后,可以在浏览器中打开 http://{your-ip-address}:8080,并按照屏幕上的安装向导完成 Jenkins 的安装。

三、 Jenkins 与 Docker Swarm 的集成

3.1 使用 Docker 插件在 Jenkins 中启动 Docker 容器

  1. 安装 Docker 插件:在 Jenkins 管理界面的插件管理中搜索并安装 Docker 插件。
  2. 新建 Jenkins 项目:在 Jenkins 欢迎页面点击 “New Item”,输入项目名称并选择 “Freestyle project”,然后点击 “Ok”。
  3. 配置 Jenkins 项目:在 Jenkins 项目页面中,选择 “Configure” 进入项目配置页面。
  4. 配置执行 Shell 命令:在项目配置页面中添加 “Execute shell” 构建步骤,并输入需要在 Docker 容器中执行的命令。

示例代码:

echo "Hello, Docker"

配置使用 Docker 容器:在 “Build Environment” 中选择 “Use Docker container”,选择需要启动的 Docker 镜像和容器。如果没有需要的镜像和容器,可以在 “Docker” 中添加一个新的 Docker 环境。

示例代码:

docker run -it ubuntu:latest /bin/bash

保存配置并运行构建任务:保存 Jenkins 项目的配置,并点击 “Build Now” 运行构建任务。在 “Console Output” 中可以查看执行结果。

3.2 使用 Docker Compose 插件在 Jenkins 中启动 Docker stack

  1. 安装 Docker Compose 插件:在 Jenkins 管理界面的插件管理中搜索并安装 Docker Compose 插件。
  2. 新建 Jenkins 项目:在 Jenkins 欢迎页面点击 “New Item”,输入项目名称并选择 “Freestyle project”,然后点击 “Ok”。
  3. 配置 Jenkins 项目:在 Jenkins 项目页面中,选择 “Configure” 进入项目配置页面。
  4. 配置执行 Shell 命令:在项目配置页面中添加 “Execute shell” 构建步骤,并输入需要在 Docker 容器中执行的命令。

示例代码:

echo "Hello, Docker Compose"

配置使用 Docker Compose:在 “Build Environment” 中选择 “Use Docker Compose”,并选择需要启动的 Docker stack。如果没有需要的 Docker stack,可以在 “Docker Compose” 中添加一个新的 Docker Compose 环境。

示例代码:

docker-compose -f docker-compose.yml up -d

保存配置并运行构建任务:保存 Jenkins 项目的配置,并点击 “Build Now” 运行构建任务。在 “Console Output” 中可以查看执行结果。

3.3 在 Jenkins 中使用 Docker Machine 创建 Docker Swarm 集群

  1. 安装 Docker Machine 插件:在 Jenkins 管理界面的插件管理中搜索并安装 Docker Machine 插件。
  2. 新建 Jenkins 项目:在 Jenkins 欢迎页面点击 “New Item”,输入项目名称并选择 “Freestyle project”,然后点击 “Ok”。
  3. 配置 Jenkins 项目:在 Jenkins 项目页面中,选择 “Configure” 进入项目配置页面。
  4. 配置执行 Shell 命令:在项目配置页面中添加 “Execute shell” 构建步骤,并输入需要在 Docker Swarm 集群中执行的命令。

示例代码:

docker service ls

配置使用 Docker Machine:在 “Build Environment” 中选择 “Provide Docker Machine environment”,并输入 Docker Swarm manager 节点的 IP 地址和 ssh 登录凭证。

示例代码:

docker-machine create --driver generic --generic-ip-address X.X.X.X --generic-ssh-user USER --generic-ssh-key ~/.ssh/id_rsa docker-swarm-manager

保存配置并运行构建任务:保存 Jenkins 项目的配置,并点击 “Build Now” 运行构建任务。在 “Console Output” 中可以查看执行结果。

四、 Docker Swarm 中的 CI/CD

4.1 Docker Swarm 集群中为应用程序设置 CI/CD 流程

  1. 在 Docker Swarm 集群中创建应用程序相关的服务和 Docker stack。
  2. 在 Git 仓库中为应用程序创建 CI/CD 管道文件。
  3. 使用 CI/CD 管道文件定义自动化构建、测试和部署流程。
  4. 在 CI/CD 管道中使用 Docker 镜像和容器来构建、运行和测试应用程序。
  5. 配置 CI/CD 服务器和工具来执行 CI/CD 管道并将应用程序部署到 Docker Swarm 集群。

示例代码:

version: '3.8'
services:
  app:
    image: my-app-image
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s

networks:
  frontend:

volumes:
  db-data:

4.2 使用 Docker Hub 和 Docker Registry 作为 CI/CD 流程的仓库

  1. 在 Docker Hub 或者自建 Docker Registry 中创建应用程序相关的镜像仓库。
  2. 在 Git 仓库中为应用程序创建 CI/CD 管道文件。
  3. 配置 CI/CD 管道文件,使用 Docker 镜像来构建、运行和测试应用程序,并将镜像推送到 Docker Hub 或者自建 Docker Registry 中。
  4. 在 Docker Swarm 集群中更新应用程序服务,使用新的镜像来部署应用程序。

示例代码:

version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: my-docker-hub/my-app-image
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s

networks:
  frontend:

volumes:
  db-data:

4.3 在 Docker Swarm 集群中运行 GitLab CI/CD 管道

  1. 在 GitLab 中创建应用程序相关的项目,并在项目中配置 CI/CD 管道。
  2. 使用 Docker piplelines 插件配置 CI/CD 管道文件,使用 Docker 镜像和容器来构建、运行和测试应用程序。
  3. 在 CI/CD 管道中使用 Docker Swarm 集群管理命令,在 Docker Swarm 集群中部署、更新和维护应用程序。
  4. 配置 CI/CD 服务器和工具来执行 CI/CD 管道,并将应用程序部署到 Docker Swarm 集群。

示例代码:

image: docker:19.03.12

services:
  - docker:dind

stages:
  - build
  - test
  - deploy

variables:
  DOCKER_DRIVER: overlay2

build:
  stage: build
  script:
    - docker build -t my-app-image .

test:
  stage: test
  script:
    - docker run my-app-image npm test

deploy:
  stage: deploy
  script:
    - docker stack deploy --compose-file docker-compose.yml my-app

五、 高级应用程序部署

5.1 部署多层应用程序到 Docker Swarm 集群

  1. 创建应用程序镜像和容器:使用 Dockerfile 构建应用程序镜像和容器。
  2. 创建数据库和缓存服务:使用 Docker Compose 或者 Docker stack 创建数据库和缓存服务。
  3. 将应用程序镜像上传到 Docker Registry:使用 docker push 命令将应用程序镜像上传到 Docker Registry。
  4. 在 Docker Swarm 集群中创建应用程序服务:使用 docker service create 命令创建应用程序服务,并指定应用程序镜像、容器、数据库和缓存服务等参数。
  5. 配置应用程序服务:使用 docker service update 命令更新应用程序服务的参数,如运行时间、副本数等。
  6. 监控应用程序服务:使用 docker service ps 命令来监控应用程序服务的运行状态。

示例代码:

version: '3.8'

services:
  web:
    image: my-app-image
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: any
    ports:
      - "80:80"
    networks:
      - frontend
      - backend
    depends_on:
      - db
      - cache

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - backend

  cache:
    image: redis
    networks:
      - backend

networks:
  frontend:
  backend:

volumes:
  db-data:

5.2 使用 Docker Swarm 网络进行负载均衡和安全访问

  1. 创建 Docker Swarm Overlay 网络:使用 docker network create 命令创建 Docker Swarm Overlay 网络,用于部署应用程序服务。
  2. 部署应用程序服务到 Docker Swarm Overlay 网络:使用 docker service create 命令将应用程序服务添加到 Docker Swarm Overlay 网络中,并使用 --network 参数指定 Overlay 网络之前创建的网络名称。
  3. 为应用程序配置负载均衡和安全访问:使用 Docker Swarm 内置的负载均衡和安全访问功能为应用程序配置规则,如访问控制、TLS 加密、IP 白名单等。
  4. 监控应用程序服务:使用 docker service ps 命令来监控应用程序服务的运行状态。

示例代码:

version: '3.8'

services:
  web:
    image: my-app-image
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: any
    ports:
      - "80:80"
    networks:
      - overlay
    depends_on:
      - db
      - cache

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - overlay

  cache:
    image: redis
    networks:
      - overlay

networks:
  overlay:
    driver: overlay
    attachable: true

volumes:
  db-data:

5.3 使用 Docker Swarm 状态来监视和管理应用程序

  1. 使用 Docker Swarm 状态命令来监视 Docker Swarm 集群和服务的状态,例如使用 docker service ls 和 docker stack ps 命令查询服务的状态。
  2. 使用 Docker Swarm API 和 GUI 工具来管理 Docker Swarm 集群和服务。
  3. 使用 Docker Swarm 组件和插件来自动化和简化 Docker Swarm 集群和服务的监视和管理工作。

示例代码:

$ docker service ls
ID             NAME      MODE         REPLICAS   IMAGE
c7h5i5t282io   app       replicated   3/3        my-app-image

$ docker stack ps my-stack
ID             NAME      IMAGE          NODE        DESIRED STATE  CURRENT STATE
9ofoo2dzxm2b   app.1     my-app-image   node-1      Running       Running 3 hours ago
3jia9m67ejah   app.2     my-app-image   node-2      Running       Running 3 hours ago
df3qzeavwx9a   app.3     my-app-image   node-3      Running       Running 3 hours ago

六、 总结

6.1 Docker Swarm 的优缺点

优点:

  • 内置支持 Docker 命令和 Docker API,与 Docker 集成度高。
  • 使用简单,易于学习和部署。
  • 内置支持服务发现、负载均衡、故障容错和水平伸缩等功能。
  • 可以与 Docker Registry 和 CI/CD 工具进行无缝集成。
  • 可以部署到单机或者分布式多节点的环境中。
  • 支持 Docker Secret 管理机密信息。
  • 开源免费,社区活跃,有大量的文档和示例可用。

缺点:

  • 缺乏某些高级功能,例如更复杂的网络管理和资源调度。
  • 性能和规模方面有限制,不适合大型和高负载的生产环境。
  • 对新手来说,安全性和稳定性可能会成为挑战。

6.2 Docker Swarm 在 CI/CD 中的作用

6.2.1 自动化应用程序构建和部署

Docker Swarm 能够集成到 CI/CD 工具中,实现自动化的应用程序构建和部署。通过 docker build 命令来构建镜像,并将构建好的镜像上传到 Docker Swarm 集群中。这样,开发人员可以更快地部署新的应用程序,并且可以在整个部署过程中进行不断的测试和迭代,从而提高开发效率和质量。

6.2.2 自动化的测试和持续集成

Docker Swarm 支持多种类型的测试工具和持续集成工具,可以自动执行测试和持续集成的流程。通过在 Docker Swarm 中运行应用程序,可以进行更快速的测试,并在流程中自动执行第一个版本的部署。这样可以有效提高开发团队的生产力和应用程序的质量。

6.3 计划未来在 Docker Swarm 中实施的功能

Docker 一直在不断的发展,并且有着很多计划可供实施以改进 Docker Swarm。以下是一些 Docker Swarm 未来计划中的主要功能:

6.3.1 自治式容器调度

随着 Swarm 群集的扩大,对容器调度的自动管理越来越重要。未来版本的 Docker Swarm 将支持完全自治的容器调度,这样用户就不必再手动管理容器,也可以避免容器的存在时间过长而导致的无用资源的占用。

6.3.2 Docker Swarm 编排文件

Docker Swarm 编排文件是一种将多个容器组合成一组服务的 YAML 文件。用户可以在其中指定启动顺序、容器状态等信息。此功能是一种在 Docker Swarm 中定义和管理应用程序的方式,可以简化流程并减少错误。

6.3.3 应用程序插件

Docker Swarm 的插件是一种简化配置和部署应用程序组件的工具。未来的 Docker Swarm 插件将使用户能够轻松地添加新的服务和功能。这将使其更加适合于复杂的应用程序和大规模集群。

6.3.4 自适应调度

未来版本的 Docker Swarm 将支持更强大的自适应调度,通过自动识别服务器资源瓶颈和容器消耗率,进行智能调度以满足更高性能、更少资源浪费和更优质服务的需求。
持续交付的力量: 使用Docker Swarm进行CI/CD文章来源地址https://www.toymoban.com/news/detail-426179.html

到了这里,关于持续交付的力量: 使用Docker Swarm进行CI/CD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【持续集成CI/持续部署CD】六、Docker Compose构建CI全流程

    1. 创建宿主机挂载目录并赋权 2. 新建 Jenkins+Sonar 安装脚本 jenkins-compose.yml 脚本,这里的 Jenkins 使用的是 Docker 官方推荐的镜像 jenkinsci/blueocean,在实际使用中发现,即使不修改插件下载地址,也可以下载插件,所以比较推荐这个镜像。 3. 在 jenkins-compose.yml 文件所在目录下执行

    2024年02月10日
    浏览(40)
  • 基于Docker构建CI/CD工具链(七)使用Jmeter进行自动化压测

    上一篇文章中,我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤,并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能,将构建好的镜像利用在自动化测试作业中。在今天的文章中,我们将重点讨论如何构建 JMeter 的 Docker 镜像,并演示如何在 GitLab 的 CI/CD 作业中利用该镜像

    2024年04月16日
    浏览(39)
  • Gitlab CI/CD笔记-第三天-使用主机docker in docker 进行构建并push镜像。

    一、啥叫docker in docker                1.就是允许的镜像里头有一个docker,但这个docekr镜像只有docker的cli和/var/lib/docker.sock的套接字,没有允许build.然后里头又运行了一个docker,这个docker有build的能力,此时构建时就是里头的docker使用外部的docker-/var/lib/docker.sock的套接字进行b

    2024年02月13日
    浏览(33)
  • Jenkins CI/CD 持续集成专题三 Jenkins 使用shell脚本打包组件配置流程

    第六步 查看编译状态和产物 到这里,jenkins 配置shell脚本打包组件的完整配置流程就已经完成

    2024年04月29日
    浏览(39)
  • 使用Kubernetes进行CI/CD的最佳实践

    CI/CD是指持续集成 (Continuous Integration) 和持续交付/部署 (Continuous Delivery/Deployment) 的缩写,是一种软件开发方法论。通过自动化的构建、测试、部署等过程CI/CD能够帮助开发者快速地将代码交付到生产环境中。 Kubernetes是一种容器编排工具,它非常适合用来部署和运行分布式应用

    2024年02月08日
    浏览(34)
  • CI/CD持续集成持续发布(jenkins)

            在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新部署; 这些情况都会涉及到频繁的打包部署; 手动打包常规步

    2024年02月14日
    浏览(43)
  • 【CI/CD技术专题】「Docker实战系列」本地进行生成镜像以及标签Tag推送到DockerHub

    背景介绍 Docker镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去。创建的镜像最好要符合Docker Hub的tag要求,因为在Docker Hub注册的用户名是liboware,最后利用docker push命令推送镜像到公共仓库。 前提概要 你需要在Docker hub注册用户:到官网注册账

    2024年02月10日
    浏览(39)
  • CI/CD持续测试的未来...

    如果您想知道为什么持续测试如此重要,请考虑以下几点:在过去,软件测试通常是在编写代码并发送给 QA 部门进行独立测试之后进行的。当发现错误时,代码将返回给开发人员进行更正。虽然这种测试方法有效,但非常耗时。如今,企业想要快速生产出高质量的产品,因此

    2024年02月12日
    浏览(39)
  • CI/CD到底是啥?持续集成/持续部署概念解释

    大家好,我是chowley,日常工作中,我每天都在接触CI/CD,今天就给出我心中的答案。 在现代软件开发中,持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD)是两个非常重要的实践,它们通过自动化的流程来加速软件的开发、测试和部署,提高团队的效率和

    2024年02月19日
    浏览(34)
  • 【git】CI/CD持续集成与部署C++示例

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍CI/CD持续集成与部署C++示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 CI/CD (持续集成/持续交付)是一种软件开发实践和方法论,旨在通过

    2024年01月19日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包