DockerSwarm介绍及使用入门

韵味老鸟 2024-06-12 17:13:49

Docker Swarm介绍及使用入门

#端口

ports:

- target: 2181 #容器端口

published: 3181 #对外端口

protocol: tcp

mode: host

#查询节点及服务运行信息

docker service ps SVC_NAME

#健康检查

healthcheck: test: [ "CMD", "curl", "http://localhost:50053/actuator/health" ] interval: 30s timeout: 5s retries: 3

#环境变量 https://docs.docker.com/compose/environment-variables/set-environment-variables/

env_file: config.env.sh

The .env file should be placed at the root of the project directory next to your docker-compose.yml file

Relative path MUST be resolved from the Compose file’s parent folder

#资源限制

deploy: mode: replicated replicas: 1 placement: constraints: [node.labels.dolphin-node == dolphin01] resources: limits: cpus: '0.1' memory: 786M reservations: cpus: '0.1' memory: 786M

#

#重启服务

docker service ls

docker service scale elastic_kibana=0

docker service scale elastic_kibana=1

Docker Swarm是管理跨节点容器的编排工具,相较于Docker Compose而言,Compose只能编排单节点上的容器,Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。如果下载的是最新版的Docker,那么Swarm就已经被包含在内了,无需再安装

[root@cm1 data]# docker node ls

Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

[root@cm1 data]# docker swarm init

Swarm initialized: current node (i4gwmy2hmpvc6p73vba2ksycy) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-13uwuhyfdxtzzb1pokkpbr7d0v1tjgda67kqr1ay03k9ij5cdr-ekncp0vk0gqh2abon8int82cu 192.168.10.14:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@cm1 data]# docker swarm join-token manager

To add a manager to this swarm, run the following command:

docker swarm join --token SWMTKN-1-13uwuhyfdxtzzb1pokkpbr7d0v1tjgda67kqr1ay03k9ij5cdr-5nxresh5lwym4bp4zb1lurfkj 192.168.10.14:2377

Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.

manager是我们管理集群的入口,我们的docker命令都是在manager上执行,node节点上是不能执行dockr命令的,这一点要十分牢记

创建一个私有网络,供不同节点上的容器互通使用

使用指定的网络部署一个服务;

docker service create --replicas 1 --network niginx_network --name my_nginx -p 80:80 nginx:latest docker service ls docker service ps my_nginx docker service scale my_nginx=4 #下线一个节点 docker node update --availability drain node2 #上线一个节点 docker node update --availability active node2

值得一提的是,如果某个节点被设置下线,或者因为其它故障宕机了,那么它其上的容器会被转移到其它可运行的节点上,如此来保证始终有指定副本数量的容器在运行

#删除swarm集群;

#当最后一个manager节点离开,则swarm集群自动删除

docker swarm leave

#3个manager节点

#调配manager节点,worker节点

[root@cm2 data]# docker swarm leave

Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. The only way to restore a swarm that has lost consensus is to reinitialize it with --force-new-cluster. Use --force to suppress this message.

#单一manager节点,2个Node节点

#初始化docker swarm 及Node节点接入

#manager节点上执行 docker swarm join-token worker #node节点上执行 docker swarm join --token SWMTKN-1-2mpbmysnqayv1zmb650f67krkriyvme2c0ekzyh50dzwj58fli-67daw7za3336mirourszb8569 192.168.10.14:2377

docker swarm节点添加标签

docker node update --label-add mysql-node=mysql-master <NODE-1> docker node update --label-add mysql-node=mysql-slave <NODE-2>

删除标签

docker node update --label-rm mysql-node nodename1

查看节点标签

将服务发布到指定节点

constraints: # 添加条件约束

- node.labels.group==g1

#删除meta网络

docker network ls

docker network rm meta

#适用于指定范围的桥接网络

#本地范围 docker network create --driver=bridge --scope=local

#swarm范围 docker network create --driver=overlay --scope=swarm

docker network create --driver=overlay --scope=swarm meta

Error response from daemon: Cannot create a multi-host network from a worker node. Please create the network from a manager node.

docker stack deploy命令用于部署新的堆栈或更新现有堆栈。从群集中的compose文件或dab文件创建和更新堆栈,必须以管理员节点为目标运行此命令

#查看日志

docker service logs

docker service logs

1 阅读:16