因此,我对Docker还是相当陌生,但仍在尝试了解一些基本知识。目前,我有两个docker映像:
[root:kali:~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kalilinux/kali-linux-docker latest 5e4d6c84829d About an hour ago 9.57GB
kalilinux/kali-linux-docker <none> f26f3ae90aee 2 months ago 1.57GB
无论出于何种原因,第一个带有latest
标记的标记都是另一个标记的子标记。假设带有latest
标签的容器是我提交更改的容器。
但是,现在我试图提交/保存对此图像的更改,但是出现以下错误:
守护程序的错误响应:处理tar文件时出错(退出状态1): 写入/usr/lib/x86_64-linux-gnu/libclang-7.so.1:上没有剩余空间 设备
我检查了磁盘空间,看起来我有4GB可用空间:
[root:kali:~]# df -h
Filesystem Size Used Avail Use% Mounted on
udev 481M 0 481M 0% /dev
tmpfs 99M 944K 98M 1% /run
/dev/vda1 25G 20G 4.1G 83% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
/dev/loop0 88M 88M 0 100% /snap/core/5662
/dev/loop1 67M 67M 0 100% /snap/lxd/9239
tmpfs 99M 0 99M 0% /run/user/0
overlay 25G 20G 4.1G 83% /var/lib/docker/overlay2/b2178e65852a017f21124a23d63e32a66faaa8b8375429865e8433da9fc0db20/merged
shm 64M 0 64M 0% /var/lib/docker/containers/af2d2ed99d91d2247f550a23af988ce4a624e186ac80782046f0868418547d3d/mounts/shm
/dev/loop2 90M 90M 0 100% /snap/core/6130
/dev/loop3 52M 52M 0 100% /snap/lxd/9795
这是我的问题:
docker commit
命令实际上是在尝试复制容器吗?还是只是简单地保存它?我之所以提出这个问题,是因为我只剩下4GB的空间,但是我却完全按照自己的意愿拥有了图像,所以为什么不保存呢? 我每次运行commit都会需要额外的9GB空间吗?
如果可以的话,尽量避免关闭VPS并增加其磁盘空间。
感谢您的帮助。
答案 0 :(得分:1)
据我所知,无法合并图像,但是可以删除它们。 每次提交都会增加图像的大小。您可以使用以下方法查看图像的图层及其大小:
docker history <image name>
您可以使用Dockerfile并从头开始构建要使用的映像,而不是使用旧映像。生成有时会花费较长的时间,但是您应该找到一种自动生成图像的方法,以便能够将其重复用于生产。如果您从头开始构建图像,并使用一些经过验证的图像,则将免费获得新的修补版本。在Dockerfile中,您最多可以包含125层,这意味着您应该使用尽可能少的RUN命令,并以linux / unix表示法将它们链接起来。
RUN apt-get update -y && apt-get install -y \
ansible \
openssh-client \
vim \
wget