部署多个示例堆栈
在这一步中,你将学习如何在 Docker Swarm 上部署多个堆栈。这展示了你如何在同一个 Swarm 中独立管理不同的应用程序或服务。
我们将部署两个简单的堆栈:一个使用 Nginx,另一个使用 Apache HTTP Server。
首先,让我们为 Apache 堆栈定义创建一个目录。回到 ~/project
目录,并创建一个名为 my-apache-stack
的新目录。
cd ~/project
mkdir my-apache-stack
cd my-apache-stack
现在,使用 nano
编辑器在 my-apache-stack
目录中创建一个名为 docker-compose.yml
的文件。
nano docker-compose.yml
将以下内容粘贴到 docker-compose.yml
文件中:
version: "3.8"
services:
web:
image: httpd:latest
ports:
- "81:80"
deploy:
replicas: 1
restart_policy:
condition: on-failure
这个 docker-compose.yml
文件定义了一个名为 web
的服务,它使用 httpd:latest
镜像。它将主机上的 81 端口映射到容器内的 80 端口,以避免与我们稍后将部署的 Nginx 堆栈发生端口冲突。它还指定了一个副本和一个重启策略。
按 Ctrl + X
,然后按 Y
,再按 Enter
保存文件。
在部署之前,让我们拉取 httpd:latest
镜像。
docker pull httpd:latest
现在,使用 docker stack deploy
命令部署 Apache 堆栈。我们将这个堆栈命名为 apache_stack
。
docker stack deploy -c docker-compose.yml apache_stack
这个命令将部署 Apache 堆栈。
接下来,让我们回到 my-nginx-stack
目录,再次部署 Nginx 堆栈。
cd ~/project/my-nginx-stack
使用 docker stack deploy
命令部署 Nginx 堆栈。我们将这个堆栈命名为 nginx_stack
。
docker stack deploy -c docker-compose.yml nginx_stack
现在,让我们验证两个堆栈是否都已部署。列出已部署的堆栈。
docker stack ls
你应该会看到 apache_stack
和 nginx_stack
都被列出。
你还可以分别检查每个堆栈的服务。
docker stack services apache_stack
docker stack services nginx_stack
你应该会看到 apache_stack_web
服务和 nginx_stack_web
服务,两者都以 1/1 个副本运行。
你可以通过打开 Web 浏览器并访问你的 LabEx 虚拟机 IP 地址的 81 端口来访问 Apache Web 服务器。你应该会看到默认的 Apache 欢迎页面。Nginx Web 服务器仍然可以通过 80 端口访问。