From 1c8add2d1d207e09637fe39d15a08b6f4f9f7dea Mon Sep 17 00:00:00 2001 From: huty Date: Tue, 13 May 2025 14:23:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20docker-tools=20=E8=87=B3?= =?UTF-8?q?=201.2.0=20=E7=89=88=E6=9C=AC=EF=BC=88=E6=96=B0=E5=A2=9E=20Dock?= =?UTF-8?q?er=20Swarm=20=E6=94=AF=E6=8C=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-tools/daemon.json | 2 +- docker-tools/docker-tools | 81 +++++++++++++++++++++++++++++-- releases/docker-tools_v1.2.0.zip | Bin 0 -> 6286 bytes 3 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 releases/docker-tools_v1.2.0.zip diff --git a/docker-tools/daemon.json b/docker-tools/daemon.json index a2bd9bf..91640c2 100644 --- a/docker-tools/daemon.json +++ b/docker-tools/daemon.json @@ -13,5 +13,5 @@ ], "bip": "10.21.21.1/24", "data-root": "{{DOCKER_DATA_DIR}}", - "live-restore": true + "live-restore": {{DOCKER_LIVE_RESTORE}} } diff --git a/docker-tools/docker-tools b/docker-tools/docker-tools index 453a163..5c605b3 100755 --- a/docker-tools/docker-tools +++ b/docker-tools/docker-tools @@ -4,7 +4,7 @@ # 参数配置 ## 版本号 -VERSION=1.1.1 +VERSION=1.2.0 ## 当前的日期、日期时间 DATE=`date +%Y%m%d` DATETIME=`date +%Y%m%d`_`date +%H%M%S` @@ -34,6 +34,14 @@ DOCKER_COMPOSE_PACKAGE_URL=https://github.com/docker/compose/releases/download DOCKER_COMPOSE_PACKAGE_NAME=docker-compose-linux-x86_64 ## 是否需要设置 Docker 开机自启动 NEED_ENABLE_DOCKER=true +## 是否启用 Swarm 模式 +NEED_ENABLE_DOCKER_SWARM=false +## Docker Swarm 角色 +DOCKER_SWARM_ROLE=manager +## Docker Swarm Manager IP +DOCKER_SWARM_MANAGER_IP=127.0.0.1 +## Docker Swarm Token +DOCKER_SWARM_TOKEN=123456 # 相关方法 ## 帮助信息 @@ -50,6 +58,10 @@ help () { echo ' -n: Docker Compose 安装包名称(可选,仅离线安装时使用,默认为在线安装)' echo ' -a: 仅安装 Docker Engine(可选,默认安装 Docker Engine 和 Docker Compose )' echo ' -b: 仅安装 Docker Compose(可选,默认安装 Docker Engine 和 Docker Compose )' + echo ' -s: 启用 Docker Swarm(可选,默认不启用 )' + echo ' -r: Docker Swarm 角色(可选,默认 manager,可选 manager、worker )' + echo ' -m: Docker Swarm Manager IP(可选,默认 127.0.0.1 )' + echo ' -t: Docker Swarm Token(当角色为 worker 时必选 )' echo '选项说明:' echo ' version: 查看工具版本' echo ' install: 安装 Docker' @@ -60,10 +72,13 @@ help () { echo ' enable: 设置 Docker 开机自启动' echo ' disable: 取消 Docker 开机自启动' echo ' update: 更新 Docker 版本' + echo ' swarm: 设置 Docker Swarm' echo ' info: 查看 Docker 信息' echo '示例:' echo ' 安装 Docker (使用默认配置) : docker-tools install' echo ' 安装 Docker (使用自定义配置) : docker-tools -v 28.1.1 -i /data/docker/bin -d /data/docker/data -p docker-28.1.1.tgz -c v2.36.0 -n docker-compose-linux-x86_64 install' + echo ' 安装 Docker (同时作为 manager 节点启用 Swarm) : docker-tools -s install' + echo ' 安装 Docker (同时作为 worker 节点启用 Swarm) : docker-tools -s -r worker -m 192.168.0.100 -t 123456 install' echo ' 安装 Docker (仅安装 Docker Engine) : docker-tools -oe install' echo ' 安装 Docker (仅安装 Docker Compose) : docker-tools -oc install' echo ' 卸载 Docker (使用默认配置) : docker-tools uninstall' @@ -71,6 +86,8 @@ help () { echo ' 重启 Docker : docker-tools restart' echo ' 设置 Docker 开机自启动 : docker-tools enable' echo ' 取消 Docker 开机自启动 : docker-tools disable' + echo ' 设置 Docker Swarm(manager) : docker-tools swarm' + echo ' 设置 Docker Swarm(worker) : docker-tools -r worker -m 192.168.0.100 -t 123456 swarm' echo ' 查看 Docker 信息 : docker-tools info' } @@ -303,6 +320,13 @@ configDockerEngine () { cp -rpf daemon.json /etc/docker/daemon.json sed -i 's#{{DOCKER_DATA_DIR}}#'$DOCKER_DATA_DIR'#g' /etc/docker/daemon.json + if [ $NEED_ENABLE_DOCKER_SWARM == "false" ]; then + sed -i 's#{{DOCKER_LIVE_RESTORE}}#true#g' /etc/docker/daemon.json + fi + if [ $NEED_ENABLE_DOCKER_SWARM == "true" ]; then + sed -i 's#{{DOCKER_LIVE_RESTORE}}#false#g' /etc/docker/daemon.json + fi + chown -R docker.docker $DOCKER_INSTALL_DIR chmod -R 755 $DOCKER_INSTALL_DIR chown -R docker.docker $DOCKER_DATA_DIR @@ -436,6 +460,20 @@ onlyUpdateDockerCompose () { echo '------------------------------ Docker Conpose 更新完成! ------------------------------' } +## 启用 Docker Swarm +onlyEnableDockerSwarm () { + echo '------------------------------ 开始启用 Docker Swarm... ------------------------------' + + if [ $DOCKER_SWARM_ROLE == "manager" ]; then + docker swarm init --advertise-addr $DOCKER_SWARM_MANAGER_IP + fi + if [ $DOCKER_SWARM_ROLE == "worker" ]; then + docker swarm join --token $DOCKER_SWARM_TOKEN $DOCKER_SWARM_MANAGER_IP:2377 + fi + + echo '------------------------------ Docker Swarm 启用完成! ------------------------------' +} + ## 安装 Docker install () { echo '====================================================================================================' @@ -456,6 +494,7 @@ install () { echo 'Docker Compose 安装包下载地址(在线安装时使用) : '$DOCKER_COMPOSE_PACKAGE_URL echo 'Docker Compose 安装包名称(离线安装时使用) : '$DOCKER_COMPOSE_PACKAGE_NAME echo '是否开机自动启动: '$NEED_ENABLE_DOCKER + echo '是否启用 Docker Swarm: '$NEED_ENABLE_DOCKER_SWARM echo '请确认安装参数是否正确,并根据提示进入安装(Y:安装,N:不安装,E:退出):' read NEED_DELETE case $NEED_DELETE in @@ -463,10 +502,12 @@ install () { if [ $NEED_INSTALL_ENGINE == "true" ]; then onlyInstallDockerEngine fi - if [ $NEED_INSTALL_COMPOSE == "true" ]; then onlyInstallDockerCompose fi + if [ $NEED_ENABLE_DOCKER_SWARM == "true" ]; then + onlyEnableDockerSwarm + fi ;; N) echo '取消安装。' @@ -545,6 +586,7 @@ update () { echo 'Docker Compose 安装包下载地址(在线安装时使用) : '$DOCKER_COMPOSE_PACKAGE_URL echo 'Docker Compose 安装包名称(离线安装时使用) : '$DOCKER_COMPOSE_PACKAGE_NAME echo '是否开机自动启动: '$NEED_ENABLE_DOCKER + echo '是否启用 Docker Swarm: '$NEED_ENABLE_DOCKER_SWARM echo '此操作将会更新当前 Docker 版本,存在一定风险,请确认是否更新(Y:更新,N:不更新,E:退出):' read NEED_UPDATE case $NEED_UPDATE in @@ -555,6 +597,9 @@ update () { if [ $NEED_INSTALL_COMPOSE == 'true' ]; then onlyUpdateDockerCompose fi + if [ $NEED_ENABLE_DOCKER_SWARM == "true" ]; then + onlyEnableDockerSwarm + fi ;; N) echo '取消更新。' @@ -577,7 +622,7 @@ update () { # 初始化选项 echo $@ -while getopts "v:i:d:p:c:n:ab" opt; do +while getopts "v:i:d:p:c:n:r:m:t:abs" opt; do case $opt in v) ## 设置 Docker Engine 版本 @@ -623,6 +668,33 @@ while getopts "v:i:d:p:c:n:ab" opt; do NEED_INSTALL_COMPOSE=true echo '用户自定义: 仅安装 Docker Compose' ;; + s) + ## 设置启用 Docker Swarm + NEED_ENABLE_DOCKER_SWARM=true + echo '用户自定义: 启用 Docker Swarm' + ;; + r) + ## 设置 Docker Swarm 角色 + if [ $OPTARG != "manager" && $OPTARG != "worker" ]; then + echo '角色错误,可选择:manager、worker' + exit 1 + fi + NEED_ENABLE_DOCKER_SWARM=true + DOCKER_SWARM_ROLE="$OPTARG" + echo '用户自定义: Docker Swarm 角色('$OPTARG')' + ;; + m) + ## 设置 Docker Swarm Manager IP + NEED_ENABLE_DOCKER_SWARM=true + DOCKER_SWARM_MANAGER_IP="$OPTARG" + echo '用户自定义: Docker Swarm Manager IP('$OPTARG')' + ;; + t) + ## 设置 Docker Swarm Token + NEED_ENABLE_DOCKER_SWARM=true + DOCKER_SWARM_TOKEN="$OPTARG" + echo '用户自定义: Docker Swarm Token('$OPTARG')' + ;; esac done @@ -664,6 +736,9 @@ case $@ in disable) disableDocker ;; + swarm) + onlyEnableDockerSwarm + ;; *) help ;; diff --git a/releases/docker-tools_v1.2.0.zip b/releases/docker-tools_v1.2.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a388ee5a198ce48e7aa128b0549a078e58fcb80 GIT binary patch literal 6286 zcmai&1yEeuvW5o>gS)%C1qcubF2S830fG#!gM0Act_c?0WgtM1K(L^LGe80ve1a1o z!5=y2zIV?#sr&BQwbtINYS-VZdv|y3`m|J0P%#0&#ss+5_>YHwEjR#bfVHcYBM8jn z>FVm_!Kbf>0YG8iWVHJ=y?n6%NT|PF{bSL(mm$9200CIqwZ_1a0K9T!06+i@0HFG( z%%7UP9w4x{y%p#W(acIlJHx8qL~HfbHP`v^ySAUj_dB;Z<8!%7k0348Rs3Y(S47`dFU}wq zKxK05)QT!5f~?sNiWMp1vi4X1z{%V6vuD8>MWs_QvE9y4dPaWgI$w)EZx@Bz<;HcY z#S!f)y9<80^GL<=oISq$5CRdq#lSAK9MU+3L-r8eC{ng@?|MHP)>l1xot*%l??)l^ z*^V1sy9tt@GF9K=Bb!;yI`+IhcF#lyx4+Zbd6PMEx{6nCPB&d}kP*_vbW{&yF<`XA zi+za|-ii+lH9j%S(lSB^Z#vllGuaic=Zl2uB9x-ErIAlm9Buk*88zwE{0ftM#k#{? zike|0MUz7F7yYx1a*-d=ha!#i7Z7?6&8t2fQiWnY$V_4XCbIap)7Jh*WMsos1tVM) zsOa2YPXz}LZa+DO+)2BmW?2@G#q!xa2$?c!GiW)H0;U?H;ymtF;E9*Fdt>TQgE8__ z+kv4JXHco_OJRTl0bi|}PLwM7temgBK}6ms4fb|10l!tkGWPu}>G0W0+FgFt==Qvu zd^1f<5a&Sn^g)=<_r;w8nBAkpQkvdy#5aFKpz%xsEUc=qrI%)Dbf`?!v?HI8UCMf6 z%&qT-7#mypFrnpe>z-G^lh$xSYjb$@t?Zm#xF*hfB_nD<*VCciKxfZ<5F;F~1($VQ zrmuSd=+xq&0oCagdfXH?oE8y$?#Z=&OFw=04 zFgrPk0D6aGnyzyp`mn}$y+MPh&}4-OL#LsLvq%UXQX=CprQo&^XWsQ`_9$!#X!?eh zh%c?uqIn)_Ph#OWMJfz!rEH-15=<0?{P)~vt+A#_yRU?S`$_qqa{pIZdH!GOzxX}% zg~xj_!};-1C$EAPx_f+2GUej5A~G=TC9=1>o%B~;Xlf@cQ`DGq?Q|U zAyr!0nC(i@Kf}^SX-p-n(lwH{H#!JM_#~rl%y|JPshcCKvBJ6u6~!sKjOROjZ?;W( z7+hzIl_A^-T`OhSM9O<)WuQcnv9tj;yL+~Cd zKsmYJ+>LE`)==%1sAsT4g+G1}EUDfyWX;Zt4s))QgMt$zA*GHuM~IEad3KqQAy`|_ zb(VwBSHB%@Ts1ySo)bv?qOPWz>$x{N3@C0Q zh>}|Zj%3X*B=2OV{E*DYN;&=o!yxqp>*=+XwKtsYE^_x^VP@vZ3`ATo&U^w>xxM3N zvumN?$7R>;%BhY`v*Aem)>w@ETMVz=3#Q!Ay^e+bG#}-#F5kD{+w=Kh$lTecye?7I z1XMrs){$>Ty|aLZ`WxbK*G|2))F*{I;6^pz*6HlTHlx1&S!Q>DPylteUUxU-?94Uh zU;^$m1ecwdo^<4iHZC*9jJ98LgCe{W#n&`m40Ixwo33!J-rN z>mxcI^>6L6l#~S%ySh2UmiCv1gUw(A0ZmCoHenK;f!aLXL3uFxmztQA z8Se(AFlFmh3pjVn(BIeHqM+Q!N$wdMNk!F241vpdZZ2sX95m3ljh>+cx_!# z?%~F-MY>^c?pPQysVVjj$Gz1yRodOhkMux9UFe`6gH$H>qvx0s;JmHH3UW2f{;APJ0e?>+q6I^hfL7~^4;XwVTV4wpT}nF z$N-d1s%_7PK0UV=qX|lH@V+g~ULv@mp~c(X4d0N5+b9AS(U zFzxXZ==Wndh3a80nsfW2or5X#!4{>hNeRj@emq8RoeZ=*&}OF)Hd4q`!B2boEloG% z4N(kVHxE4#AQIm(2c7%E4|a05`gJDj3!t`?yj@KQ26CFl$NnAz3n>X@=JcJHLt6g8 ztr%d|h|fZ`s_lzObXG1>?o2ngf;S~SamGZWYFYg{wukV^3ie1 zt{6Cw7*;%^t>4^8lM%hcU z$&BRO<|}Pd=HbQ;gBYxpjBh1PfDd3dqxKu(=WDnaJ~h!nygo&hscH3;xe=+WlC9Et zTZ9O{8kFMk8MZ36gE%V!uegsg%#ANhA4){0!)KM%i{_rK_wH~7{7kL%=m379jF`9!vwMs;(|VxvD@MN4)IOIo({X#?!5}$ofdvzh6KG` z4@Zw+438el;jrQch-sDqs77PLbJ&?*(TsjQ`s{bWE7%rZM!LH8Q#4Tr8-+^t=bgJ; z0q-^@+FG;DI`FE(V9U*IONjK-c(`?XZj=u5f!dC)@u0E@fqA+DL2tUXYY#G#dP5J) zj!arqAF(D<@CV_;FCl=>ukOQGzY)HNUQ>qfm99d6Msxn-WduFRX8)}@k!#AlqjyK*Z zoWpDVGu6eOn^+*mz|eBwWX$Cn`YGGxtD7lMpDI=0A#3F0PC0@?w1#4@&~FLCmTZMi za<8Xtg|xiM^aBH3sZBTEngoTh54d+U01iw-R7F+il97m#L!aLQX;}xQd0(nN{h65P zNSb8uaXO%Ek%CHqUw8b(1@nu$bj9FAM3t<3{l*v7SMc(iqwp>lyq`!CYYEKq_*P7F zZAF))&!0RPJ!u`a4BA^Wth4;izCLc{y#s?tP;71;EP4J^r*8$z*P`v`2*214-j6w7 zX*l@CA7}fMvxF+@;k>j_%jQ@nn|w3@x+oeV+0IA|CCJlBai3kQN>!MIVQS)GET~~N z)u2gjmXbu*b_R()A!?&Vm&$S1?Q5@GqNPYIkK6mt>}Bc7+-l!JPNASpZjFrlK08iB zq5MdENMMZ-qoN-&%;aYwX#P-T=$xuWMUjm$!oHw9V^24yA@K{Pg$_NMDra>C}CM$zBEynn5~zwQ%L!I*5siMH(wNx4F*o z3YOx?S~Yl@h8^As5rvd-Cda}2Zc~)g6tI~NgZt=|rWt?IYo_h0+DtA}p0j!Sf2uwX zTWV}_F`Qtx36Y|0Vb*u4GuRBBfZx!JZ>*l%glYkll$)I@zjE1pn^80)N<~H88N-1t z9b22G1%##JE0ec+xI#)ne1=72xM!2bvriV!^i(J)pG;6VH{u>S^{~Xo z+F-qIB-v-9a90=P_GTFMPfd6&BzDfm4xLYR@V%FV8}nQ|m+A(;q>fawlH_RT%sOR-lR4HqlX6=nzAE zaB3T=W5i%A97d#~-L9Lm+q6y8J^SKDjILk<{xM+Hm#N{Yy8lPXnpje3q9{?!x?M?H z5QcwZq;{MD8nJz3vw!Ok-4%f!SfL*MnQ=;_L>u&0*HLjLmO{_@hMYw})KjZ5(K&>B zd#Rs28MVV`?yOrjilq(EvM(YSX*aP zC&;3#$%jYf)mS=4?t#(721%%hHMB)JNDq3@zxPB0$OB(uxvfN<1#}5rSU@3WeOVf9 zDZZQ3S8J=o6oe;oqK_Gd?4e#_ey@70JZr~6wAVLwZWF$=TPko3nm{X|Armk0ZOt%6 z;%URMI1Yb-XWTX(9SaU0jZrZ9(fzJ8?Qu;5?M*TDa4O4H`3B6C zw?)t^RIOsmF2$a@k_o{|H{&pHyb$|)Rf!HI*@J@^*U=$(JPoc=KBgpYuKmRQb)31f z*ZG{wAHTzNNvM=GA$Nn?xofPH`bGu~oNb*Xj+g7DG&-h*w5$7uRaD+DR;y`7!t+ap zo|5v6u{_J3!mhS+_-WF6lgDSFuTr6-^*p=EJw;2)ZgZ zOxxZt`Zt`{i2lJY!Kd#lw^n!xMINTE4KuUD)f6H-25Tz7_VQKCD;$|z7^=)#eRobM z)rBVx`Nkuo)w0ePXz2CHH4>l2QcA6(+mIdPg94-(dEU@eD|H{pAwN~l$#<+mOAjbt zh$a>{foG_7yYN8Hr~|R8C`p8b(Nha7JmE_dDo%B}Xmg(=S*AmALEXLwH3%c6Ll0;|OdcBy7HPu_ZNTl5E zX26TRbWAdz2=A4te*RsbkIMh(wp#Ty7niW3gAMPYV&daoWlSvm20AHG+`9!F&1Gti z*6pMuw*IRcj9`mXG)nEKWZq0k>=9h#81zhU-@$|Uh`8P&u$=oO1Uctk+o&+I{S%=G6F0%e-^AcVO zSf7amvot8gZ!>Pb-p*ZgIp5BSE0j}#)`aq|l}(0qC~I0VKoJ2#xah${YAP=W`rc2( zKN77G{7xFYH4%?_Dk~;vpTU5nY27KBuVy9}^KBT0+(+k8EVZQ=GL~?gw5^z51lXOQ zw)fqJ*P~s{E5vUNb{Pd+oXjT`xSC!r(oKf~un-e?Y$e}UTjVZ#k-*kExQOI;&bq93 ziSo@9x~a(;^DH-?)w88h7>3BZKSKTE8R{H9;9Fr^Lxbd4NwCPix9QC#z--B1`2%v0BO|5O%EZwd&DxQYM zkeo>Lyf1DKdC}%^^o1rB3`Zc{il(H}{-mkkF;Q{1O_rV}mnMB0xbrAg>*Oj?<{=3( zD0O8bLw=2KM=@0?nDOD$d@xPCFU(>fz5e?&n+i)xXPXZUfo(^to<0Z5Wj*L4uBN>5 z7`VkUWo+fKLpd9M!aUhC+$v5#1;4OWokUK)^<4tkDMrnb5{b2T7dEvbEt*jhyJDf3 zDj$v<1$p?(fx@i*@!2f%%xQh9{JKJEqO~U>M$O;{N!WY=1!U^1x6C*wKVPz7bKh>K z$oWNlUC_>3Nws#3#}w6=>(%ysDQ1HbQJ%XlEaxBHqNrQ*SUq&R(CQsBZDQgAVEbl4 zdJ*xnq0s6>`qz5c=bO^^?|?Ja-!`GJ;zwKZ?qjm!^_^iDXQy7}#y$tk`Y%MH_s_;w zVV&=L%$lQ8rcL-Y7@GMQHs!lR(-rR34zw)Vg|s*?-NBGf#_2B%BY zk|$;25ePrEObyLf(ouni5!<^UHWTCNlJ>m_4B{hN5qJD@A}sbbG39=h1~fhPHFI?| zu~+^@@<&dQnSpb7fyg#!cPLt_NXWD({|Qu+--D=M10S$2^XvW(Y>oCOw*Ch!`BU;g zLF+#y@8K4pBvk32lK({5_Xd6;?Ehlm?_}_=2INrwapwOu@GnmI-}Qe-a(~t5yl3=( zi;4AL0o}d&FF^PIoc?z}^>6k4Q2%?%|9ADj;i`N2U%2Wwd9(+=J{8*iHFY26a?)SB F{{e&HJ^cUx literal 0 HcmV?d00001