docker數據管理

數據持久化,多個容器間進行數據共享,涉及到的數據管理操縱。前端

數據卷:容器內數據直接映射到本地主機環境python

數據卷容器:用特定容器維護數據卷web

在容器內建立數據卷,把本地目錄掛載到容器內數據卷中。使用數據卷容器在主機、容器和容器之間共享數據,並實現數據的備份和恢復。docker

數據卷 特殊目錄,將主機系統目錄映射進容器,相似於mount操做。特性:容器之間共享和重用,傳遞數據高效方便;卷內數據修改當即生效;數據卷更新不會影響鏡像,解耦了應用和數據;卷會一直存在,直到沒有容器使用,能夠安全卸載。ubuntu

docker run時,用-v能夠在容器內建立數據卷,屢次使用建立多個卷。 使用training/webapp鏡像建立一個web容器,並建立一個數據卷掛載到容器的/webapp 目錄:docker run -d -P --name web -v /webapp training/webapp python app.py 其中-P將容器服務暴露的端口,是自動映射到本地主機的臨時端口。安全

推薦方式:掛載一個主機目錄做爲數據卷。docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 將主機上的src/webapp目錄加載到容器的/opt/webapp目錄。能夠放到本地目錄文件在容器中測試。默認權限rw,能夠指定爲ro。docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp:ro python app.pybash

數據卷容器。多個容器之間共享持續的更新。是一個供其餘容器掛載的容器。 docker run -it -v /dbdata --name dbdata ubuntu:14.04 建立數據卷容器dbdata,並建立數據卷掛載到/dbdata網絡

其餘容器掛載dbdata中的數據卷。docker run -it --volumes-from dbdata --name db1 ubuntu:14.04事實證實,確實同步改變。本機沒有dbdata文件夾。--volumes-from掛載的數據卷容器自身並不須要保持運行狀態。app

刪除數據卷要在刪除最後一個掛載它的容器時使用docker rm -v 命令指定同時刪除關聯的容器。webapp

使用數據卷容器來遷移數據 對其中的數據卷備份、恢復,實現數據的遷移。

備份:docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:14.04 tar cvf /backup/backup.tar /dbdata 容器啓動後將/dbdata下的內容備份爲容器內的/backup/backup.tar。

恢復:建立帶數據卷的容器dbdata2 .docker run -it -v /dbdata --name dbdata2 ubuntu:14.04 /bin/bash。建立新的容器,掛在dbdata2的容器,使用untar解壓備份文件目標容器中docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu:14.04 tar xvf /backup/backup.tar /dbdata

數據獨立於容器。

端口映射與容器互聯 多個服務組件容器共同協做,須要多個容器之間可以互相訪問到對方的服務。 除了網絡訪問外,docker提供了兩個很方便的的功能來知足服務訪問的基本需求:容許映射容器內應用服務端口到本地宿主主機;互聯機制實現多個容器間經過容器名來快速訪問。兩個很實用的功能。

端口映射實現訪問容器 1.從外部訪問容器應用。須要指定對應參數。-p或-P指定端口映射。-P會隨機映射一個49000到49900的端口到內部容器開放的網絡端口。如:docker run -d -P training/webapp python app.py 而後docker ps -a 出現0.0.0.0:49100->5000/tcp 說明本地主機49100被映射到了容器的5000端口。 經過訪問宿主機的49100端口就能夠訪問容器內的web頁面。經過docker logs -f name能夠查看應用的信息。 -p能夠指定要映射的端口,而且在一個指定端口上只能綁定一個容器。格式爲ip:hostport:containerport|ip::containerport|hostport:containerport.

屢次使用-p能綁定多個端口。 如docker run -d -p 5000:5000 training/webapp python app.py 和docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py 和docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py 和docker run -d -p 127.0.0.1::5000 training/webapp python app.py 和docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

查看當前端口映射配置docker port name 5000 容器有本身的內部網絡和ip地址,用docker inspect 容器id 能看到具體信息

能夠同時運行多個容器。有個問題,只能在docker run建立的時候指定端口嗎?已有容器添加指定端口行嗎?

互聯網機制實現便捷互訪。 多個容器中應用進行快速交互。在源和接收容器之間建立鏈接關係,接收容器經過容器名快速訪問到源容器,而不用指定具體ip。

自定義容器命名。--name 參數。查看 docker ps -a 和docker inspect -f "{{.name}}" id 容器名稱是惟一的。docker run時添加--rm標記,容器終止後會當即刪除。--rm和-d不能同時使用。

容器互聯。--link參數。如docker run -d --name db training/postgres如docker run -d -P --name web --link db:db training/webapp python app.py 這樣web就和db創建互聯關係。--link name:alias 。name是容器名,alias是鏈接的別名。 查看鏈接狀況docker ps -a看到name列有db,web/db。表示web容器鏈接到db容器,容許web容器訪問db容器的信息。

創建了虛擬通道,不用映射端口的虛擬通道。db創建時沒有指定端口,不用暴露db到網絡平臺上。

能夠多個web容器鏈接到同一個db容器上。

dcoker兩種方式公開鏈接信息:更新環境變量和更新/etc/hosts文件。 cat /etc/hosts能夠看到ip和容器名的對應,ping名稱能夠解析ip。

相關文章
相關標籤/搜索