docker stack命令 | docker堆栈 23

作者 : 慕源网 本文共3074个字,预计阅读时间需要8分钟 发布时间: 2021-12-14 共422人阅读

docker stack命令

“docker stack”是用于管理 Docker 堆栈的 Docker 命令。我们可以使用此命令部署新堆栈或更新现有堆栈、列出堆栈、列出堆栈中的任务、删除一个或多个堆栈以及列出堆栈中的服务。我们必须启用 swarm 模式才能运行此命令,因为我们只能在 Docker swarm 模式下部署堆栈,并且它包含在 Docker 引擎中默认禁用,因此我们不必安装任何其他软件包,只需要启用它。它仅在 Docker CLI 或 daemon API 版本 1.25 或更高版本上受支持。

docker stack命令 | docker堆栈 23

语法:

docker stack [OPTIONS] COMMAND

OPTIONS:

–orchestrator:指定使用哪个编排器(swarm|kubernetes|all)

命令:

  • deploy:用于部署新堆栈或更新现有堆栈
  • ls:用于列出堆栈
  • ps:用于列出栈中的任务
  • rm:用于同时移除一个或多个堆栈
  • services:用于列出堆栈中的服务

我们可以使用“–help”选项来了解有关此命令的更多信息,如下所示:

docker stack --help

docker stack命令 | docker堆栈 23

我们可以使用“–help”命令获取有关上述任何命令的更多信息,如下所示:

docker stack deploy --help

docker stack命令 | docker堆栈 23

Stack 如何在 Docker 中工作?

我们必须使用“–compose-file”或“-c”选项将“docker-compose.yaml”文件作为参数传递给“docker stack deploy”命令。“docker-compose.yaml”文件包含启动完整应用程序所需的服务、卷、网络等。deploy 命令支持 3.0 及以上版本的撰写文件。一旦我们部署了堆栈,撰写文件中提到的服务就会被创建,并且副本被分发到不同的工作节点。Docker 守护进程在服务或卷或网络名称之前添加堆栈名称。

撰写文件中提到的 Docker 镜像可以在任何 Docker 仓库上使用,它可能是私有或公共仓库,或者在该群中的所有节点上可用,否则容器创建将失败。

例子

让我们创建一个简单的 Python 应用程序并将其部署在 Docker Swarm 中。

1、首先,使用以下命令创建作为服务运行的本地 Docker 仓库:

docker service create --name my-registry -p 5000:5000  registry:2

docker stack命令 | docker堆栈 23

注意:在运行上述命令之前,我们需要使用 ‘docker swarm init’ 命令初始化 Docker swarm(如果尚未初始化)。

2. 现在,让我们验证服务是否正常运行并且可以访问仓库,如下所示:

docker service ls

curl http://localhost:5000/v2/

docker stack命令 | docker堆栈 23

说明:  我们可以看到服务被replicated 并且能够成功访问本地主机。

3. 现在让我们处理应用程序,我们将使用下面提到的代码创建一个 python 应用程序

test-app.py

代码:

from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hi, You have visited {} times\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)

4、我们在 python 应用程序中使用了 Flask 和 Redis,所以我们需要这些包来运行应用程序,这里是我们将在构建 Docker 镜像时使用的 required.txt 文件。

requirements.txt

docker stack命令 | docker堆栈 23

5、以下是用于构建 Docker 映像的 Dockerfile 片段: –

Dockerfile

FROM python:3.10.0a1-alpine
ADD . /test-app
WORKDIR /test-app
RUN pip install -r requirements.txt
CMD ["python", "test-app.py"]

6、现在让我们构建 Docker 镜像并将其推送到本地仓库,如下所示:

docker build –t localhost:5000/test-app.
docker push localhost:5000/test-app

docker stack命令 | docker堆栈 23

docker stack命令 | docker堆栈 23

docker stack命令 | docker堆栈 23

7、让我们创建具有两个服务的“docker-compose.yml”文件,第一个是“web”,第二个是“redis”。第一个服务已经对外暴露了8000端口。

docker-compose.yml
version: '3'
services:
web:
image: localhost:5000/test-app
ports:
- "8000:8000"
redis:
image: redis:alpine

8、最后,使用上面的“docker-compose.yml”文件部署我们的第一个 Docker 堆栈并将其命名为“my-first-stack”,如下所示:

docker stack deploy --compose-file docker-compose.yml my-first-stack

docker stack命令 | docker堆栈 23

在上面的例子中,我们可以看到堆栈名称已添加到服务和网络中。

9、让我们使用“docker stack ls”命令检查它是否部署成功,如下所示:

docker stack ls

docker stack命令 | docker堆栈 23

在上面的例子中,我们可以看到“my-first-stack”有 2 个服务,编排器是 Swarm,因为我们在部署堆栈时没有指定任何其他编排器。

10、我们可以使用以下命令来了解有关在此堆栈下运行的服务的更多信息:

docker stack services <stack_name>
docker stack services my-first-stack

docker stack命令 | docker堆栈 23

在上面的快照中,我们可以看到两个服务的 1 个副本都用完了。如果显示 0 个副本,则表示该服务未成功部署。检查容器及其日志以进行故障排除。

11、为了检查容器的状态,我们必须使用“docker stack ps <stack_name>”,如下所示: –

docker stack ps my-first-stack

docker stack命令 | docker堆栈 23

在上面的例子中,我们可以看到两个容器都在运行,如果有任何发生,我们可以在错误列中看到错误,或者使用 ‘docker logs <container_ID>’ 了解更多关于错误的信息。

12、让我们通过连接到它来测试应用程序,如下所示:

curl http://localhost:8000

docker stack命令 | docker堆栈 23

我们可以访问我们的应用程序。让我们看看其他“docker stack”命令。

13、如果需要销毁堆栈,我们可以通过运行 ‘docker stack rm <stack_name>’ 来完成,如下所示:

docker stack rm my-first-stack

docker stack命令 | docker堆栈 23

在上面的快照中,我们可以看到它删除了在部署堆栈时创建的所有服务和网络。

好处

  1. 它可以更轻松地管理应用程序的所有组件。
  2. 我们可以使用 Docker 堆栈部署高可用性应用程序,因为它在 Swarm 模式下工作。
  3. 我们也可以使用不同的编排器,如 Kubernetes。

结论

我们大部分时间都在使用“docker stack”,同时在生产中部署应用程序以使其高度可用。它仅适用于 Swarm 模式,因此我们必须激活或初始化 Swarm 模式。

推荐文章

这是 Docker Stack 的指南。在这里,我们将讨论 Docker Stack 的介绍以及 Stack 如何在 Docker 中工作?。

本文是docker快速入门教程系列的一部分您也可以查看以了解更多信息 –

 


慕源网 » docker stack命令 | docker堆栈 23

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录