记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

Docker设置容器自动启动或定时启动与镜像自动更新

Docker设置容器自动启动或定时启动与镜像自动更新

随系统启动
设置docker开机启动
systemctl enable docker.service
设置容器自动启动
对于新容器,创建时添加参数
--restart=always
对于已创建容器,需要使用update命令
docker update --restart=always <容器名>
如果容器因为出错而退出,此时又会重新启动,然后又出错,又启动,容易进入启动重启死循环中。
 
定时启动
使用crontab命令
输入如下命令会自动打开一个文件,文件中的每一行都是一个定时任务。
crontab -e
每一行定时任务有两部分组成,前面是cron表达式,后面是要执行的命令如每天凌晨两点重启某个容器。
0 2 * * * docker restart <容器名>
使定时任务生效
systemctl restart crond
使用如下命令查看所有定时任务
crontab -l
 
crontab命令详解
min   hour    day     month   weekday command
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
注:
数字的表示最好用2为阿拉伯数字显示
周和日最好不要同时用
定时任务要加注解
可以定向到日志文件或者空文件
定时任务一定是绝对路径,且目录必须存在才能出结果
crontab 服务一定要开启运行
Linux计划任务Crontab 在线生成器
https://crontab.guru/
例子:
https://crontab.guru/#0_8_*_*_5
表示:“At 08:00 on Friday.”(每周五早上8点) 
群晖系统中定时重启/关闭/启动Docker容器的方法
1、打开群晖Docker,左边菜单“容器”,找到你想要设置定时重启/关闭/开启的容器,记录一下名称(以我的群晖为例,容器名称为xhofe-alist,该容器已经运行了3天);
2、点一下容器的日志,看到最后生成日志的时间是2022年11月10日,的确不是今天的;
3、打开群晖控制面板,在任务计划,新增,计划的任务,用户定义的脚本;
4、一般设置里面,填写任务名称,用户账号要设置为root,在“已启动”处打勾;
5、在“计划”里面设置好定时运行的时间(我设置的是每天凌晨5点运行);
6、在任务设置的用户定义的脚本输入以下命令(xhofe-alist为上面第1个步骤的容器名称,请自行修改为你实际的容器名称),确定:
docker restart xhofe-alist
7、确定;
8、为了验证命令是否有效,我找到刚刚添加的任务,右键,运行;
9、是;
10、回到Docker容器这边,看到运行时间已经变成了1分钟;
11、再看容器的日志,生成了今天的日志,证明任务计划是有效的;
12、其他的命令,可根据实际需求自行修改和设置:
#启动容器的命令
docker start xhofe-alist
#停止容器的命令
docker stop xhofe-alist
 
Watchtower 自动更新正在运行的 Docker 容器
 
自动更新所有的Docker容器
XML/HTML代码
  1. docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
更新指定的Docker容器
XML/HTML代码
  1. docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower xxqg
是以下面Dcoker名字叫xxqg的名字为范例运行的
XML/HTML代码
  1. docker run -d -it --name=xxqg -e ModeType=3 -e PushMode=3 -e PPtoken=PlusPushtoken -e maxtrylogin=3 -e tryloginsleep=60 -e SetUser=1 trustyboy/xxqg-helper:latest
PlusPushtoken从 http://www.pushplus.plus/push1.html 获得。
默认是拉取最新的镜像,如果版本多会占用过多空间,可以加上参数  -c  (--cleanup)清理旧的的镜像,只保留最新的。
可以更新多个指定的容器
XML/HTML代码
  1. 如更新 nginx、redis 这两个容器,可以把容器名称追加到启动命令的最后面
  2. docker run -d \
  3.     --name watchtower \
  4.     --restart unless-stopped \
  5.     -v /var/run/docker.sock:/var/run/docker.sock \
  6.     containrrr/watchtower -c \
  7.     nginx redis
设置单个容器自动更新特征
给容器添加 com.centurylinklabs.watchtower.enable 这个 LA­BEL 并设置它的值为 false,或者在启动命令中加入 --label com.centurylinklabs.watchtower.enable=false 参数可以排除相应的容器。
XML/HTML代码
  1. # openwrt-mini 镜像的容器启动命令,Watch­tower 将永远忽略它的更新,即使它包含在自动更新列表中  
  2. docker run -d \
  3.     --name openwrt-mini \
  4.     --restart always \
  5.     --network openwrt \
  6.     --privileged \
  7.     --label com.centurylinklabs.watchtower.enable=false \
  8.     p3terx/openwrt-mini \
  9.     /sbin/init
  10.   
  11. #当容器启动命令中加入 --label com.centurylinklabs.watchtower.enable=true 参数,
  12. #并且给 Watch­tower 加上 --label-enable 选项时,Watch­tower 将只更新这些包含此参数的容器
  13. docker run -d \
  14.     --name watchtower \
  15.     --restart unless-stopped \
  16.     -v /var/run/docker.sock:/var/run/docker.sock \
  17.     containrrr/watchtower -c \
  18.     --label-enable
  19.   
  20. # 或者 --label-enable 可以简写为 -e:
  21. docker run -d \
  22.     --name watchtower \
  23.     --restart unless-stopped \
  24.     -v /var/run/docker.sock:/var/run/docker.sock \
  25.     containrrr/watchtower -ce
设置 com.centurylinklabs.watchtower.enable=false 参数后容器将永远被 Watch­tower 忽略,包括后面将要提到的手动更新方式,所以一般不推荐这样做,除非你愿意手动重建的原生方式更新。
设置自动更新检查频率
默认情况下 Watch­tower 每 5 分钟会轮询一次,可以使用:--interval, -i - 设置更新检测时间间隔,单位为秒。比如每隔 1 个小时检查一次更新:
XML/HTML代码
  1. docker run -d \
  2.     --name watchtower \
  3.     --restart unless-stopped \
  4.     -v /var/run/docker.sock:/var/run/docker.sock \
  5.     containrrr/watchtower -c \
  6.     --interval 3600
--schedule, -s - 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,即第一位是秒。比如每天凌晨 2 点检查一次更新:
XML/HTML代码
  1. docker run -d \
  2.     --name watchtower \
  3.     --restart unless-stopped \
  4.     -v /var/run/docker.sock:/var/run/docker.sock \
  5.     containrrr/watchtower -c \
  6.     --schedule "0 0 2 * * *"
参考:https://blog.csdn.net/qq_21127151/article/details/129574398
不同系统可能设置命令不一样,可以根据实际情况进行修改。
常用强国Docker
XML/HTML代码
  1. docker run --name study_xxqg -d -p 8080:8080 -v /opt/study_xxqg/:/opt/config/ --restart always heyibear/study_xxqg:latest
浏览器直接打开:http://127.0.0.1:8080 账号:admin 密码:admin 强国扫描登录自动学习。配置文件可以修改账号密码和普通用户信息。
另外一个强国Docker
XML/HTML代码
  1. docker run --name study_xxqg -d -p 8080:8080 -v /opt/study_xxqg/:/opt/config/ --restart always sjkhsl/study_xxqg:latest
浏览器直接打开:http://127.0.0.1:8080 账号:admin 密码:admin 必须用浏览器登录添加学习强国账号。配置文件自行修改,基本同上。
设置每天凌晨2点更新并清理 study_xxqg 这个容器。
XML/HTML代码
  1. docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock  -e TZ=Asia/Shanghai  containrrr/watchtower study_xxqg   -c --schedule "0 0 2 * * *"
单用户强国Docker,可以微信发送通知
XML/HTML代码
  1. docker run -d -it --name=xxqg -e ModeType=3 -e PushMode=3 -e PPtoken=PlusPushtoken -e maxtrylogin=3 -e tryloginsleep=60 -e SetUser=1 trustyboy/xxqg-helper:latest
PlusPushtoken从 http://www.pushplus.plus/push1.html 获得。
Docker cp 命令(用于容器与主机之间的数据拷贝)
语法:
XML/HTML代码
  1. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  2. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
实例:
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
XML/HTML代码
  1. docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
XML/HTML代码
  1. docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
XML/HTML代码
  1. docker cp  96f7f14e99ab:/www /tmp/
简单来说和Linux的cp命令一样,无非就是加了一个容器的名字或者id作为路径。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):