代码之家  ›  专栏  ›  技术社区  ›  MathematicalOrchid

从可移动媒体运行Docker容器

  •  0
  • MathematicalOrchid  · 技术社区  · 6 年前

    我想把一个Docker图像放到USB硬盘上,然后能够将其插入任何有Docker的[Linux]机器并运行该图像。我该怎么做呢?

    到目前为止,我发现可以将Docker图像“导出”到平面文件中,但似乎不行 直到你再次“导入”它。那不好。我的最终目标是从引导CD上运行这些东西,很明显,它没有任何可写的存储来“导入”数据。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jensen    6 年前

    所以请记住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驱动器上的docker文件运行docker compose

    最后,容器将始终在主机上运行,但您可以将该USB驱动器带到任何机器上,并在任何地方运行Dockerfile

        2
  •  0
  •   MathematicalOrchid    4 年前

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

    我提出的解决方案是:

    • 删除(!!)这个 /var/lib/docker 文件夹
    • 创建名为的符号链接 /var/lib/docker 哪一个指向你 事实上
    • 然后(并且只有在那时)启动Docker守护进程。

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

    请注意,这存储了 全部的 Docker守护进程的状态,而不仅仅是一个映像。但我还没有找到解决这个问题的方法。

    你也不想对一台“真正的”电脑这样做;我想把它作为引导CD,下次重新启动时,对文件系统的所有更改都会再次消失。

        3
  •  0
  •   MathematicalOrchid    4 年前

    要运行替代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 需要已经存在。其他文件、套接字和目录似乎是自动创建的。

    二者都 containerd dockerd 接受a --debug 选项,使他们输出更多的信息到控制台。这两个都是守护进程,因此上面的命令永远不会返回。

    一旦新的 正在运行,如果手动指定套接字,则可以正常与它对话:

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

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

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

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