這一集下先從一張圖開始 html
這張圖來自於 docker 官方,主要描述了主機和 docker 間的數據溝通的 3 種方式。分別是 bind mount、volume、tmpfs mount。此次主要學習前兩種方式。讓咱們開始吧~nginx
如下內容摘抄自 docker 官方文檔 程序員
咱們知道默認狀況下,在容器內建立的全部文件都存儲在可寫容器層上,這意味着:docker
經過上面的內容告訴咱們,不要在容器內容寫入數據,而要使用 volume。 瀏覽器
那麼數據卷是怎麼存儲數據的呢?bash
docker 默認在主機上會有一個特定的區域 /var/lib/docker/volumes/ (Linux),該區域用來存放 volume。
// 建立一個 volume 名爲 my-data $ docker volume create my-data my-data // 建立一個 名爲 nginx1 的 nginx 容器並使用 my-data 爲 nginx 的主目錄 $ docker run -d -p 8080:80 --name nginx1 --mount source=nginx-data,target=/usr/share/nginx/html nginx 814dea34b7dbf2afd724d12ad50254e2a749f0b65684f04c730ac04181857d04 // 查看容器的狀態 $ docker container ls --format "table {{.Image}}t{{.ID}}t{{.Status}}t{{.Names}}" IMAGE CONTAINER ID STATUS NAMES nginx 814dea34b7db Up 3 minutes nginx1 // 進入 nginx1 容器 $ docker exec -it nginx1 bash // 修改 index.html 內容爲 hello world # echo hello world > /usr/share/nginx/html/index.html // 訪問 http://127.0.0.1:8080 咱們能夠看到 hello world 頁面 // 刪除 nginx1 容器 $ docker rm -f nginx1 // 建立一個 名爲 nginx2 的 nginx 容器也使用 my-data 爲 nginx 的主目錄 $ docker run -d -p 8080:80 --name nginx2 --mount source=nginx-data,target=/usr/share/nginx/html nginx // 訪問 http://127.0.0.1:8080 咱們也能夠看到 hello world 頁面(數據共享)
經過上面的實例咱們知道了:性能
bash docker volume ls
bash docker volume create [卷名稱]
bash docker volume inspect <卷名稱>
bash docker volume rm <卷名稱>
bash docker volume prune
在查看網上的各類資料的時候發現有人用 -v 參數而有的人又用 --mount 參數,爲了確認他們之間的區別我特地查了一下 docker 官網,如今把內容放出來
上面的內容主要講述的是 local 驅動下的 volume,實際上 volume 還可使用其餘的驅動,這裏先記錄一下,後面在在繼續學習。學習
該方式其實是將主機上的一個目錄映射到容器中的一個目錄。(使用過虛擬機的朋友應該比較熟悉)
若是將空文件或目錄掛載到容器,容器中的該目錄又有文件,那麼,這些文件將會被複制到主機上的目錄中。若是將非空的文件或目錄掛載到容器,容器中的該目錄也有文件,那麼,容器中的文件將會被隱藏。spa
// 在主機上建立一個 my-data 目錄 $ mkdir ~/my-data // 建立一個 名爲 nginx3 的 nginx 容器並掛載 my-data 爲 nginx 的主目錄 $ cd ~ $ docker run -d -p 8080:80 --name nginx3 --mount type=bind,source="$(pwd)"/my-data,target=/usr/share/nginx/html nginx // 在 my-data 目錄中建立 index.html 並寫入內容 $ touch my-data/index.html $ echo hello bind type > my-data/index.html // 使用瀏覽器訪問 http://127.0.0.1:8080 能夠正常顯示 hello bind type // 查看 nginx3 容器的詳情,注意 mounts 部分,很清晰的顯示了綁定的關係 $ docker inspect nginx3 ...... "Mounts":[ { "Type":"bind", "Source":"/Users/cc/my-data", "Target":"/usr/share/nginx/html" } ] ......
tmpfs,僅存儲在主機系統的內存中,不會寫入主機的文件系統。
這一集下先從一張圖開始
code
這張圖來自於 docker 官方,主要描述了主機和 docker 間的數據溝通的 3 種方式。分別是 bind mount、volume、tmpfs mount。此次主要學習前兩種方式。讓咱們開始吧~
如下內容摘抄自 docker 官方文檔
咱們知道默認狀況下,在容器內建立的全部文件都存儲在可寫容器層上,這意味着:
經過上面的內容告訴咱們,不要在容器內容寫入數據,而要使用 volume。
那麼數據卷是怎麼存儲數據的呢?
docker 默認在主機上會有一個特定的區域 /var/lib/docker/volumes/ (Linux),該區域用來存放 volume。
// 建立一個 volume 名爲 my-data $ docker volume create my-data my-data // 建立一個 名爲 nginx1 的 nginx 容器並使用 my-data 爲 nginx 的主目錄 $ docker run -d -p 8080:80 --name nginx1 --mount source=nginx-data,target=/usr/share/nginx/html nginx 814dea34b7dbf2afd724d12ad50254e2a749f0b65684f04c730ac04181857d04 // 查看容器的狀態 $ docker container ls --format "table {{.Image}}t{{.ID}}t{{.Status}}t{{.Names}}" IMAGE CONTAINER ID STATUS NAMES nginx 814dea34b7db Up 3 minutes nginx1 // 進入 nginx1 容器 $ docker exec -it nginx1 bash // 修改 index.html 內容爲 hello world # echo hello world > /usr/share/nginx/html/index.html // 訪問 http://127.0.0.1:8080 咱們能夠看到 hello world 頁面 // 刪除 nginx1 容器 $ docker rm -f nginx1 // 建立一個 名爲 nginx2 的 nginx 容器也使用 my-data 爲 nginx 的主目錄 $ docker run -d -p 8080:80 --name nginx2 --mount source=nginx-data,target=/usr/share/nginx/html nginx // 訪問 http://127.0.0.1:8080 咱們也能夠看到 hello world 頁面(數據共享)
經過上面的實例咱們知道了:
bash docker volume ls
bash docker volume create [卷名稱]
bash docker volume inspect <卷名稱>
bash docker volume rm <卷名稱>
bash docker volume prune
在查看網上的各類資料的時候發現有人用 -v 參數而有的人又用 --mount 參數,爲了確認他們之間的區別我特地查了一下 docker 官網,如今把內容放出來
上面的內容主要講述的是 local 驅動下的 volume,實際上 volume 還可使用其餘的驅動,這裏先記錄一下,後面在在繼續學習。
該方式其實是將主機上的一個目錄映射到容器中的一個目錄。(使用過虛擬機的朋友應該比較熟悉)
若是將空文件或目錄掛載到容器,容器中的該目錄又有文件,那麼,這些文件將會被複制到主機上的目錄中。若是將非空的文件或目錄掛載到容器,容器中的該目錄也有文件,那麼,容器中的文件將會被隱藏。
// 在主機上建立一個 my-data 目錄 $ mkdir ~/my-data // 建立一個 名爲 nginx3 的 nginx 容器並掛載 my-data 爲 nginx 的主目錄 $ cd ~ $ docker run -d -p 8080:80 --name nginx3 --mount type=bind,source="$(pwd)"/my-data,target=/usr/share/nginx/html nginx // 在 my-data 目錄中建立 index.html 並寫入內容 $ touch my-data/index.html $ echo hello bind type > my-data/index.html // 使用瀏覽器訪問 http://127.0.0.1:8080 能夠正常顯示 hello bind type // 查看 nginx3 容器的詳情,注意 mounts 部分,很清晰的顯示了綁定的關係 $ docker inspect nginx3 ...... "Mounts":[ { "Type":"bind", "Source":"/Users/cc/my-data", "Target":"/usr/share/nginx/html" } ] ......
tmpfs,僅存儲在主機系統的內存中,不會寫入主機的文件系統。
幫助文檔
快捷鍵
目錄
標題
文本樣式
列表
連接
代碼片
表格
註腳
註釋
自定義列表
LaTeX 數學公式
插入甘特圖
插入UML圖
插入Mermaid流程圖
插入Flowchart流程圖
插入類圖
快捷鍵
Markdown
圖標
快捷鍵
撤銷
Ctrl /⌘+Z
重作
Ctrl /⌘+Y
加粗
Ctrl /⌘+B
斜體
Ctrl /⌘+I
標題
Ctrl /⌘+Shift +H
有序列表
Ctrl /⌘+Shift +O
無序列表
Ctrl /⌘+Shift +U
待辦列表
Ctrl /⌘+Shift +C
插入代碼
Ctrl /⌘+Shift +K
插入連接
Ctrl /⌘+Shift +L
插入圖片
Ctrl /⌘+Shift +G
查找
Ctrl /⌘+F
替換
Ctrl /⌘+G
Markdown 2987 字數 117 行數 當前行 1, 當前列 0
HTML 2491 字數 73 段落