我了解每个Docker容器都有一个可写层来持久化或保存与容器相关的数据。即使只是俗套,我也想将应用程序数据存储在容器中。
drwxr-xr-x 1 root root 4096 app
drwxr-xr-x 2 root root 4096 mount
dr-xr-xr-x 13 root root 0 sys
在容器中执行ls -lrt
时,我确实看到所有目录都不具有非root用户的写许可权。由于我以非root用户身份运行容器,因此不确定如何将应用程序数据存储在容器中。
任何指针都会有所帮助。
答案 0 :(得分:0)
我怎么知道存储该(应用程序)文件的目录?
任何写入非docker volume位置的文件都会写入docker容器文件系统的可写层。
存储驱动程序如何发挥作用?
如here所述:
Docker支持以下存储驱动程序:
overlay2是首选存储驱动程序,适用于所有当前支持的驱动程序 Linux发行版,不需要任何额外的配置。 aufs是 在Docker 18.06和更早版本上运行时首选的存储驱动程序 内核3.13上的Ubuntu 14.04,不支持overlay2。 支持devicemapper,但需要直接lvm进行生产 环境,因为loopback-lvm虽然为零配置,但 表现不佳。 devicemapper是推荐的存储驱动程序 CentOS和RHEL的内核版本不支持overlay2。 但是,当前版本的CentOS和RHEL现在支持 overlay2,现在是推荐的驱动程序。 btrfs和zfs 如果存储驱动程序是后备文件系统( 安装Docker的主机的文件系统)。这些 文件系统允许使用高级选项,例如创建“快照”, 但需要更多的维护和设置。这些都依赖于 支持文件系统配置正确。 VFS存储驱动程序 用于测试目的,以及在没有 可以使用写时复制文件系统。该存储的性能 驱动程序很差,通常不建议用于生产环境。
因此,在大多数情况下,您将不得不起诉overlay2
。仅当您的机器使用zfs
或btrfs
时,您才可以选择使用zfs
或btrfs
docker存储驱动程序。但是您最好知道如何管理这些文件系统。如果您想从快照中受益,请仅使用这些选项。
在我的容器中执行ls -lrt时,我确实看到所有目录都不具有非root用户的写许可权。由于我以非root用户身份运行容器,因此不确定如何将应用程序数据存储在容器中。
在您的Dockerfile中,只需使用RUN chown <your user> <location>
。
答案 1 :(得分:0)
将数据写入容器的可写层,并将更改提交给具有不同标签(OR)的图像,并使用相同的容器名称启动容器。
例如:启动一个Ubuntu容器并将一些数据写入文件。
$ docker run --name elastic_spence -it ubuntu /bin/bash
root@5f4a60fb6348:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@5f4a60fb6348:/# mkdir data
root@5f4a60fb6348:/# cd data
root@5f4a60fb6348:/data# echo "Sample text" > data.txt
root@5f4a60fb6348:/data# ls -lrth
total 4.0K
-rw-r--r-- 1 root root 12 Apr 9 17:06 data.txt
root@5f4a60fb6348:/data# cat data.txt
Sample text
root@5f4a60fb6348:/data#
停止容器并使用相同的名称启动容器。
$ docker start elastic_spence
elastic_spence
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f4a60fb6348 ubuntu "/bin/bash" 2 minutes ago Up 3 seconds elastic_spence
上一个会话中创建的文件已保留,并且在新会话中可用。
$ docker exec -it 5f4a60fb6348 /bin/bash
root@5f4a60fb6348:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@5f4a60fb6348:/# cd data/
root@5f4a60fb6348:/data# ls -lrth
total 4.0K
-rw-r--r-- 1 root root 12 Apr 9 17:06 data.txt
root@5f4a60fb6348:/data# cat data.txt
Sample text
root@5f4a60fb6348:/data#
此外,您可以将容器更改提交到新的图像,如下所示。
$ docker commit elastic_spence datastore:1.0
sha256:9fd236a965f655b86c0b17588b7c87f823caaf6cd02eafb62457576e4e02b514
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
datastore 1.0 9fd236a965f6 4 seconds ago 88.9MB
运行新图像,您将能够看到保留的数据。
$ docker run -it datastore:1.0
root@759a9a50b015:/# cat data/data.txt
Sample text