欢迎光临
我们一直在努力

Docker 自用

docker的备份和恢复

参考文章 Docker备份与恢复

以下是几种常见的Docker容器备份与恢复方法:

容器备份方法

通过提交容器创建新镜像 – 操作步骤: – 查看运行中的容器:docker ps – 提交容器创建新镜像:docker commit -m "备份描述" -a "作者信息" <容器名或ID> 备份镜像名:标签。例如:docker commit -m "2023年10月数据库备份" -a "运维团队" mysql_container mysql_backup:v20231001 – 将镜像保存为tar文件:docker save -o /path/to/backup/mysql_backup_v20231001.tar mysql_backup:v20231001。也可以使用gzip压缩以减少空间占用:docker save mysql_backup:v20231001 | gzip > mysql_backup_v20231001.tar.gz – 优缺点: – 优点:完整保存容器状态,包括运行内存中的变化。 – 缺点:备份文件较大;可能包含临时文件和冗余数据。

不,使用 docker commit 创建镜像后,并不是必须将镜像保存为 .tar 文件。保存为 .tar 文件只是备份和迁移镜像的一种方式。你可以根据需求选择是否保存为 .tar 文件。

不保存为 .tar 文件的情况

如果你只是想在本地使用这个备份镜像,或者在本地的不同Docker环境中使用它,你可以直接使用 docker commit 创建的镜像,而不需要将其保存为 .tar 文件。例如:

docker commit -m "备份描述" -a "作者信息" <容器名或ID> 备份镜像名:标签

然后,你可以直接使用这个镜像来创建新的容器:

docker run -d –name 新容器名 备份镜像名:标签

保存为 .tar 文件的情况

如果你需要将这个镜像迁移到其他机器,或者需要将镜像存储在文件系统中以便进行备份,那么可以将镜像保存为 .tar 文件。这样做有以下好处:

  • 便于迁移:你可以将 .tar 文件复制到其他机器上,然后使用 docker load 命令加载镜像。
  • 便于存储:.tar 文件可以存储在文件系统中,便于进行备份和归档。
  • 便于共享:你可以将 .tar 文件上传到文件服务器或云存储中,方便其他用户下载和使用。
  • 保存为 .tar 文件的命令如下:

    docker save -o /path/to/backup/备份镜像名_备份日期.tar 备份镜像名:标签

    例如:

    docker save -o /backup/mysql_backup_v20231001.tar mysql_backup:v20231001

    总结
    • 不保存为 .tar 文件:如果你只是在本地使用这个镜像,可以直接使用 docker commit 创建的镜像。
    • 保存为 .tar 文件:如果你需要迁移、存储或共享这个镜像,建议将其保存为 .tar 文件。

    根据你的具体需求选择合适的方式即可。

    docker commit 创建的镜像默认存储在本地的 Docker 镜像仓库中。你可以通过 docker images 命令查看所有本地存储的镜像,并通过 docker save 和 docker load 命令将镜像保存为 .tar 文件或从 .tar 文件加载镜像

    提交容器为镜像,并上传到镜像仓库

    如果你已经有一个正在运行的容器,并希望将其提交为镜像,然后推送到镜像仓库,你可以按照以下步骤操作:

    1. 提交容器为镜像

    首先,你需要提交正在运行的容器为一个新的镜像。使用 docker commit 命令来完成这一步骤。假设你的容器名称或ID是 your_container,你可以执行以下命令:

    docker commit your_container your_new_image:tag

    • your_container 是你要提交的容器的名称或ID。
    • your_new_image 是你想要创建的新镜像的名称。
    • tag 是镜像的标签,可以是版本号或其他标识符。

    例如:

    docker commit my_running_container my_image:v1

    这会创建一个名为 my_image,标签为 v1 的新镜像。

    2. 验证镜像

    提交完成后,你可以使用 docker images 命令来查看本地镜像列表,确认新镜像是否存在:

    docker images

    3. 登录到镜像仓库

    在推送镜像之前,你需要登录到 Docker Hub 或其他私有镜像仓库。如果你使用的是 Docker Hub,可以使用以下命令登录:

    docker login

    系统会提示你输入用户名和密码。

    4. 推送镜像到仓库

    登录成功后,你可以使用 docker push 命令将镜像推送到仓库。如果你还没有为镜像设置完整的仓库地址,你需要先设置它:

    docker tag your_new_image:tag username/your_new_image:tag

    • username 是你的 Docker Hub 用户名。
    • your_new_image:tag 是你之前创建的镜像名称和标签。

    然后,推送镜像:

    docker push username/your_new_image:tag

    例如:

    docker push myusername/my_image:v1

    这会将名为 my_image,标签为 v1 的镜像推送到 Docker Hub 上的 myusername 仓库。

    5. 确认镜像已推送

    推送完成后,你可以登录到 Docker Hub,检查镜像是否已经成功推送到你的仓库中。

    注意事项

    • 确保在提交容器为镜像之前,容器中所有的数据和状态都是你想要的。因为一旦提交,容器的当前状态就会被固定到镜像中。
    • 如果你的镜像包含敏感信息(如密码、私钥等),请确保在推送之前从镜像中移除这些信息,以避免安全风险。
    • 如果你使用的是私有镜像仓库,确保你已经正确配置了仓库的访问权限和认证信息。

    通过以上步骤,你可以将一个正在运行的容器提交为镜像,并将其推送到 Docker Hub 或其他镜像仓库中。

    虚悬镜像

    虚悬镜像(Dangling Image)是Docker中的一个概念,是指没有标签(Tag)且未被任何容器引用的Docker镜像,在docker images列表中显示为<none>:<none>。

    虚悬镜像通常是在镜像构建或更新过程中产生的。例如,重新构建同名镜像时,旧镜像的标签会被转移到新镜像,原镜像就会变为虚悬状态。另外,在Dockerfile构建过程中出错或手动取消,未命名的中间层镜像会残留,多阶段构建中未被最终镜像引用的中间层也可能成为虚悬镜像。还有,当手动删除一个镜像的标签,而这个镜像没有被其他标签引用时,它也会变成虚悬镜像。

    虚悬镜像会占用磁盘空间,随着项目的迭代和开发环境的频繁变更,其数量可能会不断增加,导致镜像列表变得杂乱无章,增加管理难度。可以使用docker image ls -f dangling=true命令来查看所有虚悬镜像,使用docker image prune命令来清理不再使用的虚悬镜像,也可以通过docker rmi $(docker images -f "dangling=true" -q)命令直接删除所有虚悬镜像。

    两种退出容器交互终端的方式

    在使用 Docker 容器时,Ctrl + P + Q 和 exit 是两种退出容器交互终端的方式,但它们的作用和结果有本质区别,核心差异在于是否会终止容器运行。

    1. exit 退出容器

    • 操作:在容器的交互式终端(如通过 docker run -it 进入的终端)中输入 exit 并回车。
    • 效果:
      • 直接退出容器的交互式终端。
      • 同时终止容器的运行(容器状态变为 exited)。
    • 原理: 容器的主进程(启动容器时执行的命令,如 bash)与交互式终端绑定,输入 exit 会终止主进程,而 Docker 容器的生命周期依赖主进程——主进程结束,容器就会停止。

    2. Ctrl + P + Q 退出容器

    • 操作:在容器的交互式终端中,先按 Ctrl + P,再按 Ctrl + Q(注意是分两次按,不是同时按)。
    • 效果:
      • 仅退出容器的交互式终端,回到宿主机的命令行。
      • 容器继续在后台运行(容器状态保持 running)。
    • 原理: 这是 Docker 提供的“脱离终端但不终止容器”的快捷键,本质是将终端与容器的主进程“解绑”,但主进程仍在运行,因此容器不会停止。

    对比总结

    操作方式是否退出终端容器状态变化适用场景
    exit 从 running 变为 exited 完成操作后不再需要容器运行(如临时测试)
    Ctrl + P + Q 保持 running 需要容器在后台继续运行(如运行服务、进程)

    实操验证

  • 启动一个交互式容器:

    docker run -it –name test_container ubuntu /bin/bash

    此时进入容器终端(命令提示符变为 root@容器ID:/#)。

  • 用 exit 退出: 输入 exit 后,回到宿主机终端,执行 docker ps -a 会看到 test_container 状态为 exited。

  • 重新启动容器并进入,用 Ctrl + P + Q 退出:

    docker start test_container
    docker exec -it test_container /bin/bash # 重新进入终端

    按 Ctrl + P + Q 退出后,执行 docker ps 会看到 test_container 仍处于 running 状态。

  • 总结

    • 若想停止容器,用 exit;
    • 若想让容器在后台继续运行,仅退出终端,用 Ctrl + P + Q。 这两种方式的选择,取决于你是否需要容器在退出终端后继续提供服务(如运行 Web 服务、数据库的容器通常需要后台运行)。
    赞(0)
    未经允许不得转载:171主机测评 » Docker 自用
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址