5.11. 在两个容器间共享文件
使用卷可以持久保留容器中的数据,即使容器被删除。卷可用于在多个容器间共享数据。卷是保存在主机上的文件夹。卷可以在容器和主机间共享。
主要优点是:
- 卷可以在容器间共享。
- 卷可以更容易备份或迁移。
- 卷不会增加容器的大小。
先决条件
-
container-tools元数据包已安装。
流程
创建卷:
podman volume create hostvolume
$ podman volume create hostvolumeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示卷的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,它会在卷目录中创建一个卷。您可以将挂载点路径保存到变量,以便更轻松地操作:
$ mntPoint=$(podman volume inspect hostvolume --format {{.Mountpoint}})。请注意,如果您运行
sudo podman volume create hostvolume,则挂载点会更改为/var/lib/containers/storage/volumes/hostvolume/_data。使用存储在
mntPoint变量中的路径来在目录中创建一个文本文件:echo "Hello from host" >> $mntPoint/host.txt
$ echo "Hello from host" >> $mntPoint/host.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 列出
mntPoint变量所定义的目录中的所有文件:ls $mntPoint/
$ ls $mntPoint/ host.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行名为
myubi1的容器,并将主机上hostvolume卷名定义的目录映射到容器上的/containervolume1目录:podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi10/ubi /bin/bash
$ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi10/ubi /bin/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,如果您使用
mntPoint变量定义的卷路径(-v $mntPoint:/containervolume1),则在运行podman volume prune命令时数据可能会丢失,因为这会删除未使用的卷。始终使用-v hostvolume_name:/containervolume_name。列出容器上共享卷中的文件:
ls /containervolume1
# ls /containervolume1 host.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以查看在主机上创建的
host.txt文件。在
/containervolume1目录中创建一个文本文件:echo "Hello from container 1" >> /containervolume1/container1.txt
# echo "Hello from container 1" >> /containervolume1/container1.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
CTRL+p和CTRL+q从容器分离。 列出主机上共享卷中的文件,您应该看到两个文件:
ls $mntPoint
$ ls $mntPoint container1.rxt host.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,您要在容器和主机间共享文件。要在两个容器之间共享文件,请运行另一个名为
myubi2的容器。运行名为
myubi2的容器,并将主机上hostvolume卷名定义的目录映射到容器上的/containervolume2目录:podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi10/ubi /bin/bash
$ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi10/ubi /bin/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 列出容器上共享卷中的文件:
ls /containervolume2
# ls /containervolume2 container1.txt host.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以看到您在主机上创建的
host.txt文件,以及您在myubi1容器中创建的container1.txt文件。在
/containervolume2目录中创建一个文本文件:echo "Hello from container 2" >> /containervolume2/container2.txt
# echo "Hello from container 2" >> /containervolume2/container2.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
CTRL+p和CTRL+q从容器分离。 列出主机上共享卷中的文件,您应该看到三个文件:
ls $mntPoint
$ ls $mntPoint container1.rxt container2.txt host.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow