从可移动媒体运行Docker容器

时间:2018-08-29 16:27:21

标签: docker

我想将Docker映像放置到USB HD上,然后将其插入具有Docker并运行该映像的任何[Linux]机器中。我将如何去做?

到目前为止,我发现您可以将Docker映像“导出”到平面文件中,但是看来您不能任何操作,直到再次“导入”它。不好我的最终目标是从引导CD中运行这些东西,而引导CD显然没有任何可写存储,无法“导入”数据。

3 个答案:

答案 0 :(得分:0)

因此请记住,Docker是在您的[Linux]机器上运行的服务。 您可以执行以下操作:

  1. 构建并运行位于USB驱动器上的Dockerfile

    docker build -t my_image --file / path / to / Dockerfile / on / usb / drive。 && docker容器运行-d my_image

  2. 创建docker-compose文件并从USB驱动器上的Dockerfile运行docker-compose

    docker-compose up -d --build -f / path / to / Dockerfile / on / usb / drive

最后,容器将始终在主机上运行,​​但是您可以将该USB驱动器带到任何计算机上并在任何位置运行Dockerfile

答案 1 :(得分:0)

好,所以看来Docker守护进程使用了​​两个主要位置:

  • /var/lib/docker保存所有Docker映像。
  • /var/run/docker持有...实际上我不确定。

我想出的解决方案是:

  • 删除(!!)/var/lib/docker文件夹。
  • 创建一个名为/var/lib/docker的符号链接,该链接指向您实际上要存储数据的位置。
  • 然后(然后才)启动Docker守护程序。

这似乎导致Docker将数据存储在您告诉它的位置。特别是,如果您符号链接到外部USB设备上的文件夹,则Docker将在其中存储其状态。然后,您可以在另一台机器(可能是没有Internet访问的机器)上重复此过程,并访问图像。

请记住,它存储Docker守护进程的 entire 状态,而不仅仅是一个映像。但是我还没有找到解决方法。

您也不想在“真实”计算机上执行此操作;我希望将其用作引导CD,下次重新引导时,对文件系统的所有更改将再次消失。

答案 2 :(得分:0)

另一种可能性:可以在同一主机上运行两个Docker守护程序,并在它们之间传递映像。因此,您可以启动一个在USB存储设备上运行的守护程序,将所需的映像加载到其中,然后在另一台计算机上启动在同一USB设备上运行的Docker。

要运行备用Docker守护程序,您需要执行以下操作:

containerd \
  --state-dir /mnt/Docker/containerd \
  --listen unix:///mnt/Docker/containerd.sock

dockerd \
  --pidfile /mnt/Docker/dockerd.pid \
  --data-root /mnt/Docker/Data \
  --exec-root /mnt/Docker/Exec \
  --containerd /mnt/Docker/containerd.sock \
  --host unix:///mnt/Docker/dockerd.sock

要执行此操作,目录/mnt/Docker必须已经存在。其他文件,套接字和目录似乎是自动创建的。

containerddockerd都接受--debug选项,这使它们将更多信息输出到控制台。这两个都是守护程序,因此上面的命令永不返回。

新的dockerd运行之后,如果您手动指定套接字,则可以正常进行通话:

docker --host unix:///mnt/Docker/dockerd.sock info

您可能希望将其定义为shell别名,以节省一些输入。

您可以将映像从“普通” Docker守护进程复制到刚创建的新映像,如下所示:

docker save ubuntu:latest | docker --host unix:///mnt/Docker/dockerd.sock load