Docker Swarm 是一个 Docker 官方的容器编排和调度工具,它可以通过调度和管理容器的方式让应用程序跨多个主机进行部署,从而实现了容器的高可用、负载均衡和故障转移等功能。本文将介绍如何使用 Docker Swarm 实现跨主机部署,并提供一些实用的示例代码和指导意义。
配置 Swarm 群集
在使用 Docker Swarm 之前,我们需要先创建一个 Swarm 群集。可以通过以下命令在当前主机上初始化一个 Swarm:
docker swarm init
执行上述命令后,当前主机就成为了 Swarm 群集的管理节点,同时也会自动生成一个加入 Swarm 群集的指令。将这个指令记录下来,以便后面加入更多的节点到 Swarm 群集中。
要查看完整的 Swarm 群集信息,可以运行以下命令:
docker info
加入节点到 Swarm 群集
在使用 Docker Swarm 时,可以将多个主机作为 Swarm 群集的工作节点加入到群集中。这可以通过运行以下命令将其他主机加入 Swarm 群集来实现:
docker swarm join --token [TOKEN] [IP-ADDRESS]:[PORT]
这里的 [TOKEN] 是在初始化 Swarm 群集时生成的,而 [IP-ADDRESS]:[PORT] 是 Swarm 群集管理节点的 IP 地址和端口。
如果你希望加入的节点在另一台机器上,需要先在该机器上安装 Docker,然后再运行上述命令即可。
创建服务并部署到 Swarm 群集
下面我们将创建一个简单的 Node.js 应用程序,并通过 Docker Swarm 将其部署到多个主机上。首先,我们需要创建一个 Dockerfile,用于构建 Docker 镜像。在项目根目录下,创建名为 Dockerfile 的文件,并输入以下内容:
FROM node:12 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD [ "node", "index.js" ]
这个 Dockerfile 使用 Node.js 12 作为基础镜像,然后安装应用程序所需的依赖包。最后,它将宿主机上的应用程序文件拷贝到镜像中,并将容器的 3000 端口暴露出来,以便连接到该应用程序。
接下来,我们需要用 Docker 命名来构建这个应用程序的镜像。在项目根目录下,运行以下命令:
docker build -t my-node-app .
这条命令将会构建名为 my-node-app 的 Docker 镜像,其中 . 表示 Dockerfile 的位置。
接下来,我们需要创建一个 Docker Compose 文件,用于定义 Docker 服务和容器部署的方式。在项目根目录下,创建名为 docker-compose.yml 的文件,并输入以下内容:
version: "3"
services:
app:
image: my-node-app
ports:
- "3000:3000"
deploy:
replicas: 2这个 Docker Compose 文件定义了一个名为 app 的服务,该服务将使用之前构建的 Docker 镜像 my-node-app,并将容器的 3000 端口映射到主机的 3000 端口,以便外部可以访问应用程序。最后,定义了该服务的部署方式,将其复制到 2 个副本中,分别分布于多个主机上。
接下来,我们可以使用以下命令通过 Docker Swarm 部署该应用程序:
docker stack deploy -c docker-compose.yml my-node-app
这条命令将会创建一个名为my-node-app 的 Docker stack,并将上面定义的服务部署到 Swarm 群集中。现在,在 Swarm 群集上运行的应用程序已经可以从多个主机上访问了。
小结
本文介绍了如何使用 Docker Swarm 实现跨主机部署。首先我们初始化了一个 Swarm 群集,然后加入了其他节点,并创建了一个简单的 Node.js 应用程序。最后使用 Docker Compose 部署该应用程序到 Swarm 群集中。
使用 Docker Swarm 部署应用程序,可以提高容器的可用性和扩展性,而且相比于传统的虚拟机部署方式更加灵活和高效。希望这篇文章对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d785bda941bf7134d7b313