Docker Swarm入门实例详解
什么是Docker Swarm
Docker Swarm是Docker的集群版本,为了扩展Docker引擎而生,可以用于在多个Docker主机之间管理多个容器。Docker Swarm可以让用户以透明的方式启动、停止和管理Docker容器。
Docker Swarm的基本架构
Docker Swarm具有以下几个主要组件:
- Docker Engine:Docker引擎,用于在各个Docker主机上创建、运行、管理容器;
- Swarm Manager:Docker Swarm集群的管理员,用于协调Swarm的集群管理和维护;
- Swarm Worker:Swarm工作者,用于在集群中执行任务;
- Overlay Network:Swarm Overlay网络,用于跨多个Docker主机连接容器。
如何设置Docker Swarm
- 创建Swarm集群。使用
docker swarm init
命令创建Swarm集群:
docker swarm init --advertise-addr 192.168.0.2
其中--advertise-addr
指定管理Swarm集群的主机的IP地址,同时该主机将充当Swarm Manager。在运行此命令后,Swarm Manager就会启动。
- 添加Swarm Worker。
在Swarm集群中添加工作者的方法有两种:一种是用docker swarm join
命令将工作者加入到Swarm集群中,另一个方法是使用Docker Stack deploy命令部署应用并自动加入新节点到Swarm集群中。
docker swarm join --token mytoken 192.168.0.2:2377
在这里,mytoken
是Swarm节点之间的安全令牌,可以使用docker swarm join-token worker
查看。192.168.0.2:2377
是Swarm集群的管理主机地址和端口号。
注意:在执行此命令前,请确保已在Swarm Manager节点上生成令牌。
- 部署应用程序
```
version: '3.1'
services:
app:
image: nginx:latest
deploy:
replicas: 3
resources:
limits:
cpus: '0.4'
memory: 512M
restart_policy:
condition: on-failure
ports:
- "8080:80"
networks:
- webnet
networks:
webnet:
```
在这个例子中,我们定义了一个名为app
的应用程序。我们要部署3个副本,并使用resources
属性定义了CPU和内存的限制,以便它们能够公平地共享资源。我们还定义了Web绑定,并创建了一个名为webnet
的新网络。
要创建并运行此堆栈,请使用以下命令:
docker stack deploy -c docker-compose.yml mystack
在这个例子中,mystack
是我们给这个堆栈起的名字。
- 管理Swarm集群
使用docker node ls
命令可以显示Swarm集群中的节点。
使用docker node rm
命令可以从Swarm集群中删除节点。
使用docker service ls
命令可以查看部署的服务。
使用docker service rm
命令可以删除一个服务。
使用docker service scale
命令可以增加或减少服务的副本数。
示例1:在Docker Swarm上部署Wordpress
这个例子中,我们将在Docker Swarm集群上部署一个基于WordPress的应用程序。
- 创建
docker-compose.yml
文件
version: '3.1'
services:
# WordPress服务
wordpress:
image: wordpress
volumes:
- wordpress:/var/www/html
ports:
- 8000:80
deploy:
replicas: 3
restart_policy:
condition: on-failure
# MySQL服务
db:
image: mysql
volumes:
- db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
deploy:
placement:
constraints: [node.role == manager]
replicas: 1
restart_policy:
condition: on-failure
volumes:
wordpress:
db:
该文件定义了两个服务: wordpress
和 db
。wordpress
是WordPress服务,使用mysql
作为数据库。我们使用docker volume
命令创建了MySQL和WordPress服务所需的卷。
- 部署WordPress服务
docker stack deploy -c docker-compose.yml wordpress
在这个命令中,我们将WordPress堆栈部署到Swarm集群上,并将其命名为 wordpress
。
- 测试WordPress服务
使用浏览器访问 http://<swarm-manager-ip>:8000
,然后按照安装指导完成安装。在安装过程中,需要输入MySQL的用户名和密码。
安装完成后,可以使用 http://<swarm-manager-ip>:8000
访问WordPress站点。
示例2:使用Docker Swarm部署一个Node.js应用
在这个示例中,我们将使用Docker Swarm部署一个简单的Node.js应用程序。此应用程序列举了指定目录中的文件。
- 创建一个Node.js应用程序
```
const http = require('http');
const fs = require('fs');
const path = require('path');
const port = process.env.PORT || 3000;
const dir = process.env.DIR || __dirname;
const server = http.createServer((req, res) => {
const filePath = path.join(dir, req.url === '/' ? '/index.html' : req.url);
fs.readFile(filePath, (err, content) => {
if (err) {
if (err.code === 'ENOENT') {
res.statusCode = 404;
res.end(File ${filePath} not found
);
} else {
res.statusCode = 500;
res.end(Error getting the file: ${err}
);
}
} else {
res.setHeader('Content-Type', 'text/html');
res.end(content);
}
});
});
server.listen(port, () => {
console.log(Server running on port ${port}
);
console.log(Serving files from ${dir}
);
});
```
在这个例子中,我们使用Node.js编写了一个简单的Web服务器,用于查看指定目录中的文件。我们使用了process.env
来传递PORT
和DIR
环境变量。
- 创建Dockerfile文件
FROM node:latest
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
CMD ["npm", "start"]
这个Dockerfile用于构建应用程序的Docker镜像。
- 创建应用程序的Docker镜像
docker build -t my-node-app .
my-node-app
是我们为该镜像指定的名称。
- 创建docker-compose.yml文件
version: '3.1'
services:
nodeapp:
image: my-node-app
deploy:
replicas: 3
resources:
limits:
cpus: '0.4'
memory: 512M
restart_policy:
condition: on-failure
ports:
- "3000:3000"
environment:
PORT: 3000
DIR: /app/public
volumes:
- static:/app/public
volumes:
static:
在这个例子中,我们定义了一个名为nodeapp
的服务。我们要部署3个副本,并使用resources
属性定义了CPU和内存的限制,以便它们能够公平地共享资源。我们还定义了Web绑定,并将PORT
和DIR
环境变量传递给容器。
- 部署应用程序
docker stack deploy -c docker-compose.yml my-node-app
我们在这个命令中将我们的node.js堆栈部署到Swarm集群上,并将其命名为 my-node-app
。
- 测试Node.js服务
在浏览器中访问 http://<swarm-manager-ip>:3000
可以看到我们列出的文件。
以上就是Docker Swarm入门实例详解之两个示例的详细攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker Swarm入门实例详解 - Python技术站