如何創建service的時候使用template模板?

什麼模板

 

模板?什麼鬼,其實非常的簡單!

 

就是在創建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的時候,把一些已經預置的動態的變量值,動態獲取的過程,更具有靈活性!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章