1. 程式人生 > >Docker學習(九)Volumn容器間共享資料

Docker學習(九)Volumn容器間共享資料

Docker學習(九)Volumn容器間共享資料


volume是什麼

volume在英文中是容量的意思, 在docker中是資料卷的意思,是用來儲存資料的容器

為什麼要進行資料共享

在叢集中有多臺tomcat,對於叢集中的tomcat部署的程式碼是同一份程式碼的副本,如果頁面檔案發生變化,意味著每個容器中的頁面檔案都要進行更新,在大規模的叢集中這樣的工作量會被無限放大,這時候就需要用到資料共享解決此問題,所謂資料共享指的是多個容器共享一個數據副本,在docker環境中我們該如何實現?

資料共享原理

在宿主機的硬碟上開闢一個空間,用來存放共享的資料,多個容器共享這個目錄

實現資料共享的解決方案

說到資料共享我們其實很容易想到linux中的mount命令,通過掛載一共享目錄來

  • [x] 使用引數 -v 宿主機目錄:/容器內容目錄 將共享的檔案放在宿主機的某個檔案中,然後多個容器之前共享這一個目錄,實現資料共享,這需要在啟動時

  • [x] 使用引數 -v 宿主機目錄:/容器內容目錄共享容器掛載宿主機共享目錄,然後通過掛載共享容器實現資料共享

容器直接掛載共享目錄

資源列表

準備2個tomcat容器:
tomcat8000 tomcat8001

詳細步驟

  1. 建立共享資料
    建立共享目錄:mkdir -p /usr/local/docker/volumn/pages/
    在共享目錄中增加共享檔案: index.html,內容如下

    我是一個volumn 共享目錄 albk!
  2. 建立tomcat8000tomcat8001

    docker run -d --name tomcat8000 -p 8000:8080 -v /usr/local/docker/volumn:/usr/local/tomcat/webapps tomcat

    docker run -d --name tomcat8001 -p 8001:8080 -v /usr/local/docker/volumn:/usr/local/tomcat/webapps tomcat

    啟動容器時將宿主機的/usr/local/docker/volumn目錄,掛載到tomcat容器的/usr/local/tomcat/webapps 這個目錄,這樣就可以實現資料共享

  3. 驗證容器是否正常啟動
    docke ps

docker exec -it a05a987b6da0 /bin/bash
檢視一下webapps目錄下,是否掛載成功

  1. 瀏覽器訪問
    http://宿主機ip:8000/pages/index.html
    http://宿主機ip:8001/pages/index.html

  1. 修改共享檔案
    echo "我是一個volumn 共享目錄 albk! 被修改了" > index.html
  2. 瀏覽器再次驗證

可以看到我們修改的內容,已經實時生效了,不需要重新部署tomcat容器,但是這樣實現每次容器啟動的時候,引數會很長,很容易出錯,在叢集較小的時候可以這樣,但是規模大的時候,這也是不少的工作量,下面我們看一下另一種方法

共享容器掛載

  • 建立一個共享容器 webpages,通過上述的方法,使用-v 掛載共享目錄
    docker create --name webpages -v /usr/local/docker/volumn/pages:/usr/local/tomcat/webapp tomcat /bin/true
  • 掛載共享容器

    docker run --name tomcat8000 -d -p 8000:8080 --volumes-from webpages tomcat
    docker run --name tomcat8001 -d -p 8001:8080 --volumes-from webpages tomcat

    驗證過程和上面的一樣,容器webpages實際作用就是定義了一個掛載點,修改內容的時候,只需要修改共享容器的共享目錄即可

總結

如果容器少的話用-v 如果容器多的話, 可以使用-volumes-from 本質與-v是一樣的,具體使用哪個根據實際情況而定

寫在最後

相關文章會首發公眾號,可以關注公號albk,關注後可以獲取大量學習視訊

期望熱愛技術的你一起來交流,獲取最新資料和學習資源,可以關注公眾號albk, 個人部落格 !