卷(volumes) 和 繫結掛載(bind mounts) 允許您在主機和容器之間共享檔案,這樣即使在容器停止後也可以持久儲存資料。
如果在 Linux 上執行 Docker,那麼還有第三種選擇:tmpfs
掛載。當您建立帶有 tmpfs
掛載的容器時,容器可以在容器的可寫層之外建立檔案。
與卷和繫結掛載不同,tmpfs
掛載是臨時的,只存留在主機記憶體中。當容器停止時,tmpfs
掛載將被刪除,在那裡寫入的檔案不會被持久化。
這對於臨時儲存您不想在主機或容器可寫層中持久儲存的敏感檔案非常有用。
tmpfs 掛載的侷限性
- 不同於卷和繫結掛載,不能在容器之間共享
tmpfs
掛載。 - 這個功能只有在 Linux 上執行 Docker 時才可用。
選擇 --tmpfs
或 --mount
標記
最初,--tmpfs
標記用於獨立容器,--mount
標記用於叢集服務。但是從 Docker 17.06 開始,您還可以將 --mount
與獨立容器一起使用。通常,--mount
標記表達更加明確和冗長。最大的區別是,--tmpfs
標記不支援任何可配置的選項。
--tmpfs
: 設定tmpfs
掛載不允許您指定任何可配置選項,並且只能與獨立容器一起使用。--mount
:由多個鍵-值對組成,,每個鍵-值對由一個<key>=<value>
元組組成。--mount
語法比--tmpfs
更冗長:- 掛載的型別(
type
),可以是bind
、volume
或者tmpfs
。本主題討論tmpfs
,因此型別(type
)始終為tmpfs
。 - 目標(
destination
),將容器中tmpfs
掛載設定的路徑作為其值。可以用destination
、dst
或者target
來指定。 tmpfs-size
和tmpfs-mode
選項。請檢視下文的 指定 tmpfs 選項。
- 掛載的型別(
下面的示例儘可能同時展示 --mount
和 --tmpfs
兩種語法,並且先展示 --mount
。
--tmpfs
和 --mount
行為之間的差異
--tmpfs
標記不允許指定任何可配置選項。--tmpfs
標記不能用於叢集服務。對於叢集服務,您必須使用--mount
。
在容器中使用 tmpfs 掛載
要在容器中使用 tmpfs
掛載, 請使用 --tmpfs
標記, 或者使用帶有 type=tmpfs
和 destination
選項的 --mount
標記。沒有用於 tmpfs
掛載的源(source
)。
下面的示例在 Nginx 容器中的 /app
建立一個 tmpfs
掛載。第一個例子使用 --mount
標記,第二個使用 --tmpfs
標記。
--mount
:
$ docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app \
nginx:latest
--tmpfs
:
$ docker run -d \
-it \
--name tmptest \
--tmpfs /app \
nginx:latest
通過執行 docker container inspect tmptest
來驗證掛載是否是 tmpfs
掛載,檢視 Mounts
部分:
"Tmpfs": {
"/app": ""
},
刪除容器:
$ docker container stop tmptest
$ docker container rm tmptest
指定 tmpfs 選項
tmpfs
掛載允許兩個配置選項,兩個選項都不是必需的。 如果需要指定這些選項,則必須使用 --mount
標記,因為 --tmpfs
標記不支援。
選項 | 描述 |
---|---|
tmpfs-size |
tmpfs 掛載的大小(以位元組為單位)。預設無限制。 |
tmpfs-mode |
tmpfs 的八進位制檔案模式。例如,700 或 0770 。預設為 1777 或全域性可寫。 |
下面的示例將 tmpfs-mode
設定為 1770
,因此在容器中它不是全域性可讀的。
docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
nginx:latest