Docker swarm 通过 docker-compose 部署应用

简介: Docker swarm 通过 docker-compose 部署应用

Docker swarm 通过 docker-compose 部署应用

文章目录

1 初始化swarm

默认情况下,Docker作为一个隔离的单节点工作。所有容器仅部署在引擎上。群模式将它变成了一个多主机集群感知引擎。

为了使用秘密功能,Docker必须处于“群模式”。这是通过

$ docker swarm init
Swarm initialized: current node (ean4r3wx8dutbj2hlkp4lsfu0) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-2t5z3yzsmq4xlhilsuh04ltiprnqt1h1cv8gmmaq6eip3day99-advgpojck21b1hlh3v6vgpncq 172.17.0.86:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在第二台主机上执行下面的命令,将它作为一个worker添加到集群中。

$ token=$(ssh -o StrictHostKeyChecking=no 172.17.0.86 "docker swarm join-token -q worker") && docker swarm join 172.17.0.86:2377 --token $token
Warning: Permanently added '172.17.0.86' (ECDSA) to the list of known hosts.
This node joined a swarm as a worker.

2. 创建 Docker Compose 文件

使用Docker Compose v3,可以定义一个Docker部署以及生产细节。这为管理可以部署到集群模式集群中的应用程序部署提供了一个中央位置。

一个Docker Compose文件已经创建,它定义了使用web前端部署Redis服务器。使用以下命令查看文件.

$ cat docker-compose.yml
version: "3"
services:
  redis:
    image: redis:alpine
    volumes:
      - db-data:/data
    networks:
      appnet1:
        aliases:
          - db
    deploy:
      placement:
        constraints: [node.role == manager]
  web:
    image: katacoda/redis-node-docker-example
    networks:
      - appnet1
    depends_on:
      - redis
    deploy:
      mode: replicated
      replicas: 2
      labels: [APP=WEB]
      resources:
        limits:
          cpus: '0.25'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: continue
        monitor: 60s
        max_failure_ratio: 0.3
      placement:
        constraints: [node.role == worker]
networks:
    appnet1:

该文件已扩展到利用群集部署选项。


第一个配置选项使用depends_on。这意味着Redis必须在网络之前部署,并允许我们控制服务启动的顺序。


下一个配置选项定义应该如何使用新的部署选项部署应用程序。


首先,mode: replicated和replicas: 2决定服务应该启动多少个replicas。

其次,定义资源。限制是应用程序不能超过的硬限制,预留是Docker Swarm指示应用程序需要的资源的指南。


第三,restart_policy指出进程崩溃时应该如何操作。


第四,update_config定义如何应用和推出更新。


最后,位置允许我们添加约束,以确定服务应该部署在哪里。

更多docker-compose file文件配置细节请参考

3. 部署服务

Docker Compose文件被称为Docker Compose Stack。堆叠可以通过CLI部署到Swarm。

docker stack命令用于通过Swarm部署docker Compose stack。在本例中,它将以myapp作为服务的前缀

$ docker stack deploy --compose-file docker-compose.yml myapp
Creating network myapp_appnet1

一旦部署完毕,就可以使用CLI检查状态。

$ docker stack ls
NAME                SERVICES            ORCHESTRATOR
myapp               2                   Swarm

可以通过以下方式发现内部服务的详细信息

$ docker stack services myapp
ID                  NAME                MODE                REPLICAS            IMAGE                                       PORTS
l8c8oztncboc        myapp_web           replicated          2/2                 katacoda/redis-node-docker-example:latest   

注意,该命令指示服务的Desired / Running状态。如果不能部署服务,那么这将是不同的。

每个服务容器的详细信息可以使用

$ docker stack ps myapp
ID                  NAME                IMAGE                                       NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
x90dytk7svj7        myapp_web.1         katacoda/redis-node-docker-example:latest   host02              Running             Running 3 minutes ago                       
92a3t08318ne        myapp_redis.1       redis:alpine                                host01              Running             Running 3 minutes ago                       
ikmrz4pufzyd        myapp_web.2         katacoda/redis-node-docker-example:latest   host02              Running             Running 3 minutes ago                       

所有这些信息仍然可以被发现使用

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
21bbc04a9e8d        redis:alpine        "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        6379/tcp            myapp_redis.1.92a3t08318neq5g5sd1akrwzo




相关文章
|
8月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
3834 4
|
8月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
813 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
8月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
398 5
|
8月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2657 8
|
8月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
7724 8
|
8月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
1152 4
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
1195 0
【云原生】阿里云服务器部署 Docker Swarm集群
|
弹性计算 数据可视化 关系型数据库
使用阿里云部署基于docker的mysql云服务
本篇文章将介绍如何使用阿里云安装docker、部署mysql服务,并远程连接至远端mysql
1136 1
使用阿里云部署基于docker的mysql云服务

热门文章

最新文章