1. 程式人生 > >docker預設安裝路徑的調整

docker預設安裝路徑的調整

       docker 的映象與容器都儲存在 /var/lib/docker 下面,那麼基於不同的系統又有不同的儲存方式,在 ubuntu 下面儲存方式為 AUFS;在 Centos 下面儲存方式又是 device mapper。


一:/var檔案系統

/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