什么模板
模板?什么鬼,其实非常的简单!
就是在创建service的时候,直接引用变量,获取变量的值,然后将这些值变成具体的参数值。
可以设置的参数
- --hostname
- --mount
- --env
可以使用的变量(占位符),有
变量 |
描述 |
.Service.ID |
Service ID |
.Service.Name |
Service name |
.Service.Labels |
Service labels |
.Node.ID |
Node ID |
.Node.Hostname |
Node hostname |
.Task.Name |
Task name |
.Task.Slot |
Task slot |
示例
来看下面的示例
使用{{占位符}}的方式,来获取对应的变量
docker service create \ --with-registry-auth \ --name=nginx \ --hostname="{{.Node.ID}}-{{.Service.Name}}" \ --env nodename={{.Node.Hostname}} \ 172.20.58.152/middleware/nginx:1.21.4
服务部署的详细过程
[root@nccztsjb-node-01 ~]# docker service create \ > --with-registry-auth \ > --name=nginx \ > --hostname="{{.Node.ID}}-{{.Service.Name}}" \ > --env nodename={{.Node.Hostname}} \ > 172.20.58.152/middleware/nginx:1.21.4 q9jl2qafhr1u6t381zrhqhbgg overall progress: 1 out of 1 tasks 1/1: running [==================================================>] verify: Service converged [root@nccztsjb-node-01 ~]#
查看service的状态,在节点nccztsjb-node-04上运行,NodeID: 7d59usghrgq05k0yh4lbykw5v
# task在nccztsjb-node-04节点运行 [root@nccztsjb-node-01 ~]# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS qtavsnl9567i nginx.1 172.20.58.152/middleware/nginx:1.21.4 nccztsjb-node-04 Running Running 52 seconds ago [root@nccztsjb-node-01 ~]# # 查看nodeId,是:7d59usghrgq05k0yh4lbykw5v [root@nccztsjb-node-01 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION gxfkhuc95br6ltkhorpw1q4tq * nccztsjb-node-01 Ready Active Reachable 20.10.17 8zjicf39fk28jn106symk1g5e nccztsjb-node-02 Ready Active 20.10.17 7d59usghrgq05k0yh4lbykw5v nccztsjb-node-04 Ready Active Reachable 20.10.17 wnd24l698iruhhp1xw0y3iyig nccztsjb-node-05 Ready Active Leader 20.10.17 [root@nccztsjb-node-01 ~]#
看下具体的容器的主机名和变量
环境变量已经成功的获取到主机的名字,nodename=nccztsjb-node-04
[root@nccztsjb-node-04 ~]# docker exec -it e27cfe0a0986 env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=7d59usghrgq05k0yh4lbykw5v-nginx TERM=xterm nodename=nccztsjb-node-04 #环境变量已经成功的获取到主机的名字 NGINX_VERSION=1.21.4 NJS_VERSION=0.7.0 PKG_RELEASE=1~bullseye HOME=/root [root@nccztsjb-node-04 ~]#
查看容器的主机名,确实是NODEID 7d59usghrgq05k0yh4lbykw5v和service的名字nginx的组合
[root@nccztsjb-node-04 ~]# docker exec -it dc410cd29482 hostname 7d59usghrgq05k0yh4lbykw5v-nginx [root@nccztsjb-node-04 ~]#
总结
这个有啥作用,就是在创建service的时候,把一些已经预置的动态的变量值,动态获取的过程,更具有灵活性!