docker service create --name myredis --replicas 3 redis
这个命令会跑起来一个redis. 相当于docker run, 这个docker service 只能 在manager 节点 执行
不过,执行docker service ls ,还能看到 这个redis container; docker run 没这个 效果
--replicas 3 这个参数,可以创建多个docker. 相当于几个docker 包了一层,向外提供一个接口。
docker service logs myredis 查看日志
docker service inspect myredis 查看详情
docker rm dockerId,swarm 会新建这个container, 保持数量不变
docker service rm myredis 移除这个service
docker swarm leave 移除这个node 下的所有容器
dokcer images ,镜像还存在
docker scale 扩容
docker info :可以查看Swarm 信息
docker swarm init
docker swarm join-token worker
docker swarm leave --force: 会让这个状态为 Swarm: inactive。 所有swarm 服务停止。
docker node ls: 这个命令,必须是在Swarm的manager 节点上执行。worker 节点执行:
docker stack deploy -c xx.yml 发布多个service。
综上:Service 管理相同的docker 镜像,Stack 管理多个service,这个文件里又多个Service.
只有一个node,也能起好几个实例:
version: '3.8'
services:
mq:
image: rabbitmq:3.9-management
restart: always
ports:
- "5672:5672"
- "15672:15672"
deploy:
mode: replicated
replicas: 3
placement:
constraints:
- "node.labels.scope==middleware"
max_replicas_per_node: 4
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
max_attempts: 3
window: 120
senvironment:
- RABBITMQ_ERLANG_COOKIE="xxl_civic_xxl"
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
这能在浏览器上http://ryrkj.com:15672/ 看到第一个实例的详情,只能看到一个节点。这时还不是集群。
进入其中一个容器:rabbit 的相关命令如下: docker exec -it 1eacefa4fbce /bin/bash
root@1eacefa4fbce:/# ls /usr/local/bin c_rehash ct_run dialyzer docker-entrypoint.sh epmd erl erlc escript openssl rabbitmqadmin run_erl to_erl typer root@1eacefa4fbce:/# ls /opt/rabbitmq/sbin rabbitmq-defaults rabbitmq-diagnostics rabbitmq-env rabbitmq-plugins rabbitmq-queues rabbitmq-server rabbitmq-streams rabbitmq-upgrade rabbitmqctl
> rabbitmqadmin declare exchange name=my-new-exchange type=fanout
如果操作的是一个浏览器上的那个节点,浏览器会发现这Exchange。
进入另一个节点,
执行 rabbitmqctl join_cluster --ram rabbit@c039d5862cc9 加入节点