当前位置: 首页 > 编程笔记 >

Docker堆栈的管理操作详解

通煜祺
2023-03-14
本文向大家介绍Docker堆栈的管理操作详解,包括了Docker堆栈的管理操作详解的使用技巧和注意事项,需要的朋友参考一下

本文详细讲述了Docker堆栈的管理操作。分享给大家供大家参考,具体如下:

在Docker中,镜像是一个轻量级的,独立的可执行程序包,包含运行一个软件所需的所有东西,包括代码、运行环境、库、环境变量和配置文件。容器是镜像的运行实例,默认情况下,它与主机环境完全隔离,只有在配置时才访问主机文件和端口。

在《Docker集群的创建与管理》中,设置了一个运行Docker的机器集群,并部署了一个应用程序,容器在多台机器上运行。现在你可以了解分布式应用程序层次结构的顶层:堆栈。堆栈是一组相互关联的服务,它们可以共享依赖关系,并且可以一起协调和缩放。单个堆栈能够定义和协调整个应用程序的功能。

添加一个新服务并重新部署

将服务添加到docker-compose.yml文件很容易,首先添加一个免费的可视化器服务,使我们能看到是如何调度容器。在编辑器中打开docker-compose.yml,并用下面的代码替换它的内容:

version: "3"
services:
 web:
 # 用你的名称和镜像细节替换username/repo:tag
 image: username/repo:tag
 deploy:
  replicas: 5
  restart_policy:
  condition: on-failure
  resources:
  limits:
   cpus: "0.1"
   memory: 50M
 ports:
  - "80:80"
 networks:
  - webnet
 visualizer:
 image: dockersamples/visualizer:stable
 ports:
  - "8080:8080"
 volumes:
  - "/var/run/docker.sock:/var/run/docker.sock"
 deploy:
  placement:
  constraints: [node.role == manager]
 networks:
  - webnet
networks:
 webnet:

这里唯一新增的就是名为visualizer的web对等服务,在这里可以看到两个新东西:volumes密钥,赋予visualizer访问Docker的主机套接字文件的权限,以及一个placement密钥,确保此服务只能在集群管理器上运行。这个由Docker创建的开源项目构建的容器可以显示集群上运行的Docker服务。

确保你的终端被配置为与myvm1进行通信,运行docker-machine ls列出机器,并确保已连接到myvm1,如果需要可以重新运行docker-machine env myvm1,然后运行给定的命令来配置终端。在管理器上重新运行docker stack deploy命令,任何需要更新的服务都将被更新:

$ docker stack deploy -c docker-compose.yml getstartedlab

docker-compose.yml文件中可以看到,visualizer在端口8080上运行,通过运行docker-machine ls来获取其中一个节点的IP地址,转到8080端口的IP地址,将看到visualizer正在运行:

visualizer的单个副本按照预期在管理器上运行,并且网络的5个实例遍布整个集群,可以通过运行docker stack ps <stack>来证实这个可视化:

$ docker stack ps getstartedlab

visualizer是一个独立的服务,可以在任何包含它的应用程序中运行,它不依赖于其他任何东西。现在创建一个具有依赖性的服务,Redis服务将提供访问者计数器。

数据持久化

再次通过相同的工作流程来添加一个用于存储应用程序数据的Redis数据库,保存这个新的docker-compose.yml文件,最后添加一个Redis服务:

version: "3"
services:
 web:
 # 用你的名称和镜像细节替换username/repo:tag
 image: username/repo:tag
 deploy:
  replicas: 5
  restart_policy:
  condition: on-failure
  resources:
  limits:
   cpus: "0.1"
   memory: 50M
 ports:
  - "80:80"
 networks:
  - webnet
 visualizer:
 image: dockersamples/visualizer:stable
 ports:
  - "8080:8080"
 volumes:
  - "/var/run/docker.sock:/var/run/docker.sock"
 deploy:
  placement:
  constraints: [node.role == manager]
 networks:
  - webnet
 redis:
 image: redis
 ports:
  - "6379:6379"
 volumes:
  - /home/docker/data:/data
 deploy:
  placement:
  constraints: [node.role == manager]
 command: redis-server --appendonly yes
 networks:
  - webnet
networks:
 webnet:

Redis在Docker库中有一个官方镜像,并且已经被授予redis的简短镜像名称,所以在这里没有username/repo。Redis端口6379已经由Redis预先配置好,从容器中暴露给主机,在docker-compose.yml文件中,将它从主机暴露给外部,这样就可以为任何节点到Redis桌面管理器中,并管理这个Redis实例。

最重要的是,redis规范中有几件事情使数据在这个堆栈的部署之间持续存在:redis总是在管理器上运行,所以它总是使用相同的文件系统;redis在主机的文件系统中访问一个任意目录作为容器内部的/data,这是Redis存储数据的地方。总之,这是在Redis数据的主机物理文件系统中创建“真实来源”。如果没有这个,Redis将把它的数据存储在容器文件系统中的/data中,如果这个容器被重新部署的话,这些数据将被清除。

这个真实来源有两个组成部分:placement在Redis服务上的placement约束,确保它始终使用相同的主机;创建的volumes允许容器作为/data(在Redis容器内)访问/data(在主机上),在容器来来去去的时候,存储在指定主机上的/data文件将会持续存在,从而保持连续性。

在管理器上创建一个/data目录:

$ docker-machine ssh myvm1 "mkdir ./data"

确保终端被配置为与myvm1进行通信,运行docker-machine ls列出机器,并确保已连接到myvm1,如果需要可以重新运行docker-machine env myvm1,然后运行给定的命令来配置终端。在管理器上重新运行docker stack deploy命令,任何需要更新的服务都将被更新:

$ docker stack deploy -c docker-compose.yml getstartedlab

运行docker service ls以验证这三个服务是否按预期运行:

$ docker service ls

查看您的某个节点的网页,您将看到访客计数器的结果,该计数器现在已经存在并将信息存储在Redis上:

另外,使用任一节点的IP地址8080端口访问可视化器,将看到随webvisualizer服务一起运行的redis服务:

希望本文所述对大家docker容器的使用有所帮助

 类似资料:
  • 本文向大家介绍Android  Activity生命周期和堆栈管理的详解,包括了Android  Activity生命周期和堆栈管理的详解的使用技巧和注意事项,需要的朋友参考一下 Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件。 系统提供的组件,不需要用户实例化,用户也不能实例化,是系

  • 6、堆栈操作指令(StackOperation Instruction) 堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。 1)、进栈操作 、PUSH(Push Word or Doublewordonto Stack) 指令格式:PUSH Reg/Mem PUSH Imm;80286+ 一个字进栈,系统自动完成两步操作:SP

  • 本文向大家介绍mysql事务管理操作详解,包括了mysql事务管理操作详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了mysql事务管理操作。分享给大家供大家参考,具体如下: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不执行(很经典的一个例子是

  • 问题内容: 我正在阅读有关JVM体系结构的信息。今天,我了解了操作数堆栈的概念。根据一篇文章: 在字节码指令执行期间使用操作数堆栈,其方式与在本机CPU中使用通用寄存器的方式类似。 我不明白:操作数堆栈到底是什么,以及它在jvm中如何工作? 问题答案: 这是各种单个字节码操作如何获取其输入以及它们如何提供其输出的方式。 例如,考虑将两个s相加的运算。要使用它,您将两个值压入堆栈,然后使用它: 现在

  • 简而言之,Django管理后台的基本流程是,“选择一个对象并改变它”。在大多数情况下,这是非常适合的。然而当你一次性要对多个对象做相同的改变,这个流程是非常的单调乏味的。 在这些例子中,Django管理后台可以让你实现和注册“操作” —— 仅仅只是一个以已选中对象集合为参数的回调函数。 在Django自带的管理页面中都能看到这样的例子。Django在所有的模型中自带了一个“删除所选对象”操作。例如

  • An admin API request will be done on a URI that starts with the configurable ‘admin’ resource entry point. Authorization for the admin API duplicates the S3 authorization mechanism. Some operations re