Docker Swarm 参考:https://mp.weixin.qq.com/s/7o8QxGydMTUe4Q7Tz46Diw

讲swarm命令的:https://www.cnblogs.com/kevingrace/p/9947909.html

docker node ls

docker service create --name web_server --replicas=2 httpd

docker service ls

docker service ps web_server

docker service scale web_server=5  # 扩容
docker service scale web_server=3  # 缩容

docker service rm web_server

要将 service 暴露到外部: docker service update --publish-add 8080:80 web_server
如果是新建 service,可以直接用使用 --publish 参数: docker service create --name web_server --publish 8080:80 --replicas=2 httpd

为什么 curl 集群中任何一个节点的 8080 端口,都能够访问到 web_server?
无论访问哪个节点,即使该节点上没有运行 service 的副本,最终都能访问到 service


要使用服务发现,需要相互通信的 service 必须属于同一个 overlay 网络,所以我们先得创建一个新的 overlay 网络。
docker network create --driver overlay myapp_net

部署 service 到 overlay:
docker service create --name my_web --replicas=3 --network myapp_net httpd

查看每个副本的 IP:
docker exec util.1.bpon0vvbgve6lz3fp08sgana6 nslookup tasks.my_web

将 service 更新到 httpd:2.2.32:docker service update --image httpd:2.2.32 my_web

查看 service 的当前配置:docker service inspect --pretty my_web

回滚:docker service update --rollback my_web
请注意:--rollback 只能回滚到上一次执行 docker service update 之前的状态,并不能无限制地回滚

ex-Ray 是开源的容器存储管理解决方案

globalmode:其作用是强制在每个 node 上都运行一个且最多一个副本。即使之后有新的 node 加入,swarm 也会自动在新 node 上启动一个 gliderlabs/logspout 副本
docker service create \
--mode global \
--name logspout \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
gliderlabs/logspout

给节点打标签:docker node update --label-add env=test swarm-worker1
通过标签部署服务:docker service create \
--constraint node.labels.env==test \
--replicas 3 \
--name my_web \
--publish 8080:80 \
httpd
通过标签迁移服务
docker service update --constraint-rm node.labels.env==test my_web
docker service update --constraint-add node.labels.env==prod my_web

label 还可以跟 global 模式配合起来使用
docker service create \
--mode global \
--constraint node.labels.env==prod \
--name logspout \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
gliderlabs/logspout

Health Check 可以是任何一个单独的命令
docker service create --name my_db \
--health-cmd "curl --fail http://localhost:8091/pools || exit 1" \
couchbase

--health-cmd Health Check 的命令,还有几个相关的参数:
--timeout 命令超时的时间,默认 30s。
--interval 命令执行的间隔时间,默认 30s。
--retries 命令失败重试的次数,默认为 3,如果 3 次都失败了则会将容器标记为 unhealthy。swarm 会销毁并重建 unhealthy 的副本。

使用 secret 启动 MySQL 容器:
1)在 swarm manager 中创建 secret my_secret_data,将密码保存其中。
echo "my-secret-pw" | docker secret create my_secret_data -
2)启动 MySQL service,并指定使用 secret my_secret_data。
docker service create \
--name mysql \
--secret source=my_secret_data,target=mysql_root_password \
-e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \
mysql:latest
注意:解密后的内容保存到容器 /run/secrets/mysql_root_password 文件中,文件名称 mysql_root_password 由 target 指定
secret 只能在 swarm service 中使用。普通容器想使用 secret,可以将其包装成副本数为 1 的 service。
Docker 提供了 config 子命令来管理不需要加密的数据。config 与 secret 命令的使用方法完全一致。
secret 创建后,即使是 swarm manager 也无法查看 secret 的明文数据,只能通过 docker secret inspect 查看 secret 的一般信息。

stack 将应用所包含的 service,依赖的 secret、voluem 等资源,以及它们之间的关系定义在一个 YAML 文件中

通过stack(yaml)定义服务之间的依赖关系: https://docs.docker.com/compose/compose-file/
部署stack:docker stack deploy -c wordpress.yml wpstack
注意:为了不重名,所有资源都会加上 stack 名称作为前缀,我们这里是 wpstack_*。
如果想更新 stack 的某些属性,直接修改 YAML 文件,然后重新部署:docker stack deploy -c wordpress.yml wpstack

查看应用中的服务:docker stack service wpstack
docker stack ps wpstack
删除应用:docker stack rm wpstack

 


posted on 2020-11-15 22:38  我和你并没有不同  阅读(312)  评论(0编辑  收藏  举报