最初,Docker 被設計出來的時候,它的核心思想是輕量和速度。畢竟,一個容器就是一個輕量級的虛擬機,只包含必要的軟件和運行時,沒有多余的代碼或資源。然而,這種輕量的特性也帶來了一些挑戰,尤其是在儲存方面。
一般來說,Docker 容器的存儲是不可變的,即使一個容器被修改了,它也只是在原有的存儲層之上創建了一個新的存儲層。這就意味著,容器所需的空間是有限的,當容器運行時,如果它們需要使用大量的儲存空間,可能會導致它們無法正常運行。
為了解決這個問題,在 Docker 1.10 版本中,增加了一種新的存儲驅動程序,稱為 devicemapper。通過它,Docker 支持了使用大容量硬盤,以便在容器中使用時,能夠滿足其大量儲存的需求。
使用 devicemapper 驅動程序,需要創建一個磁盤映射池(thin pool),用于存儲容器的數據。在創建池子之后,可以為它定義一些存儲卷,可以用于容器的持久化存儲。池子可以在多個物理硬盤或分區中創建,以提高容器的數據持久化能力。
# 在創建磁盤映射池的時候,可以指定多個物理設備: $ sudo lvcreate -L 100G -n thin-pool docker-data $ sudo lvcreate -L 100G -n thin-pool2 docker-data2 # 然后,創建兩個磁盤卷,一個映射到上面創建的 thin-pool 上,另一個映射到 thin-pool2 上: $ sudo lvcreate -V 50G --thin-pool docker-data/thin-pool -n thin-vol1 $ sudo lvcreate -V 50G --thin-pool docker-data2/thin-pool2 -n thin-vol2 # 然后,將卷掃描到 Docker 所在的機器: $ sudo lvscan # 最后,將卷添加到 Docker 的配置文件中: $ echo "thinpool: /dev/mapper/docker-data-thinpool" >>/etc/docker/daemon.json $ systemctl restart docker.service
實現這種思路,需要注意磁盤空間、IOPS 和延遲等因素,尤其是在大容量設備上。同時,在使用 devicemapper 驅動程序時,還需要定期清理磁盤映射池,以保證池子的空間利用率。
總之,大容量硬盤是 Docker 存儲的重要因素之一,通過使用 devicemapper 驅動程序,可以增加容器的存儲空間,以適應容器所需的大小和性能。