Docker 是一种流行的容器化技术,可以轻松地将应用程序打包成可移植的容器,以便在不同的环境中运行。Docker Swarm 则是 Docker 的一个集群管理工具,通过它可以轻松地管理多个 Docker 节点,实现高可用、负载均衡等功能。
本文将介绍如何使用 Docker Swarm 搭建一个集群,并展示如何在其中运行一个 Node.js 应用程序。
搭建 Docker Swarm 集群
搭建 Docker Swarm 集群需要准备多个 Docker 节点,这些节点可以位于同一台机器上,也可以分布在不同的机器上。在本文中,我们将在同一台机器上搭建一个包含 3 个节点的集群。
准备工作
在开始之前,需要先安装 Docker。可以参考 官方文档 安装 Docker。
初始化 Swarm
首先,需要在其中一个节点上初始化 Swarm。
docker swarm init
执行命令后,会输出一个类似于下面的信息:
Swarm initialized: current node (abc123) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-xxxxx 192.168.0.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
其中,abc123
是当前节点的 ID,192.168.0.100
是当前节点的 IP 地址。这些信息将在后面的操作中用到。
加入集群
接下来,需要将其他节点加入到集群中。可以在其他节点上执行类似于下面的命令:
docker swarm join --token SWMTKN-1-xxxxx 192.168.0.100:2377
其中,SWMTKN-1-xxxxx
是初始化 Swarm 时生成的 token,192.168.0.100
是 Swarm manager 节点的 IP 地址。
如果一切正常,执行命令后会输出类似于下面的信息:
This node joined a swarm as a worker.
查看节点
可以使用下面的命令查看节点状态:
docker node ls
执行命令后,会输出类似于下面的信息:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION abc123* node1 Ready Active Leader 20.10.5 def456 node2 Ready Active 20.10.5 ghi789 node3 Ready Active 20.10.5
其中,*
表示当前节点为 Swarm manager 节点。
运行 Node.js 应用程序
接下来,将展示如何在 Swarm 集群中运行一个 Node.js 应用程序。
编写 Dockerfile
首先,需要编写一个 Dockerfile 文件,用于构建 Docker 镜像。
-- -------------------- ---- ------- ---- ------- ------- ---- ---- ------------- -- --- --- ------- ---- - - ------ ---- --- - ------ ------- -
上面的 Dockerfile 中,首先指定了 Node.js 的版本。然后,将当前目录下的 package*.json
文件复制到 Docker 容器中,并执行 npm install
安装依赖。接着,将当前目录下的所有文件复制到 Docker 容器中。最后,指定了应用程序的监听端口为 3000,并执行 npm start
启动应用程序。
构建镜像
在完成 Dockerfile 编写之后,可以使用下面的命令构建 Docker 镜像:
docker build -t myapp .
其中,myapp
是镜像的名称,.
表示当前目录。
运行服务
接下来,可以使用下面的命令在 Swarm 集群中运行服务:
docker service create --name myapp --replicas 3 -p 3000:3000 myapp
其中,myapp
是服务的名称,3
表示服务的副本数,3000:3000
表示将容器的 3000 端口映射到主机的 3000 端口,myapp
表示使用上一步构建的镜像。
查看服务
可以使用下面的命令查看服务状态:
docker service ls
执行命令后,会输出类似于下面的信息:
ID NAME MODE REPLICAS IMAGE PORTS abc123456789 myapp replicated 3/3 myapp *:3000->3000/tcp
其中,3/3
表示服务的副本数已经全部启动。
可以使用下面的命令查看服务的详细信息:
docker service ps myapp
执行命令后,会输出类似于下面的信息:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS abc123456789 myapp.1 myapp node1 Running Running 2 minutes ago def456789012 myapp.2 myapp node2 Running Running 2 minutes ago ghi789012345 myapp.3 myapp node3 Running Running 2 minutes ago
其中,DESIRED STATE
和 CURRENT STATE
分别表示服务的期望状态和当前状态。
访问应用程序
最后,可以使用浏览器访问应用程序。如果当前机器的 IP 地址为 192.168.0.100
,则可以访问 http://192.168.0.100:3000
查看应用程序。
总结
本文介绍了如何使用 Docker Swarm 搭建一个集群,并展示了如何在其中运行一个 Node.js 应用程序。通过本文的学习,读者可以了解 Docker Swarm 的基本概念和使用方法,并可以尝试在自己的环境中搭建一个 Swarm 集群。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d5a656add4f0e0ffd53c1a