我想将一些较大的静态文件/资源分发为Docker镜像,这样用户就可以轻松地将这些可选文件拉到与拉动应用程序本身相同的方式。但我真的找不到一个好方法将文件从一个Docker镜像暴露给另一个?有没有办法将Docker映像本身(或其中的目录)作为卷安装到其他Docker容器?
我知道我可以使用的是大量的插件,但我找不到任何可以用到的东西或类似的东西?
答案 0 :(得分:2)
可以将图像的任何目录创建到泊坞窗卷,但不是完整图像。至少不是以漂亮或简单的方式。
如果要将图像中的目录创建为泊坞窗卷,可以创建命名卷:
String
从这一点开始,您可以通过图片getJsonProducts(lang: selectedLanguage, region: selectedRegion , completion: { (data) in
switch data {
case let .succes(data):
print("@@@@@ \(data)")
saveJsonFileToTheDisk(path: selectedLanguage + "/json/products.json", downloadData: data)
case let .error(error):
print(error)
}
})
docker volume create your_volume
docker run -d \
-it \
--name=yourcontainer \
-v your_volume:/dir_with_data_you_need \
your_docker_image
无法将整个图像装入卷中的原因是因为docker不允许将your_volume
指定为命名卷的源。即使您尝试使用docker-compose,您也会获得your_docker_image
。
答案 1 :(得分:1)
不知道任何直接的方式。
您可以使用主机中的文件夹作为共享内容的桥梁,这是实现此目的的间接方式。
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
tank = canvas.create_rectangle(200, 200, 250, 250, outline='dark green', fill='dark green')
OFFSETS = {'Left': (-1, 0), 'Right': (1, 0), 'Up': (0, -1), 'Down': (0, 1)}
def move(event):
canvas.move(tank, *OFFSETS[event.keysym])
canvas.bind('<Left>', move)
canvas.bind('<Right>', move)
canvas.bind('<Up>', move)
canvas.bind('<Down>', move)
canvas.focus_set()
root.mainloop()
对于your_image,您需要在dockerfile中添加CMD以将资产复制到your_assets_folder_in_your_image_container(您在卷之后执行CMD时使用的卷)
这可能会浪费时间,但只是在资产容器第一次启动时。容器启动后,资产容器中的文件实际上会复制到主机文件夹,并且不再具有资产映像业务。所以你可以删除资产图像的图像。然后没有空间浪费。
你的目的只是希望其他人容易使用资产,所以为什么不给他们提供脚本,自动获取图片 - &gt;启动容器(CMD自动复制文件到卷) - &gt;删除图像/容器 - &gt;资产已经存在于主机上,因此人们只需将此主机资产用作卷即可完成下一步工作。
当然,如果容器可以直接使用其他图像的资源,那么它比这个解决方案更好。无论如何,这可能是一个解决方案,虽然不完美。
答案 2 :(得分:0)
您可以将泊坞窗袜子添加为卷,以便您可以从泊坞窗容器中启动其中一个泊坞窗图像。
为此,请添加以下两个卷:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/usr/bin/docker:/usr/bin/docker"
如果您需要在容器之间共享文件,请在启动两个容器时映射卷/tmp:/tmp
。