Docker swarm如何通过docker-compose部署应用

 更新时间:2024年02月04日 10:26:09   作者:ghostwritten  
这篇文章主要介绍了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: replicatedreplicas: 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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解

    Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解

    这篇文章主要介绍了Docker mongoDB 4.2.1 安装并收集springboot日志,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • docker搭建mongodb单节点副本集的实现

    docker搭建mongodb单节点副本集的实现

    本文主要介绍了docker搭建mongodb单节点副本集的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装图文教程

    2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装图文教程

    这篇文章主要介绍了2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装图文教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Docker部署FastDFS的实现方法

    Docker部署FastDFS的实现方法

    这篇文章主要介绍了Docker部署FastDFS的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • docker容器中登陆并操作postgresql的实现

    docker容器中登陆并操作postgresql的实现

    本文主要介绍了docker容器中登陆并操作postgresql的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • docker 部署 Elasticsearch kibana及ik分词器详解

    docker 部署 Elasticsearch kibana及ik分词器详解

    这篇文章主要介绍了docker 部署 Elasticsearch kibana及ik分词器详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Docker如何挂载mysql

    Docker如何挂载mysql

    这篇文章主要介绍了Docker如何挂载mysql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Mac M1 Docker如何运行nacos2.0.3(若依微服务框架)

    Mac M1 Docker如何运行nacos2.0.3(若依微服务框架)

    这篇文章主要介绍了Mac M1 Docker如何运行nacos2.0.3(若依微服务框架),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • docker registry 镜像同步的实现思路

    docker registry 镜像同步的实现思路

    这篇文章主要介绍了docker registry 镜像同步的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 查看docker镜像中文件的方法

    查看docker镜像中文件的方法

    在本篇文章里小编给各位分享的是关于查看docker镜像中文件的方法,有兴趣的朋友们可以参考学习下。
    2020-03-03

最新评论