筆記:Docker 從入門到實踐-2

Docker數據管理 

docker容器中產生的數據在容器關閉後會被清除,下次容器啓動時會恢復到鏡像初始狀態。如何保存容器中創建的數據? docker 提供了兩種方法可以把在容器運行中產生的數據保存到宿主機的文件系統中。

第一種:數據卷。

當啓動一個容器時可以mount 數據卷(一個宿主機的目錄或者文件)到容器中,容器中產生的數據可以保存在數據卷中。

掛載一個宿主機目錄作爲數據卷:

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro  training/webapp python app.

-v 參數用來加載數據卷,上面的命令中把宿主機的目錄/src/webapp掛載到創建的容器的/opt/webapp目錄下。

:ro 表示掛載的數據卷是read only的,默認的權限是wr讀寫。

 

掛載一個宿主機文件作爲數據卷:

docker run -rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

文件.bash_history 如果被某些工具修改了inode,docker會報告錯誤。

 

volume 對象

docker volume create myvolume #創建一個名爲myvolume的數據卷對象。

docker volumen ls # 列出數據卷對象

docker volume rm myvolume #刪除指定的數據卷

dokcer volume inspect myvolume #查看數據卷的詳細信息

docker run --name testcontainer -d -v myvolume:/usr/share #創建一個容器把數據卷myvolume掛載到容器的/usr/share目錄。 

第二種:數據卷容器

創建並掛在數據捲到一個命名的容器(如上文),這個命名容器被稱爲數據卷容器。 其他的容器可以通過指定這個數據卷容器來實現掛載數據卷。掛載同一數據卷容器的容器共享數據卷。

docker run -d --v /dbdata --name dbdata training/postgres echo Data-only container.

其他的容器使用--volume-from 參數引用這個容器,實現對數據卷的訪問。

docker run -d --volumes-from dbdata --name db1 training/postgres

docker run -d --volumes-from dbdata --name db2 training/postgres

 

容器互聯

每個容器相當與一個簡裝linux OS,容器之間是隔離的,容器互聯可以容器對另一個容器的訪問。

下面先創建一個新的數據庫容器。
docker run -d --name db training/postgres
 

然後創建一個新的 web 容器,並將它連接到 db 容器
docker run -d -P --name web --link db:db training/webapp python app.py
 

--link 參數的格式爲 --link name:alias ,其中 name 是要鏈接的容器的名稱, alias 是這個連接的別名。

建立容器互聯以後,在發起連接的容器中會建立一系列的環境變量:以鏈接的別名(--link參數中指定)爲前綴。

DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5000_TCP=tcp://172.17.0.5:5432
DB_PORT_5000_TCP_PROTO=tcp
DB_PORT_5000_TCP_PORT=5432
DB_PORT_5000_TCP_ADDR=172.17.0.5

發起連接的容器的 /etc/hots 文件中會添加指向被鏈接的容器的條目:

172.17.0.7 aed84ee21bde:localhost
. . .
172.17.0.5 db #被鏈接的容器ip:別名
 

可以通過Ping 命令來檢查聯通性。

ping db

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章