docker的持久化存儲和共享存儲和網絡架構

1、持久化存儲
docker容器中一般不保存數據,只封裝系統和環境,這樣就存在一個問題,一個docker容器的數據內容不能持久化,且不能共享出來,在生產中,不能很好地提供服務。爲了解決這個問題,就要涉及到docker的持久化存儲和共享存儲的技術了。
所謂持久化,就是將真實機目錄掛載到容器中,讓容器運行時所產生的數據都寫入到真實機的目錄中,以此來提供持久存儲。

mkdir /var/webroot
docker run -d -p 80:80 -v /var/webroot:/var/www/html 192.168.1.194:5000/wang:sh2
——>-d 後臺進程
—>-p 映射端口 物理機端口:容器端口
——>-v 物理機文件夾:容器的目錄(容器中目錄如果不存在,會自動創建,如果存在,會覆蓋掉)
—>192.168.1.194:5000  遠程鏡像

2、共享存儲
現實生存環境中,一般會有專門的文件服務器或者是分佈式文件服務器集羣來提供文件的存儲,此次通過共享文件夾的方式來實現共享存儲。
(1)文件服務器提供一個nfs共享存儲==>192.168.1.254

yum -y install nfs-utils
vim /etc/exports
/webroot 192.168.1.0/24(rw,sync)
:wq
systemctl restart nfs

(2)docker主機
————mount掛載共享
mount 192.168.1.254/webroot /mnt/
——用-v選項映射磁盤到容器中。
docker run -d -p 80:80 -v /mnt:/var/www/html 192.168.1.194:5000/wang:sh2
這樣不管是在容器中寫html網頁,還是在/mnt/目錄下書寫html網頁,或者是在文件服務器的/webroot下面書寫html網頁,都可以在網頁上被訪問到。
這樣可以提供負載均衡或者是工作上的同步而不互相干擾,比如一位web編寫人員寫a網頁,另一位web編寫人員寫b網頁,不會出現相互干擾,且書寫的東西都被存儲在真實的文件服務器中。
3、Docker網絡架構
docker網絡架構中引用的是linux網橋及虛擬交換機架構,這裏的虛擬交換機默認爲docker0,也可以手工配置虛擬交換機,不過一般是讓docker服務自動配置。
(1)安裝一個網橋管理服務
[root@b2 ~]# yum -y install bridge-utils.x86_64
(2)查看虛擬交換機

[root@b2 ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242ae16e82c   no      
(虛擬交換機)                                    (網卡)//如果啓動了容器,則每一個容器會對應一張虛擬網卡

(3)斷開斷開網卡與交換機的連接,相當於拔網線
brctl delif docker0(虛擬交換機) 網卡名
(4)查看默認docker創建的網絡模型

docker network list 
[root@b2 ~]# docker network inspect c088b2c8b1e7(網橋的id)  //查看網橋的底層信息。
docker network 回車,可以看到它的幫助

(5)手動創建一個網絡虛擬交換機

docker network create [--help]
docker network create --subnet 192.168.100.0/24(子網) -d bridge(指定是網橋) -o(參數)  \
com.docker.network.bridge.name=docker1  docker1(名字)
//這樣用ifconfig看到的名字依然爲docker1
docker network ls
ifconfig

(6)啓動容器時指定用哪張網橋,不指定時用docker0
docker run -it --network=docker1 192.168.1.194:5000/wang:sh2

(7)docker會自動搭建路由器
創建的docker1用的網段是192.168.100.0網段的,docker0是172.17.0.0網段的,兩個網段之間可以相互ping通。
4、容器端口與物理主機端口綁定的原理:
底層原理是啓動了linux內核的firewalld(iptables)的端口轉發功能。
手動爲已經起來的容器綁定端口
(1)查看iptables的規則

iptables-save
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.3:80
按照相同的書寫寫一條規則:
iptables -t nat -A DOCKER ! -i docker0(指定網卡) -p tcp -m tcp --dport 2022(物理端口) -j DNAT --to-destination 172.17.0.3:22
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章