docker默认安装路径的调整
docker 的镜像与容器都存储在 /var/lib/docker 下面,那么基于不同的系统又有不同的存储方式,在 ubuntu 下面存储方式为 AUFS;在 Centos 下面存储方式又是 device mapper。
/var文件系统
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充的。原来/var目录中有些内容是在/usr中的,但为了保持/usr目录的相对稳定,就把那些需要经常改变的目录放到/var中了。每个系统是特定的,即不通过网络与其他计算机共享。下面列出一些重要的目录(一些不太重要的目录省略了)。
1. /var/catman 包括了格式化过的帮助(man)页。帮助页的源文件一般存在/usr/man/man中;有些man页可能有预格式化的版本,存在/usr/man/cat中。而其他的man页在第一次看时都需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了。(/var/catman 经常被清除,就像清除临时目录一样。)
2. /var/lib 存放系统正常运行时要改变的文件。
3. /var/local 存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
4. /var/lock 锁定文件。许多程序遵循在/var/lock 中产生一个锁定文件的约定,以用来支持他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文件。
5. /var/log 各种程序的日志(log)文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不确定地增长,应该定期清除。
6. /var/run 保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登录的用户的信息。
7. /var/spool 放置“假脱机(spool)”程序的目录,如mail、news、打印队列和其他队列工作的目录。每个不同的spool在/var/spool下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。
8. /var/tmp 比/tmp 允许更大的或需要存在较长时间的临时文件。注意系统管理员可能不允许/var/tmp 有很旧的文件。
二:镜像查找
一、在image文件夹中寻找
1.找到镜像库的文件
首先看repositories.json中的数据
root@ubuntu:/var/lib/docker#cat /var/lib/docker/image/aufs/repositories.json | python -mjson.tool
{
"Repositories": {
"ubuntu": {
"ubuntu:14.04":"sha256:4a2820e686c449bc943eab8492df4b4eb7f7e8fabda5258d7bc551fec5790436",
"ubuntu@sha256:5faf6cb681da2be979a177b60d8c18497f962e3d82268c49db6c74008d0c294d":"sha256:4a2820e686c449bc943eab8492df4b4eb7f7e8fabda5258d7bc551fec5790436"
}
}
}
看看,是不是正好和docker images的内容一致呢
root@ubuntu:/var/lib/docker#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 4a2820e686c4 3 weeks ago 188 MB
2.找到镜像描述文件
/var/lib/docker/image/aufs/imagedb/content/sha256/4a2820e686c449bc943eab8492df4b4eb7f7e8fabda5258d7bc551fec5790436
是一个json文件我们只截取了部分:
"rootfs":{
"type": "layers",
"diff_ids": [
"sha256:9669d6b7338336d92ca8e8e5bb90a4a35a934d1c94017322bef35a838615b4ea",
"sha256:f5cfc06b640d49f4e5b0778531394ed4819d8824c46cbc21481f5531db35d970",
"sha256:768dcfe5d05fd2355facaacaf64a45e84ac4c6b895f335ee02f322a35e912d80",
"sha256:d0757a6730d0f8242d131bdb86df046fbd5eb6e3a04328aa10e8881166101a94",
"sha256:d649a240e4537a905c43c0f9fd7bfa3f3cbe693b963e838eb6e84065b57aae3d"
]
}
3.找到镜像文件的layerdb
root@ubuntu:/var/lib/docker#ls /var/lib/docker/image/aufs/layerdb/sha256
76f1e34d1d2f369222db0aababcfe88a86e7773289ee479aa8a37db2dbc1ae78
7bb5a611d10e491eda648224aeb1466d7e7c99b4dc73c30acf01f303159e7405
9669d6b7338336d92ca8e8e5bb90a4a35a934d1c94017322bef35a838615b4ea
c872fbb3ed98d37a6abeebcfa16316bde7adafafabb8c7ff66a1ba53aa29f0bc
ddc772e5acb244ff1a1ddc32c6fbe5687b68c26090ce85e1855022ac6afcefbc
查看文件夹中文件
root@ubuntu:/var/lib/docker#ls /var/lib/docker/image/aufs/layerdb/sha256/9669d6b7338336d92ca8e8e5bb90a4a35a934d1c94017322bef35a838615b4ea/
cache-id diff size tar-split.json.gz
查看cache-id中内容:
b1c8bba6bd247accbc8082a4c46aa129e2b6489bd9bffe08387e50b43a08e1cd
二、在aufs文件夹中寻找
cache-id中数据对应aufs/diff文件夹下一个文件
root@ubuntu:/var/lib/docker#ls /var/lib/docker/aufs/diff
045a5f72741ab97228e00f1c8bd7d67b682e12c30def9efec769188e1deb9a56
8444bf1d9f50bf52f649d6e27d94a1fad34e7022e1ae27396b02cafaeb4d37bc
b1c8bba6bd247accbc8082a4c46aa129e2b6489bd9bffe08387e50b43a08e1cd
caba5c4f6a8438d54f4045d06afe9d06ad6c44d7db5bf355d36a18c0fd29d5d3
d04b500544d2efcb8e7e5feb8d37c405360fc9807f272c93eb3fd8cd735a13c5
我们看一下b1c8bba6bd247accbc8082a4c46aa129e2b6489bd9bffe08387e50b43a08e1cd中内容
root@ubuntu:/var/lib/docker#ls/var/lib/docker/aufs/diff/b1c8bba6bd247accbc8082a4c46aa129e2b6489bd9bffe08387e50b43a08e1cd/
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
docker镜像的存储路径为/var/lib/docker/aufs/
三:数据挂载到其它位置
Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把docker的数据挂载到数据盘,例如:/dev/vdb目录下。
[root@10-10-63-106 docker]# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 20G 3.8G 16G 20% /
devtmpfs devtmpfs 916M 0 916M 0% /dev
tmpfs tmpfs 921M 0 921M 0% /dev/shm
tmpfs tmpfs 921M 43M 878M 5% /run
tmpfs tmpfs 921M 0 921M 0% /sys/fs/cgroup
/dev/vdb xfs 100G 11G 90G 11% /data
其中主要的步骤如下:
(1) 首先,备份fstab文件
sudo cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
(2) 停止docker, 用rsync同步/var/lib/docker到新位置.
如果rsync没有安装,则使用yum -y intall rsync 进行安装,停止docker ,service docker stop,在数据分区中建立要挂载的目录,mkdir /data/docker 使用rsync工具同步,rsync -aXS /var/lib/docker/. /data/docker/,这可能需要花费的较长的时间,取决于/var/lib/docker的大小,
(3) 修改fstab
在该文件中把下面一行添加到fstab里,将新位置挂载到 /var/lib/docker
/data/docker /var/lib/docker none bind 0 0
文件的内如如下:
[root@10-10-63-106 docker]# cat /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Jul 31 07:50:13 2014
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/vda1 / xfs errors=remount-ro 0 1
/swapfile none swap defaults 0 0
/data/docker /var/lib/docker none bind 0 0
(4) 重新挂载
mount –a
(5) 使用下面的命令检查一下
df /var/lib/docker/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vdb 104806400 47204 104759196 1% /var/lib/docker
(6)进入容器查看我们的空间
bash-4.1# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 9.8G 1.4G 7.9G 15% /
tmpfs tmpfs 921M 0 921M 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/vdb xfs 100G 2.1G 98G 3% /etc/resolv.conf
/dev/vdb xfs 100G 2.1G 98G 3% /etc/hostname
/dev/vdb xfs 100G 2.1G 98G 3% /etc/hosts
tmpfs tmpfs 921M 0 921M 0% /run/secrets
tmpfs tmpfs 921M 0 921M 0% /proc/kcore
没有更改/var/lib/docker路径之前的情况:
bash-4.1# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 9.8G 1.4G 7.9G 15% /
tmpfs tmpfs 921M 0 921M 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/vda1 xfs 20G 13G 6.9G 66% /etc/resolv.conf
/dev/vda1 xfs 20G 13G 6.9G 66% /etc/hostname
/dev/vda1 xfs 20G 13G 6.9G 66% /etc/hosts
tmpfs tmpfs 921M 0 921M 0% /run/secrets
tmpfs tmpfs 921M 0 921M 0% /proc/kcore
宿主机中的分区大小信息:
[root@10-10-63-106 ~]# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 20G 13G 6.9G 65% /
devtmpfs devtmpfs 916M 0 916M 0% /dev
tmpfs tmpfs 921M 0 921M 0% /dev/shm
tmpfs tmpfs 921M 89M 832M 10% /run
tmpfs tmpfs 921M 0 921M 0% /sys/fs/cgroup
/dev/vdb xfs 100G 33M 100G 1% /data