一、持久化存儲
docker容器中通常不保存數據,只封裝系統和環境,這樣就存在一個問題,一個docker容器的數據內容不能持久化,且不能共享出來,在生產中,不能很好地提供服務。爲了解決這個問題,就要涉及到docker的持久化存儲和共享存儲的技術了。
所謂持久化,就是將真實機目錄掛載到容器中,讓容器運行時所產生的數據都寫入到真實機的目錄中,以此來提供持久存儲。html
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 遠程鏡像
二、共享存儲
現實生存環境中,通常會有專門的文件服務器或者是分佈式文件服務器集羣來提供文件的存儲,這次經過共享文件夾的方式來實現共享存儲。
(1)文件服務器提供一個nfs共享存儲==>192.168.1.254linux
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網頁,不會出現相互干擾,且書寫的東西都被存儲在真實的文件服務器中。
三、Docker網絡架構
docker網絡架構中引用的是linux網橋及虛擬交換機架構,這裏的虛擬交換機默認爲docker0,也能夠手工配置虛擬交換機,不過通常是讓docker服務自動配置。
(1)安裝一個網橋管理服務[root@b2 ~]# yum -y install bridge-utils.x86_64
(2)查看虛擬交換機 web
[root@b2 ~]# brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242ae16e82c no (虛擬交換機) (網卡)//若是啓動了容器,則每個容器會對應一張虛擬網卡
(3)斷開斷開網卡與交換機的鏈接,至關於拔網線brctl delif docker0(虛擬交換機) 網卡名
(4)查看默認docker建立的網絡模型 docker
docker network list [root@b2 ~]# docker network inspect c088b2c8b1e7(網橋的id) //查看網橋的底層信息。 docker network 回車,能夠看到它的幫助
(5)手動建立一個網絡虛擬交換機vim
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)啓動容器時指定用哪張網橋,不指定時用docker0docker run -it --network=docker1 192.168.1.194:5000/wang:sh2
服務器
(7)docker會自動搭建路由器
建立的docker1用的網段是192.168.100.0網段的,docker0是172.17.0.0網段的,兩個網段之間能夠相互ping通。
四、容器端口與物理主機端口綁定的原理:
底層原理是啓動了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