一:使用sed命令监控日志直到关键词出现后退出
连接远程应用服务器并执行docker logs命令,通过sed命令捕获关键词(通过-e的方式捕获多个关键词),关键词后接 q,代表捕获到后退出当前命令
ssh $REMOTE_USER_NAME@$SERVER_IP "docker logs -f ${DOCKER_SERVICE_NAME} | sed -e '/JVM running for/ q' -e '/APPLICATION FAILED TO START/ q'"
直接查看日志tail -f xxx.log | sed -e '/JVM running for/ q' -e '/APPLICATION FAILED TO START/ q'
docker logs -f ${DOCKER_SERVICE_NAME} | sed -e '/JVM running for/ q' -e '/APPLICATION FAILED TO START/ q' 可以修改为timeout 600s docker logs -f ${DOCKER_SERVICE_NAME} | sed -e '/JVM running for/ q' -e '/APPLICATION FAILED TO START/ q'。代表在600s中没有捕获到关键词一样的退出命令,就是超时操作
捕获到 JVM running for后,直接退出。
二:复制docker镜像
docker tag origin_image_id target_image_repository:tag
例如,当前需要复制一个镜像。
docker tag 源镜像idxxxxxx 仓库地址/文件夹/名字:tag
执行后,可以通过docker images命令可以看到,多了一个镜像,并且tag为123。
三:docker登录远程镜像仓库
直接使用docker login 域名,输入用户名和密码即可。登录成功后,会在服务器/root/.docker/config.json文件中新增一个域名认证信息,所以也可以直接将该认证信息添加到config.json文件中,也就可以直接登录成功。登录成功后,服务器与镜像仓库才会有建立连接,才能进行push pull操作
四:推送镜像到镜像仓库
接第二个。直接使用docker push 仓库地址/文件夹/名字:tag,就会推送到相应的仓库/文件夹,并且有tag。例如 docker push hub-dev111111/library/java-service,该镜像就会被推送到hub-dev111111这个仓库。
五:拉取镜像仓库中的镜像到本地
同样,使用docke pull hub-dev111111/library/java-service:123,就会送hub-dev111111这个仓库的library文件夹下去拉取tag为123的java-service镜像
六:删除id相同的镜像
docker rmi hub-dev111111/library/java-service:123,直接使用名称:tag的方式删除
七:启动docker
docker run -d --net=host --name 容器名 镜像名/镜像id
--net=host作用为容器与宿主机通信,--name为给容器命名
八:批量重启docker
最近遇到得到公司会重启所有服务器的通知,这会导致当前服务器上运行的docker容器会被kill掉。被kill掉了总不可能docker ps查询到所有挂起状态的容器,然后挨着start吧,所以想了个批量重启的办法。
在重启服务器之前:首先查询当前运行着的容器并将容器id输出到txt文件,docker ps | awk '{print $1}'>id.txt或者docker ps | awk '{print $NF}' > id.txt,将容器id或容器名称输出到txt。$1代表通过awk分割后输出第一个,$NF代表输出最后一个
在重启服务器之后:docker start $(cat id.txt | while read line; do echo $line; done),就可以批量启动容器了。
while read line,读取txt中的行,循环输出。
$() 括号中是存放命令,该命令所得到的东西可以赋予其他变量。也可以使用 ``代替。例如docker start `cat id.txt | while read line; do echo $line; done`
${} 括号中存放的是变量