如何使 docker 堆栈可以使用 ebs 卷

how to make ebs volume usable by docker stack

我正在使用 ansible 和 Docker(运行 在 Swarm 中)在 AWS 中构建一个多层环境。我有 1 个主节点和 2 个工作节点。我正在使用 Docker 堆栈使用以下命令在 swarm 中创建服务:

docker stack deploy -c myStack.yml myTest

我有两个问题:

  1. 我的第一个问题是我的所有节点都将 运行 排除在 space 之外,因为 Docker 仅使用 ec2 的根卷。我如何指示 Docker 在 EBS 卷中创建服务?
  2. 是否可以仅在工作节点中创建服务而不在管理器中创建任何服务?我可以使用 swarm 管理器来管理节点吗?

提前致谢

让我们从你的第二个问题开始,因为它更容易。

您可以为您的节点添加标签,然后在创建服务时使用约束(堆栈相同)。例如

docker node update --label-add "role=worker" .... # on all your worker nodes
docker service create --constraint "node.labels.role==worker" ...

对于你的第一个问题,你需要数据持久化。有一些解决办法。

Flocker 是一个大的解决方案。它具有更多支持、更多选项和更安全。配置难度也很大

Blocker是我现在用的。它必须安装在每个节点上,我可以确认它正在运行并且运行良好。语法就像,

docker service create --mount type=volume,target=/data,source=vol-08a1211f22864700c,volume-driver=blocker ....

我希望这些信息足以让您开始研究。