小编Chr*_*isW的帖子

用于克隆/快照Docker容器(包括其数据)的脚本?

我想克隆一个包含所有数据的dockerized应用程序,在此示例中,它使用三个容器:1)Web应用程序容器(例如CMS),2)数据库容器和3)数据量容器(使用docker卷) 。

使用docker-compose,我可以仅使用初始数据轻松地创建这些容器的相同实例。但是,如果我想以与克隆KVM容器类似的方式在同一服务器上克隆一组正在运行的容器(包括其所有累积数据),该怎么办?使用KVM时,我将挂起或关闭VM,使用virt-clone之类进行克隆,然后启动克隆的guest虚拟机,该guest虚拟机具有与原始数据相同的所有数据。

一种用例是在进行重大更改之前或在安装新版本的插件之前,为正在运行的开发Web服务器创建克隆/快照。

使用Docker,这似乎并不那么简单,因为数据不会自动与其容器一起复制。理想情况下,我想做一些简单的事情docker-compose clone,最后得到与第一组相同的第二组容器,包括它们的所有数据。Docker和docker-compose都不提供克隆命令(从版本1.8开始),因此我需要考虑各种方法,例如备份和还原数据/数据库或使用第三方工具(例如Flocker)。

与此相关的是一个问题,该问题是如何执行与Docker化应用程序的KVM快照类似的功能,并能够轻松返回到先前的状态。最好是,克隆,快照和还原应尽可能减少停机时间。

完成这些任务的首选Docker方法是什么?

编辑:基于第一个答案,我将使我的问题更具体一些,以便希望能够到达编程步骤,以便能够执行类似的操作docker-compose-clonedocker-compose-snapshot使用bash或python脚本。克隆Docker卷的内容似乎是实现此目的的关键,因为每次我在同一yaml文件上运行docker-compose时,容器本身基本上都是克隆的。

通常,我的全克隆脚本需要

  1. 复制包含docker-compose文件的目录
  2. 暂时停止容器
  3. 创建(但不一定运行)第二组容器
  4. 确定要复制的数据量
  5. 备份这些数据量
  6. 将数据卷还原到克隆的数据容器中
  7. 启动第二组容器

    • 这将是正确的解决方法,我应该如何实施呢?我尤其不确定如何在脚本中执行步骤4(确定要复制的数据量),因为该命令docker volume ls仅在Docker 1.9中可用。

    • 我如何使用这种方法来做类似于KVM快照的事情?(可能使用ZFS的COW文件系统功能,而我的Docker安装已在使用该功能)。

shell clone web-applications docker docker-compose

5
推荐指数
1
解决办法
2209
查看次数

如何从已删除的 Docker 容器中恢复数据?如何将其重新连接到数据?

比方说,我删除了一个只有这里有数据的 PostgreSQL docker 容器:

$ docker inspect postgres1
...
"Source": "/var/lib/docker/volumes/4948af..../_data"
"Destination": "/var/lib/postgresql/data"

$ docker rm postgres1
Run Code Online (Sandbox Code Playgroud)

如果没有其他容器引用该卷--volumes-from,即使文件仍在磁盘上的某个位置,我也无法再重新连接到该卷:/var/lib/docker/volumes/...

这给我带来了两个问题:

  1. 如果我不知道目录的卷 UUID,定位数据最佳方法是什么?
    • Doingls /var/lib/docker/volumes/向我展示了一百个这样的目录f77c92...
    • 使用find . -name "*postgres*"我仍然得到几十个这样的结果...10e0dc/_data/postgresql.conf,没有明确的方法来识别正确的结果。
  2. 在目录中找到正确的数据后,如何将新创建的 postgres 容器重新连接到此数据/var/lib/docker/volumes/4948af.../_data

我每天都有一个完整的系统 rsync 备份。这如何有助于恢复(无法恢复整个系统)?

database postgresql recovery docker

5
推荐指数
1
解决办法
5547
查看次数

哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

我正在构建一个跨平台应用程序,需要在外部显示器上显示不同的视图(通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接)。 Flutter 是否能够在内置的外部显示器上显示不同的屏幕- 在现有的 Flutter 插件中还是使用现有的 Flutter 插件?我不想自己编写桥接器或插件,因为它需要本机 Swift(UIScreen)和 Kotlin(Presentation 类)代码。

当我探索 iOS 和 Android 的不同跨平台框架时,我只找到了 React Native 和一个可用的包:React NativeExternal Display - A React Native view renderer in external Display

Flutter 是否有类似的功能,或者在 Flutter 中解决此问题的最佳方法是什么?

android cross-platform multiscreen ios flutter

5
推荐指数
1
解决办法
1278
查看次数

卸载包时如何自动删除pipenv中的依赖Python包?

当你pipenv用来安装一个包时,所有的依赖包也将随它一起安装。卸载该包pipenv uninstall不会自动删除依赖包。

如何获得pip-autoremovepipenv中的等效功能?

例如:

$ cd testpipenv
$ pipenv install requests
$ pipenv shell
(testpipenv) $ pipenv graph

requests==2.24.0
 - certifi [required: >=2017.4.17, installed: 2020.6.20]
 - chardet [required: >=3.0.2,<4, installed: 3.0.4]
 - idna [required: >=2.5,<3, installed: 2.10]
 - urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.9]

(testpipenv) $ pipenv uninstall requests
(testpipenv) $ pip list

Package    Version
---------- ---------
certifi    2020.6.20
chardet    3.0.4
idna       2.10
pip        20.1.1
setuptools 47.3.1
urllib3    1.25.9
wheel      0.34.2

Run Code Online (Sandbox Code Playgroud)

的依赖包requests,例如urllib3 …

python pip uninstallation python-3.x pipenv

4
推荐指数
1
解决办法
1215
查看次数