有时候代码丢失了需要从容器运行的镜像中恢复出所需代码,此时仅需在容器运行的服务器进行简单的几步操作,就能提取出打包镜像时使用的代码
查看所有容器:
docker container ls -a
根据容器id进入到指定容器:
docker exec -ti id /bin/bash
拷贝容器内目录到服务指定文件夹:
docker container cp id:/usr/local/tomcat/webapps/province-admin /home/test/province-admin
经过以上3布就已经把容器内代码提取到了服务器指定目录,从服务器将代码下载到本地就可以查看所需代码了
补充:docker数据卷容器备份、恢复超详细!小白也可以!!!
在日常生活中,把容器和本地物理机做了目录映射直接存在本地,那么我们只需要对本地的硬盘定期备份就好了,但如果没有这个映射的情况下,备份和恢复该如何处理呢?
首先我们创建一个需要备份的数据卷,
docker run -itd -v /opt/zz --name c1 centos /bin/bash
-itd 是以交互的方式运行,d是后台运行
-v 是指定容器内的数据卷,如果指定的数据卷不存在,会自动创建
–name 自定义名字
/bin/bash 交互命令以/bin/bash来
为了验证数据卷容器的备份功能,在挂载的/opt/zz目录下创建一个c11文件,并写入内容"woda"。
[root@160e0646396d zz]# touch c11.txt [root@160e0646396d zz]# echo "woda" > c11.txt [root@160e0646396d zz]# cat c11.txt woda
然后为了给数据卷容器备份,使用 –volumes-from 来标记需要备份的数据卷,并从主机挂载当前目录到容器的/v3目录。
$(pwd)是docker支持的指定当前目录的方法,了解linux基本命令的会发现,linux查看当前目录就是pwd命令。
容器启动后,在当前目录下生成的c23.tar文件就是/opt/zz容器卷的备份文件。
这样,数据卷容器中的数据就备份完成。
整个实践过程如下:
[root@client ~]# docker run --volumes-from c1 -v $(pwd):/v3 centos tar cvf /v3/c23.tar /opt/zz tar: Removing leading `/' from member names /opt/zz/ /opt/zz/c11.txt
最后我们就可以看到我们之前在需要备份的容器的数据卷里的内容了,/opt/zz/c11.txt
–volumes-from < Container >: 连接要备份数据的容器
-v $(pwd):/v3:挂载当前路径到容器centos 容器,数据将会备份到此路径
centos: 非常小的镜像
tar cvf /v3/c23.tar /opt/zz: 将 /opt/zz 路径下的文件打包到 c23.tar
二 恢复
备份最终也是为了可以恢复,否则备份就没有意义了,Docker恢复备份也很简单,只需要2步即可。
首先,创建一个带有空数据卷的容器/opt/x2。
docker run -itd -v /opt/x2 --name c3 centos /bin/bash docker run -itd -v /opt/x2 --name c3 centos /bin/bash
然后,创建另一个容器,挂载data1容器卷中的数据卷,并使用untar解压备份文件到挂载的容器卷中。
docker run --volumes-from c3 -v $(pwd):/v3 centos tar xvf /v3/c23.tar
这个时候,之前备份的数据卷容器的数据已经恢复到了容器/opt/x2中了。
为了查看和验证恢复的数据,我们可以再启动一个容器挂载/opt/x2容器卷来查看。
整个实践过程如下:
[root@client ~]# docker run --volumes-from c3 -v $(pwd):/v3 centos tar xvf /v3/c23.tar opt/zz/ opt/zz/c11.txt
最后我们就可以看到我们之前备份的c11.txt,现在已经恢复到c3这个容器中的数据卷了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。