Docker容器从镜像恢复代码的操作步骤

有时候代码丢失了需要从容器运行的镜像中恢复出所需代码,此时仅需在容器运行的服务器进行简单的几步操作,就能提取出打包镜像时使用的代码

查看所有容器:

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这个容器中的数据卷了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 浅谈Docker run 容器处于created状态问题

    在最近遇到的一次问题中,有这样一种现象: 系统有一个测试脚本会不断的执行docker run命令来运行容器,在测试过程中发现有一个情况是,有时候容器没有完全被运行到"Up"状态,而是处于"created"状 态,现象十分奇怪. 上环境首先查看了"created"状态的容器,以及dockerd日志: (1) dockerd的日志中只有"post create"请求,但是居然没有收到该容器的"post start&quo

  • docker空间爆满导致的进入容器失败的解决方案

    由于问题发生的比较突然,业务催的比较急,所以没来得及截图案发现场,所以现场截图为后期正常的环境. 周一上班,照例进入服务器,进入docker容器 >>> docker exec -i -t xxx /bin/bash Docker error : no space left on device 没空间了? 立马想到查看系统的空间 >>> df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 0 3.

  • docker logs-查看docker容器日志的实现

    通过docker logs命令可以查看容器的日志. 命令格式: $ docker logs [OPTIONS] CONTAINER Options: --details 显示更多的信息 -f, --follow 跟踪实时日志 --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all -t, --timestamps 显示时间戳 --until string 显示自某个timest

  • docker 容器自定义 hosts 网络访问操作

    在 docker-compose.yml 中增加 extra_hosts 关键字就可以将数据写入到容器的 /etc/hosts. extra_hosts 添加主机名映射. extra_hosts: "somehost:162.242.195.82" "otherhost:50.31.209.229" 将会在/etc/hosts创建记录: 162.242.195.82 somehost 50.31.209.229 otherhost 注意: 如果指向的是本机,不要写容

  • 解决docker容器重启之后/etc下某些配置文件被重置的问题

    1. /etc/hosts, /etc/resolv.conf和/etc/hostname容器中的这三个文件不存在于镜像,而是存在于于/var/lib/docker/containers/,在启动容器的时候,通过mount的形式将这些文件挂载到容器内部. 因此,如果在容器中修改这些文件的话,修改部分不会存在于容器的top layer,而是直接写入这三个物理文件中. 2.为什么重启后修改内容不存在了? 原因是:每次Docker在启动容器的时候,通过重新构建新的/etc/hosts文件,这又是为什么

  • docker 查看容器的挂载目录操作

    只显示Docker容器挂载目录信息 docker inspect --format "{{.Config.Volumes}}" 369a1376f78c 显示Docker容器和物理主机挂载目录信息 方法一 docker inspect -f "{{.Mounts}}" 369a1376f78c 方法二 docker inspect 369a1376f78c | grep Mounts -A 50 补充:Docker 显示某个容器所有的挂载目录 docker insp

  • Docker容器迁移到其他服务器的5种方法详解

    迁移在许多情况下都是不可避免的.硬件升级.数据中心变化.过时的操作系统,所有这些都可能成为迁移的触发点. Docker容器迁移通常是迁移任务的一部分.今天我们将看到将Docker容器从现有服务器迁移到另一台服务器的不同方法. 如何将Docker容器迁移到另一台服务器,没有直接将Docker容器从一台服务器迁移到另一台服务器的方法,我们通过使用下面这些方法中的一个或多个来解决Docker容器迁移的问题. 1.导出和导入容器 导出容器意味着从容器的文件系统创建压缩文件,导出的文件保存为"gzip&q

  • Docker容器从镜像恢复代码的操作步骤

    有时候代码丢失了需要从容器运行的镜像中恢复出所需代码,此时仅需在容器运行的服务器进行简单的几步操作,就能提取出打包镜像时使用的代码 查看所有容器: 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 经过

  • Docker重命名镜像名称和TAG操作

    使用docker images时,可能会出现REPOSITORY和TAG均为none的镜像,如下图 这时,我们可以重命名镜像 # docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签) 补充知识:docker image 重命名 docker image 名称不小心写错了,例如想命名为 ubuntu1604-arm-qt,写成了 unbuntu1604-arm-qt.如何改回来? 用 docker tag 重命名 docker images 找到image_

  • docker安装并持久化postgresql数据库的操作步骤

    安装docker步骤略过 1.拉取postgresql镜像 docker pull postgresql 2.创建本地卷,数据卷可以在容器之间共享和重用,默认会一直存在,即使容器被删除(docker volume inspect pgdata可查看数据卷的本地位置) docker volume create pgdata 3.启动容器 docker run --name postgres2 -e POSTGRES_PASSWORD=password -p 5432:5432 -v pgdata:

  • 使用goland调试远程代码的操作步骤

    前言 很多时候我们都在window上使用goland,并直接使用goland调试go代码. 但是很多时候我们的程序运行在Linux服务器上,虽然可以通过dlv命令行进行手动打断点调试,但是太麻烦了. 因此我查阅资料发现,goland是支持远程调试的,因此写篇文章记录一下. 操作步骤 1.安装dlv 在Linux服务器上执行:go install github.com/go-delve/delve/cmd/dlv,安装dlv调试工具,因为是go编译的可执行程序,可以随意复制,其他环境甚至都可以不安

  • docker容器下配置jupyter notebook的操作

    docker容器下配置jupyter notebook,主要是为了编写python代码,更具体点是做深度学习的开发. jupyter web形式最高效的使用方式就是部署在云上,不管是cpu云服务器还是gpu的云服务器,都能快速启动使用. 而docker的出现又方便了很多在部署使用上. - 安装 docker docker分为docker CE和docker EE,一般使用docker CE(社区版本). docker可以在Linux(ubuntu.centos).MacOS.Windows或者树

  • Docker 技巧之删除Docker容器和镜像

    公司业务在生产环境100多台服务器上用了docker,已经有大半年了,可是最近发现,每个服务器上的各种镜像好多好乱,就想批量删除镜像,需要的来看一下把. 删除所有未运行 Docker 容器 docker rm $(docker ps -a -q) 删除所有 Docker 镜像 删除所有未打 tag 的镜像 docker rmi $(docker images -q | awk '/^<none>/ { print $3 }') 删除所有镜像 docker rmi $(docker images

  • docker镜像完全卸载的操作步骤

    1.docker ps -a查看运行的镜像进程 [root@mylinux~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 98acb9dcb2a2 redis:5 "docker-entrypoint.s-" 8 minutes ago Up 8 minutes 0.0.0.0:6379->6379/tcp redis 1b1ff7f08583 mysql:5.7 "docke

  • docker容器访问宿主机的MySQL操作

    背景: 有一个flask项目提供接口,使用docker容器构建并且运行,MySQL在宿主机运行,需要在容器中可以让flask连接上宿主机的mysql 使用ifconfig命令可以看到,有一个docker0和eth0,在docker容器中可以通过eth0的IP地址加上端口号(3306)这样就可以连接上宿主机的MySQL了:另外,nginx可以通过docker0的IP地址加上构建容器时指定的端口号进行访问容器. 补充:docker的mysql容器运行正常,但是宿主机却连不上数据库,解决方法来啦 do

  • Docker容器运行ASP.NET Core的实现步骤

    最近要学习的知识太多,都不知道先学哪些了,原本计划这篇博客是写xamarin.forms中的listview用法,关于listview的用法简书上有一篇介绍的也比较详细,所以暂时先缓一缓,属于次要任务,等以后再写.本周在万能的淘宝找了写关于区块链的教程,同时了解了下.net core.最近一两年对C#技术跟进不多,侧重点是Java,之前出.net core1.0的时候觉得.net core还不完善,所以就没学,没想到.net core这么快已经要到3.0了.毕竟自己是C#出身,一精多转,不能忘本

  • docker拉取镜像查看版本的方法步骤

    要想查看镜像的版本好TAG,需要在docker hub查看 地址如下:https://hub.docker.com 进入之后,在页面左上角搜索框搜索 以nginx为例: 搜索完成如下: 点击进入详情 点击标签 选择自己想要拉取的标签 即可 例如 拉取标签为1.15.5的nginx镜像 # docker pull nginx:1.15.5 1.15.5: Pulling from library/nginx f17d81b4b692: Pull complete d5c237920c39: Pul

随机推荐