MacOSX下docker镜像文件压缩

MacOSX docker image files shrink

作者 Haijian.Zeng 日期 2017-07-18
MacOSX下docker镜像文件压缩

MacOSX下查看docker虚拟机镜像

  • MacOSX下的docker默认使用的是HyperKit而不是Virtualbox,默认的HyperKit的虚拟机镜像文件位于:

$ ls -al ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux
total 13871424
drwxr-xr-x 22 cookeem staff 748 7 17 18:32 .
drwxr-xr-x 22 cookeem staff 748 7 17 18:09 ..
-rw-r--r-- 1 cookeem staff 7101349888 7 17 18:32 Docker.qcow2
-rw-r--r-- 1 cookeem staff 65536 7 17 18:09 console-ring
-rw-r--r-- 1 cookeem staff 65536 7 14 09:35 console-ring.0
-rw-r--r-- 1 cookeem staff 65536 7 12 14:36 console-ring.1
-rw-r--r-- 1 cookeem staff 65536 6 16 09:30 console-ring.10
-rw-r--r-- 1 cookeem staff 65536 7 2 17:27 console-ring.2
-rw-r--r-- 1 cookeem staff 65536 6 30 17:24 console-ring.3
-rw-r--r-- 1 cookeem staff 65536 6 28 17:09 console-ring.4
-rw-r--r-- 1 cookeem staff 65536 6 28 11:05 console-ring.5
-rw-r--r-- 1 cookeem staff 65536 6 24 19:25 console-ring.6
-rw-r--r-- 1 cookeem staff 65536 6 22 10:59 console-ring.7
-rw-r--r-- 1 cookeem staff 65536 6 22 10:48 console-ring.8
-rw-r--r-- 1 cookeem staff 65536 6 20 16:43 console-ring.9
-rw-r--r-- 1 cookeem staff 0 10 21 2016 lock
drwxr-xr-x 66 cookeem staff 2244 5 9 10:00 log
-rw-r--r-- 1 cookeem staff 17 7 17 18:09 mac.0
-rw-r--r-- 1 cookeem staff 36 10 21 2016 nic1.uuid
-rw-r--r-- 1 cookeem staff 4 7 17 18:09 pid
-rw-r--r-- 1 cookeem staff 12925 7 17 18:10 syslog
lrwxr-xr-x 1 cookeem staff 12 7 17 18:09 tty -> /dev/ttys005

  • 可以通过直接删除~/Library/Containers/com.docker.docker/Data/Docker.qcow2释放空间

MacOSX下进行docker虚拟机空间压缩

  • MacOSX下的docker每次使用docker rmi都不会自动释放空间,必须借助walkerlee/nsenter镜像,进行虚拟机空间压缩

docker run --rm -it --privileged --pid=host walkerlee/nsenter -t 1 -m -u -i -n fstrim /var

  • 运行以上命令,会遇到以下问题:fstrim: ioctl 0xc0185879 failed: Not supported的异常问题,需要运行以下命令进行修正:

$ cd ~/Library/Containers/com.docker.docker/Data/database/
$ git checkout master
$ git reset --hard
$ mkdir -p com.docker.driver.amd64-linux/disk
$ echo 262144 > com.docker.driver.amd64-linux/disk/compact-after
$ echo 262144 > com.docker.driver.amd64-linux/disk/keep-erased
$ echo -n true > com.docker.driver.amd64-linux/disk/trim
$ git add com.docker.driver.amd64-linux/disk/compact-after
$ git add com.docker.driver.amd64-linux/disk/keep-erased
$ git add com.docker.driver.amd64-linux/disk/trim
$ git commit -s -m 'Enable on-line compaction'